LINUX.ORG.RU

Ответ на: комментарий от kemm

Про C89 и K&R так, но язык развивается и текущая ревизия это С99. Ведь нету же двух Си, есть текущая версия. И говорить нужно в контексте текущего положения дел.

Yep. Один стандарт — тоже не язык.

Вот стандарт это язык, компилятор же всегда отдельный его диалект. Если мы следуем диалекту, то рискуем нарваться на неприятности. Компилятор волен не следовать чётко стандарту, кто же его заставит, но язык это другое. В общем если мы говорим о языке, то нельзя, если о конкретном компиляторе, то возможно допустимо. Предупреждения это вполне законная фича компиляторов для легаси кода. Но кто знает что будет дальше?

Чтобы понятнее было, пример: использование в printf(3) аргумента не того типа, что описан в строке формата, не является ошибкой в С. Но является фигнёй, допускать которую нельзя.

Это конечно всё наследие тяжёлого прошлого и миллиардов строк уже написанного кода, но комитет пытается улучшить ситуацию.

Booster ★★
()
Ответ на: комментарий от Booster

> Вот стандарт это язык

Что будем делать с софтом, написанным до 99го года? На каком языке он написан? Вот есть язык python, и есть версии 2.4, 2.5, 2.6, 3.0 и тому подобное. Так понятнее?

В общем если мы говорим о языке, то нельзя

Ньет. Если говорим о языке, то можно, если о последней версии стандарта, то нельзя, если о компиляторе — надо смотреть на месте.

Если о здравом смысле — то тоже нельзя, равно как и объявления функции 'int foo();' для 'int foo(int arg1, char *arg2, ...);', например (хотя в С99 оно ещё поддерживается).

Собственно, «язык Х запрещает фичу У» — фича У запрещена во всех официальных ревизиях языка Х. Если же «язык Х допускает фичу У» — фича У разрешена хотя бы в одной из официальных ревизий языка Х.

kemm
()
Ответ на: комментарий от kemm

>Что будем делать с софтом, написанным до 99го года? На каком языке он написан? Вот есть язык python, и есть версии 2.4, 2.5, 2.6, 3.0 и тому подобное. Так понятнее?
Согласен, но говорить о предыдущих версиях странно, мало ли чего там было возможно.

Собственно, «язык Х запрещает фичу У» — фича У запрещена во всех официальных ревизиях языка Х. Если же «язык Х допускает фичу У» — фича У разрешена хотя бы в одной из официальных ревизий языка Х.

В текущей версии нет, ибо если что-то не прописано явно, значит является расширением компилятора, но ни как не языка. В VS есть свойства, в gcc вложенные функции, но этого нет в языке. Для меня язык это последняя его ревизия, о ветках тут по-моему рассуждать немного странно.

Booster ★★
()
Ответ на: комментарий от Booster

> В текущей версии нет

В текущей версии (C99) нет, в языке да.

В VS есть свойства, в gcc вложенные функции, но этого нет в языке

Ни msvc, ни gcc не являются официальными ревизиями языка. C89 — является.

Для меня язык это последняя его ревизия, о ветках тут по-моему рассуждать немного странно.

Возвращаемся обратно: язык python — это python 2.7 или python 3.1?

kemm
()
Ответ на: комментарий от kemm

>Возвращаемся обратно: язык python — это python 2.7 или python 3.1?
Убедил, в С89 можно, в С99 нельзя. Родили в споре истину. ^)

Booster ★★
()
Ответ на: комментарий от Booster

> Убедил, в С89 можно, в С99 нельзя. Родили в споре истину. ^)

Надо её закопать обратно, пока не убежала. 8)) Поэтому докопаюсь — в C можно, в C99 — нельзя. 8-Р

kemm
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.