c语言gcc910环境下编译报错

北京中科白癜风医院刘云涛 https://wapyyk.39.net/doctor/306474.html

问题

网上验证一个单链表是否有环的c语言demo,放到gcc9.1.0的环境下编译,发现编译报错:

error:‘true’undeclared(firstuseinthisfunction)

分析

发现是demo里使用到的true和flase编译报错了,原来gcc9.1.0下bool关键字还未支持。

深入分析后发现,原来C语言(C99之前)中没有bool关键字。在C语言编程时,我们都是使用BOOL,但BOOL不是内置类型,一般都是通过typedef或者宏来定义的,通常都会被定义成int类型。

  typedefintBOOL;

  #defineTRUE1

  #defineFALSE0

后来的C++出现了内置类型bool,值为true(真)和false(假)。为了与C++兼容,C99标准新增的头文件stdbool.h头文件中引入bool关键字。

//

//stdbool.h

//

//Copyright(c)MicrosoftCorporation.Allrightsreserved.

//

//TheCStandardLibrarystdbool.hheader.

//

#ifndef_STDBOOL

#define_STDBOOL

#define__bool_true_false_are_defined  1

#ifndef__cplusplus

#definebool  _Bool

#definefalse  0

#definetrue  1

#endif/*__cplusplus*/

#endif/*_STDBOOL*/

/*

*Copyright(c)-byP.J.Plauger.ALLRIGHTSRESERVED.

*Consultyourlicenseregardingpermissionsandrestrictions.

V5.30:*/

解决

法1:

由于我是单独跑demo验证的,所以我就写了一个宏定义来保证编译通过就行了了。

typedefenum__bool

{

false=0,

true=1

}bool;

法2:

在源文件中包含stdbool.h头文件即可。

#includestdbool.h

番外

针对C99标准(ISO/IEC:),毫不夸张地说,即便到目前为止,很少有C语言编译器是完整支持C99的。像主流的GCC以及Clang编译器都能支持高达90%以上,而微软的VisualStudio中的C编译器只能支持到70%左右。

所以建议大家在进行C/C++混合编程时,一定要注意代码兼容性。特别是注意一些编程语言特有的关键字与语法等,不能混为一谈,尽量避免不必要的麻烦。

引经据典




转载请注明:http://www.aierlanlan.com/tzrz/3105.html