mat*_*eek 27 c unix gcc keyword
这个代码在gcc版本4.3.2(Debian 4.3.2-1.1)上不能为我编译
main(){
int unix;
}
Run Code Online (Sandbox Code Playgroud)
我检查了C关键字列表,"unix"不是其中之一.为什么我收到以下错误?
unix.c:2: error: expected identifier or ‘(’ before numeric constant
Run Code Online (Sandbox Code Playgroud)
任何人?
pmg*_*pmg 28
unix
不是标准保留的标识符.
如果您使用-std=c89
或编译,-std=c99
gcc编译器将按预期接受该程序.
从gcc手册(https://gcc.gnu.org/onlinedocs/cpp/System-specific-Predefined-Macros.html),重点是我的.
...但是,历史上特定于系统的宏的名称没有特殊的前缀; 例如,在Unix系统上找到unix是很常见的.对于所有这些宏,GCC提供了一个并行宏,在开头和结尾添加了两个下划线.如果定义了unix,也将定义__unix__.永远不会超过两个下划线; _mips的并行是__mips__.
Nik*_*ohl 12
unix是预处理器在gcc中使用的定义之一,用于获取defs使用列表
gcc -dM -E -x c /dev/null
Run Code Online (Sandbox Code Playgroud)
(-dM告诉gcc调试转储defs -E告诉它在预处理后停止并且-xc/dev/null告诉他假装/ dev/null是ac文件)
Kev*_*ent 11
通过预处理器运行代码以找出编译器实际看到的内容:
gcc -E unix.c
Run Code Online (Sandbox Code Playgroud)
然后查看unix
预处理器是保留还是转换了您的变量.
它不是关键字.
它是用于标识系统类型的预定义宏.在Unix和Unix之类的系统中,它被定义为1
.
要禁用它,请使用以下-ansi
选项:
在C模式下,这相当于-std = c89.在C++模式下,它相当于-std = c ++ 98.这会关闭与ISO C90(编译C代码时)或标准C++(编译C++代码时)(例如"asm"和"typeof"关键字)以及预定义宏(例如"unix ")不兼容的GCC的某些功能"和"vax"标识您正在使用的系统类型.它还可以实现不受欢迎且很少使用的ISO三字符功能.对于C编译器,它禁用C++样式//注释以及"inline"关键字的识别.
归档时间: |
|
查看次数: |
3297 次 |
最近记录: |