conio.h和linux问题

时间:2014-06-07 12:05:06

标签: c++ c linux

我的程序在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

2 个答案:

答案 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版本,对原始版本的干扰最小,因此为所有目标保留一个源库。