gcc 4.3.2 编译时 发生 error: redeclaration of C++ built-in type 'bool' 错误 .

时间:2023-01-15 18:51:20
我在redhat linux 下安装了gcc4.3.2 也生成了 c++, gcc, cpp 等可执行文件

但是用c++  test.cpp 编译时却发生了 error: redeclaration of C++ built-in type 'bool' 错误.

望高手赐教!

test.cpp 内容如下:

#include <stdio.h>
#ifndef bool
typedef int bool;
#endif
int main(void)
{
  #if defined(__alpha)
  printf("defined __alpha\n");
  #else
  printf("not defined __alpha\n");
  #endif
  return 0;
}

7 个解决方案

#1


这个你想做什么?

#ifndef bool
typedef int bool;
#endif

编译器提示“重定义C++的内置类型bool”,因为#ifndef判断的是是否已经定义了宏“bool”,在C++中bool是一个内置的类型名,不是宏,所以会出这个错误。
你把代码当做c编译应该就不会出这个问题了。如果代码后缀是.cpp,可以在编译选项里加-x c指定为c语言。

#2


bool是c的关键字。
还记得这是第1节课的知识了。

#3


谢谢!
这段程序是测试代码。事情是由我所维护程序的一头文件(commonType.h)的编译错误问题开始的。
我的头文件导致编译错误部分的代码如下:
////////////////////////////////////////
/* Boolean definition */ 
#if !defined(__cplusplus)

#ifndef bool
typedef  int                bool;
#endif /* bool */

#elif defined(__linux)
 
#if (__DECCXX_VER < 60000000)
#ifndef bool 
typedef int    bool; /*这是导致编译错误的代码 */
#endif
#endif  /* __DECCXX_VER */

#endif /*__cplusplus && linux*/
///////////////////////////////////////////
经过我进一步排查,x86 linux的代码无需 __DECCXX_VER 这一部分,这样错误就不会再发生了.

#4


引用 2 楼 Binzo 的回复:
bool是c的关键字。
还记得这是第1节课的知识了。


bool 不是c的关键字而是c++的关键字

#5


还真是, 那我当时学的是C++。

但是你的文件的后缀是.cpp。所以bool还是不能用。

#6


应该是
#ifndef bool
#define bool int
#endif
用typedef可不行

#7


typedef和#define不是一回事!

#1


这个你想做什么?

#ifndef bool
typedef int bool;
#endif

编译器提示“重定义C++的内置类型bool”,因为#ifndef判断的是是否已经定义了宏“bool”,在C++中bool是一个内置的类型名,不是宏,所以会出这个错误。
你把代码当做c编译应该就不会出这个问题了。如果代码后缀是.cpp,可以在编译选项里加-x c指定为c语言。

#2


bool是c的关键字。
还记得这是第1节课的知识了。

#3


谢谢!
这段程序是测试代码。事情是由我所维护程序的一头文件(commonType.h)的编译错误问题开始的。
我的头文件导致编译错误部分的代码如下:
////////////////////////////////////////
/* Boolean definition */ 
#if !defined(__cplusplus)

#ifndef bool
typedef  int                bool;
#endif /* bool */

#elif defined(__linux)
 
#if (__DECCXX_VER < 60000000)
#ifndef bool 
typedef int    bool; /*这是导致编译错误的代码 */
#endif
#endif  /* __DECCXX_VER */

#endif /*__cplusplus && linux*/
///////////////////////////////////////////
经过我进一步排查,x86 linux的代码无需 __DECCXX_VER 这一部分,这样错误就不会再发生了.

#4


引用 2 楼 Binzo 的回复:
bool是c的关键字。
还记得这是第1节课的知识了。


bool 不是c的关键字而是c++的关键字

#5


还真是, 那我当时学的是C++。

但是你的文件的后缀是.cpp。所以bool还是不能用。

#6


应该是
#ifndef bool
#define bool int
#endif
用typedef可不行

#7


typedef和#define不是一回事!