我的程序正在Windows上编译,没有问题。在windows上,我在linux上使用conio.h,我使用的是替换在这里输入链接描述。我的第一个错误:typedef enum {FALSE=0x00, TRUE=0xff} BOOL;和error:
types.h:39:15: error: expected identifier before numeric constant
types.h:39:15: error: expected ‘}’ before numeric constant
types.h:39:15: error: expected unqualified-id before numeric constant
types.h:39:36: error: expected declaration before ‘}’ token发布于 2014-06-07 18:46:11
因此,问题在于如何避免重新定义TRUE/FALSE和BOOL。
在移植C应用程序时,最好有一个头文件来定义您移植到的各个系统的功能,将机器特定的逻辑保持在一个位置。
然后,在您的源代码中,您可以做如下工作:
#include "machine.h"
#if HAS_BOOL
#define FALSE myFALSE
#define TRUE myTRUE
#define BOOL myBOOL
#endif
#ifndef HAS_32bit_LONG
/* long is 64bit */
...
#endif然后,您的类型.h包括在系统文件和machine.h之后,将避免试图重新定义。
在machine.h中,您可以找出您正在为哪台机器编译(或将您自己的-D参数设置为C编译器),并设置适当的功能,以启用代码。虽然这可能看起来有点过分,但是当您“只是”做一个端口时,您会发现如果稍后移植到OSX,它会使事情变得更简单。
它可能看起来很脆弱,但使用这种策略,允许使用替代信号包,在需要时改进malloc版本,对原始版本的干扰最小,因此为所有目标保留一个源库。
发布于 2014-06-07 12:09:28
typedef与#定义FALSE或TRUE的其他标头发生冲突。
https://stackoverflow.com/questions/24096972
复制相似问题