C89, Смешивание объявлений переменных и кода

Мне очень любопытно узнать, почему именно компиляторы C89 будут сбрасывать вас, когда вы пытаетесь смешать объявления переменных и код, например, вот так:

rutski@imac:~$ cat test.c
#include <stdio.h>

int
main(void)
{
    printf("Hello World!\n");
    int x = 7;
    printf("%d!\n", x);
    return 0;
}
rutski@imac:~$ gcc -std=c89 -pedantic test.c
test.c: In function ‘main’:
test.c:7: warning: ISO C90 forbids mixed declarations and code
rutski@imac:~$ 

Да, вы можете избежать подобных вещей, оставаясь подальше от -педантичный. Но тогда ваш код больше не соответствует стандартам. И как любой, кто может ответить на этот пост, вероятно, уже знает, это не просто теоретическая проблема. Платформы, такие как компилятор C от Microsoft, обеспечивают эту скорость в стандарте при любых и любых обстоятельствах.

Учитывая, насколько древний C, я могу предположить, что эта функция связана с некоторой исторической проблемой, восходящей к экстраординарным аппаратным ограничениям 70-х годов, но Я не знаю подробностей. Или я совершенно не прав?

5
задан fieldtensor 27 June 2011 в 04:09
поделиться