为什么gcc在使用变量名时不显示警告消息?

时间:2019-03-10 11:05:55

标签: c gcc gcc-warning

我是C语言的新手,正在第四版的 Programming in C 中学习C语言。由Stephen Kochan撰写。在第29页上,他写道$对于变量名不是有效字符。他正在使用C11标准。

我写了以下代码

#include <stdio.h>

int main (void)
{
    int a$ = 1;

    printf ("%i", a$);

    return 0;
}

并使用命令gcc -std=c11 -pedantic practice.c -o practice.o && ./practice.o运行它。我的文件名为practice.c

输出为1。编译器不应该警告我使用$吗? GCC提供的扩展程序不是使用$符号作为标识符吗?

我正在Ubuntu 18.10中使用GCC 8.2.0。

编辑:

此外,当我使用-std=c11时,GCC不会使用GNU扩展吗?这就是本书附录(第497页)中写的。

虽然我通过使用-std=c89得到警告。

2 个答案:

答案 0 :(得分:11)

您收到-std=c89 -pedantic的警告。 C99和更高版本允许在标识符中使用other implementation-defined characters

答案 1 :(得分:2)

据此:GCC Documentation

  

在GNU C中,通常可以在标识符名称中使用美元符号。这个   这是因为许多传统的C实现都允许使用此类标识符。   但是,少数目标不支持标识符中的美元符号   机器,通常是因为目标汇编器不允许它们。

因此,$是有效的,但这不是用C语言进行编码的一致方式。