LINUX.ORG.RU

C как такое может быть????


0

0

anonymous@test$ cat main.c
int main()
{
        printf ( "ok\n" );
        int *i = (int *) malloc (255);
        return 0;
}
anonymous@test$ gcc main.c
anonymous@test$ ls
a.out  main.c
anonymous@test$ ./a.out
ok

подсознание подсказывает что то про стандарты 
но мозг отказывается верить в то что
без инклудов printf и malloc откомпились и прога запустилась

подскажите может я че туплю?
anonymous

аа да gcc --version gcc (GCC) 3.4.6 (Gentoo 3.4.6-r2, ssp-3.4.6-1.0, pie-8.7.10)

anonymous
()

А вот фигвам! Какая версия gcc?

teddy@toshiba~$ gcc okok.c -o okok   
okok.c: In function 'main':
okok.c:3: warning: incompatible implicit declaration of built-in function 'printf'
okok.c:4: warning: incompatible implicit declaration of built-in function 'malloc'
teddy@toshiba~$  gcc --version
gcc (GCC) 4.1.2
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Uncle_Theodore ★★
()

> но мозг отказывается верить в то что без инклудов printf и malloc откомпились и прога запустилась

инклюд это декларация. В Си (в отличие от Си++) декларация функций не обязательна -- если функция не декларирована то считается что она возвращает int и принимает ...

Должен варнинг только выдаться.

Ну и эти функции в libc поэтому линковщик их тоже найдет.

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

> ну так собралось же...

Ну, почему собралось, уже рассказали. Главное, что ругнулось -- для отладки вещь важная. :)

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

то есть получается линковщик ищет определения этих функций в стандартных либах???

а где про "это" можно почитать?

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

> а где про "это" можно почитать?

У Кернигана и Ричи.

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

>а где про "это" можно почитать?

это неявная декларация, читается в любой книге по сям

// капчи нет

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

Хорошо обосновал, теперь осталось обосновать противоположный результат :)

Burbaka ★★
()

декларация нужна только для структур и констант

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