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;
}

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

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

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

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

anonymous_incognito ★★★★★ ()

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

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

Keiko ()

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

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

Selecter ★★★★ ()

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

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

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

anonymous_incognito ★★★★★ ()

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

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 ★★★ ()
Ответ на: Re: Откомпилировалось БЕЗ ошибок. Почему? от anonymous_incognito

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

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

anonymous_incognito ★★★★★ ()

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

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

f(void)
{
return 0;
}

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

fghj ★★★★★ ()
Ответ на: Re: Откомпилировалось БЕЗ ошибок. Почему? от anonymous_incognito

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

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

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

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