繁体   English   中英

“ __G”表示什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM