LINUX.ORG.RU

Совместимость с C90 в 21-м веке - зачем?

 


0

3
предупреждение: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]

Многие опенсорсные проекты тащат совместимость исходников с C90, конкретнее — не дают на уровне стандартов кодирования смешивать declarations и statements в функциях.

Вопрос: зачем это на практике нужно?

Кажется, всё, на чём нет более-менее современного компилятора, умеющего в C99, уже давно превратилось в археологический артефакт а ля говно мамонта. Неужели кто-то реально современный код компилирует такими древними компиляторами? У кого возникает такая практическая необходимость?

Мне действительно любопытно.

Deleted

Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

В хорошем коде нет нужды в комментариях. За исключением тех, из которых генерируются маны API потом.

Скорее не в хорошем коде, а в идеальном мире. Потому что если код хорош, но мир не идеален, то может возникнуть ситуация, когда код выразителен и понятно, что он делает, но вот отчего вдруг такая необходимость именно в этом месте возникла абсолютно не понятно. И вот тогда только комментарием можно объяснить, что не так с этим миром.

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

Вот пару лет назад в кокой-то почтовой рассылке, связанной с LLVM, GPU & OpenCL прочитал, что какой-то свободный разработчик, делающий ощутимый вклад, негативно отозвался о том, насколько «хорошо» архитектура LLVM на самом деле подходит к оптимизации параллельных вычислений. Эх, не могу больше найти ссылку. Но вот эта, может, как раз тоже в ту сторону.

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

// в C89 даже long long нет (и, как следствие, int64_t)

#include <stdint.h>

int main()
{
        int64_t ret;
        ret = 0;
        return ret;
}
$ gcc -Wall -std=c89 -Wpedantic -o test test.c
$

Всё работает.

А вот тут:

#include <stdint.h>

int main()
{
        long long ret;
        //int64_t ret;
        ret = 0;
        return ret;
}
$ gcc -Wall -std=c89 -Wpedantic -o test test.c
test.c: In function ‘main’:
test.c:5:14: warning: ISO C90 does not support ‘long long’ [-Wlong-long]
         long long ret;
              ^
test.c:6:9: error: C++ style comments are not allowed in ISO C90
         //int64_t ret;
         ^
test.c:6:9: error: (this will be reported only once per input file)
$
самое интересное, что long long всего лишь предупреждение, в отличие от комментария. И это не смотря на то, что комментарий отбрасывается, а long long всё же нужно в код превращать. Странно.

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

Прикол в том, что stdint.h был включен только в C99.

Я тоже удивился, что не было предупреждений, т.к. где-то попадалось, что якобы это фича появилась не так давно (хотя это же единственная 100% гарантия для переносимости типов без заморочек). Да, но если это НЕ C89, то в заголовках должна быть проверка на стандарт Си с соответствующим #warning или #error, и это баг компилятора, не?

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

И кому нужен убогий компилятор майкрософт, когда можно gcc/clangом прекрасно все компилировать?

Пользуюсь случаем, спрошу: завезли ли clang на винду, и если да, можно ли им компилировать Qt? (Да, я помню, тема про C, а не про C++, но всё же). А то mingw какой-то сильно медлительный, в разы медленнее линуксового gcc.

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

Вроде как майкрософт активно пилит возможность использовать шланг как бэкенд студии, и это правильно.

https://blogs.msdn.microsoft.com/vcblog/2015/12/04/clang-with-microsoft-codeg...

Freyr69 ★★★
()
Последнее исправление: Freyr69 (всего исправлений: 1)
Ответ на: комментарий от Freyr69

Меня бы больше заинтересовало прикручивание к Qt Creator :)

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