(deninok) писал(а):Ещё более странный вопрос. Могу лишь сказать, что некоторые положения из стандарта С++ были добавлены в последний стандарт С (С99). Например, поддержка комментариев //.
ну а причёт тут C++ то ?
вот даже NULL, в C это (void *) 0 а в C++ это 0
если в C++ это ноль, это никак не делает NULL в C просто нулём, т.к. это полностью меняет смысл выражения
новый стандарт не меняет старого, только если его переутвердят, компилятор может поддерживать все стандарты на момент своего выпуска, а пока он существует может выйти новая версия стандарта языка для которого он написан, он обязан только соответствовать той версии стандарта языка, для которого он написан, которая была на тот момент когда он был написан (все которые были на тот момент) и не должен отменять ни одну из предыдущих версий стандарта
то есть если есть компиляторы написанные после 89 года, то они все должны поддерживать ANSI, если написаны после 99 года, то они все должны поддерживать 99, соответственно любой который написан после 99 написан и после 89, любой который поддерживает 99 обязательно включает в себя и ANSI
если я пишу на ANSI там есть некоторые моменты, которые противоречат 99, компилятор не знает на каком я пишу на ANSI или на 99 и выдаёт предупреждение, т.е. если он выдаёт предупреждение это ещё не значит что там ошибка, потому и определения функций типа
void f(a, b, c) int a; int b; int c; {
}
не будут ошибкой, потому что это ещё древнее ANSI, т.е. это противоречит ANSI, т.к. там принято другое, но ошибки в объявлении локальных переменных там нет, void'а там не было он соответсвует ANSI, определения переменных в ANSI новые, а компилятор поддерживает и старые (возможно он их переведёт как новые), но старый вид определения локальных переменных не отменяется, пока старый вид (он вроде не был стандартизован даже) где-нибудь может применяться он должен поддерживаться компиляторами для C