是的,没有看错,_Bool是C99才引入的类型,像我这种常常把C和C++搞混的的人,对于布尔类型是云里雾里的,确实觉得比较奇怪。
C99以前,C语言是没有布尔类型的,编译器使用int类型来判断真假。
C99提供了布尔类型名称为“_Bool”,为了兼容C++的代码,在标准库里面增加了“stdbool.h”,提供了和C++一致的“bool”类型封装,以及“true”和“false”两个枚举。
C语言中结构体在C99中的一种新的初始化语法,叫做designated initializer,即指定初始化,之前我一直找不到正式的名称,我一直称之为点变量初始化。。。
这个东西与编译器无关,是C99的标准,gcc想用的话必须开启选项 -std=c99
【注意】Designated Initializers是C语言的语法,不是C++的语法,至少C++17还没有包含,在C++代码中不要混用!
【注意】如果使用QtCreator构建工程,那么默认使用g++编译,然而如果designated initializer语句是在cpp文件里,g++是不支持的,不管CXX_FLAG 是不是加了c++11,或者C_FLAG 加了99,或者加入extern "C",都不行, extern "C"只是指示c++编译器把函数编成C语言可识别的符号表,并不支持这种赋值语法。
但是我发现了一种方法,就是强行改cpp后缀为c,这样g++就会调用gcc来编译c文件。