Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Чуть чуть не так [upd] 06.11.03 01:45 Число просмотров: 1198
Автор: amirul <Serge> Статус: The Elderman Отредактировано 06.11.03 01:47 Количество правок: 1
|
> Вот, собственно, и все :) Спасибо vaborg за ссылку на > статью, в ней на самом деле есть короткий и ясный ответ: > некоторые функции стандартной библиотеки C участвуют в > компоновке всегда, потому что так В корневом посте затыкается не компоновщик, а компилер. Все из-за того, что для C++ прототип обязателен перед первым использованием (в частности связано с манглянием имен, которая в свою очередь связана со строгой типизацией), а в C - нет. В последнем случае VC++ выводит более понятный ворнинг: что то типа "функция не объявлена, будем считать, что возвращает int". В код генерится выкладывание всех аргументов в стек и
call _printf
О реальных типах агрументов ничего знать не надо.
Кстати еще одно отличие C от C++, связанное со строгой типизацией. Объявление вида
int f();
В C понимается как
int f(...); - то бишь о типах агрументов ничего не известно. А в C++ как
int f(void); - функция не имеет аргументов
А в целом действительно все происходит потому, что gcc узнает язык по расширению.
-----------------
А компоновщик тут вообще ни при чем. libc (и c++ аналоги) линкуются всегда вне зависимости от того, были подключены хедеры или нет.
|
|
|