Говоря, что gcc не может скомпилироваться в режиме до C99 - PullRequest
0 голосов
/ 24 января 2019

Я читаю лекцию по истории C и хотел бы показать некоторые идиомы, которые раньше были невозможны, но сейчас есть (в частности, определение переменных в середине блока). Я хотел бы показать, что старые компиляторы C не будут компилировать его.

gcc имеет опцию -std= для установки стандарта языка. К сожалению, установка его для -std=c89 не приводит к ошибкам компиляции при определении переменных в середине блока.

Я надеялся на более точную стандартную версию (т. Е. - -std=knr), но я не мог найти такую ​​возможность.

Я что-то упустил? Это ошибка в GCC?

gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0

Код, который ошибочно компилируется:

#include <stdio.h>

int main(argc, argv)
int argc;
char *argv[];
{
        printf("Hello, world\n");

        int a;

        return 0;
}

1 Ответ

0 голосов
/ 24 января 2019

Если вы хотите действительно строго соответствовать флагу -std, он должен сопровождаться флагом -pedantic-errors.

В качестве демонстрации ваш код на wandbox с этими флагами выдает:

prog.c: In function 'main':
prog.c:9:9: error: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
         int a;
         ^~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...