[英]What does “__G” signify?
__G
在C中表示什么?
我正在使用GCC 4.9。
我正在使用最新的MinGW版本。
我正在使用-std=gnu11
编译。
我有以下C(使用GCC作为C11编译)代码:
#ifndef __G
#define __G 0
#endif
它编译良好。
但是现在,在使用最新的MinGW进行编译时,我得到以下信息:
In file included from ../common/sysbase/sysbase.h:6:0,
from Monitor.c:5:
../common/sysbase/sysbase_chk.h:3:13: error: expected ';', ',' or ')' before numeric constant
#define __G 0
compilation terminated due to -Wfatal-errors.
MinGW64下的GCC似乎在使用`__G。
我无法在任何标题中找到它。
__G
只是一个标识符。 我不知道它的任何标准用法,但是由于它以两个下划线开头,因此出于所有目的保留给实现。 这里的“实现”一词指的是C编译器和库,而不是您编写的任何代码(除非您自己实现编译器或C标准库的一部分。)
(标准规定,任何以两个下划线开头,下划线和大写字母开头的标识符都保留供任何使用;任何以下划线开头的标识符均保留用于文件范围。请参见N1570 C的 7.1.3节标准草案 。)
您不应在自己的代码中使用它。 这样做会使程序的行为不确定。
允许C实现(编译器,链接器,标头或库)以任何喜欢的方式定义__G
。 显然,这就是您遇到的问题。
在回答您评论中的问题时:
现在,经过一年多的使用这些标头编译代码后,我是否需要更改aaalll代码?
是的,这正是我的意思。 您对__G
使用始终不正确; 您碰巧直到现在都没有遇到任何明显的症状。
(至少可以想象,以前版本的MinGW以某种方式定义了它,不会导致您的代码无法编译,但是可能导致其行为异常。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.