我的程序在Windows上编译没有问题。在Windows上我在linux上使用conio.h
我正在使用替换enter link description here。我的第一个错误:typedef enum {FALSE=0x00, TRUE=0xff} BOOL;
和错误:
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
答案 0 :(得分:4)
typedef与其他一些#defines为FALSE或TRUE的标题冲突。
答案 1 :(得分:1)
所以问题是如何避免重新定义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
然后你的types.h包含在系统文件和machine.h之后,将避免尝试重新定义。
在machine.h中,你可以找出你正在编译的机器(或者为C编译器设置你自己的-D参数),并设置适当的功能,以启用适用于各种事物的代码。虽然这看起来有点矫枉过正,但当你只是"只是"做一个端口,如果你以后移植到OSX,你会发现它会变得更容易。
它可能看起来很脆弱,但是使用这种策略,允许使用替代信号包,在需要时改进malloc版本,对原始版本的干扰最小,因此为所有目标保留一个源库。