LINUX.ORG.RU

Откомпилировалось БЕЗ ошибок. Почему?


0

0

Написал я вот это сообщение и решил кое-что проверить:

http://www.linux.org.ru/view-message.jsp?msgid=1099828#1101177

Случайно ошибся, забыл int написать в определении переменной.


#include <stdio.h>
int main()
{
 static i;
 printf("i = %d \n",i);
 return 0;
}

Однако, такая програмка мало того, что компилируется, так ещё и
работает.

Чего я не знаю?

Забыл сказать: компилировал gcc version 3.4.1

anonymous_incognito ★★★★★
() автор топика

лично я хз, может и компилятор виноват. У меня, например, в mdk 10.0 когда-то C++ код, где inline метод реализован в (!) .cpp файле нормально собрался и работал :D

Keiko
()

Нашёл код, где так static использовался. Вроде int по дефолту.

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

Не думаю, чтобы уж так явно был виноват, в смысле глючен, компилятор, скорее всего, мы просто не до конца знаем все особенности языка.

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

anonymous_incognito ★★★★★
() автор топика

In C90 an omitted typespecifier implied the type specifier int. Translating a source file that contains such a declaration will cause a diagnostic to be issued and are no longer considered conforming programs.

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

Кстати, откомпилировал разные варианты, без int, с int, с int и присвоением нуля, действительно diff отличий между исполняемыми модулями не нашёл.

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

При "-Wall" компилируется с предупреждениями.

amm
()

можно написать например так

f(void)
{
return 0;
}

в определение типа int можно опускать

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

> в определение типа int можно опускать

В C99 уже нельзя.

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

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

Да, мандряковский gcc (AFAIK, 3.2.3) откомпилировал нормально, а в других дистрах, ессно, ld ругнулся - undefined symbol.

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