Почему gcc не показывает предупреждающее сообщение об использовании $ в имени переменной? - PullRequest
12 голосов
/ 10 марта 2019

Я новичок в C и изучаю C из Программирование на C , 4-е изд. Стивен Кочан. На странице 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?

Я использую GCC 8.2.0 в Ubuntu 18.10.

Edit:

Кроме того, не использует ли GCC расширения GNU, когда я использую -std=c11? Это то, что написано в приложении к книге (стр. № 497).

Я получаю предупреждение, используя -std=c89.

Ответы [ 2 ]

11 голосов
/ 10 марта 2019

Вы получаете предупреждение с -std=c89 -pedantic. C99 и более поздние версии допускают другие определяемые реализацией символы в идентификаторах.

2 голосов
/ 10 марта 2019

В соответствии с этим: Документация GCC

В GNU C вы обычно можете использовать знаки доллара в именах идентификаторов. это потому что многие традиционные реализации C допускают такие идентификаторы. Однако знаки доллара в идентификаторах не поддерживаются по нескольким целям машины, как правило, потому что целевой ассемблер не позволяет им.

Итак, $ допустимо, но это не соответствующий способ кодирования в C.

...