@evg_96

Как линковщик ищет функции?

Как я понял объявление функции находится в файле stdio.h (Какое то необычное объявление функции)
_Check_return_opt_
_CRT_STDIO_INLINE int __CRTDECL printf(
    _In_z_ _Printf_format_string_ char const* const _Format,
    ...)


А где находится само определение функции? (Ну и где локально находится stdio.h).
На каком этапе в программе будет присутствовать исходный код упомянутой функции? И в каком виде, уже в бинарном, asm или на С?
  • Вопрос задан
  • 403 просмотра
Пригласить эксперта
Ответы на вопрос 3
@al_sh
исходный код присутствовать не будет. на этапе линковки объектный код будет прилинкован к объектному коду вашей программы. объектный код printf является частью стандартной библиотеки с/с++ libc/glibc
Ответ написан
Комментировать
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
Почти наверняка это функция в сторонней либе и будет из нее дергаться.
Покрайней мере так, обычно реализовано на линкусах. Как оно на винде не знаю.
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
У меня другое определение :) - а это я не знаю, откуда Вы такое добыли.
Ведро 4.14.52, glibc 2.26-r7, Calculate Linux 17
extern int printf (const char *__restrict __format, ...);


То же самое - ведро 2.6.32-696, glibc 2.12, CentOS 6.10
extern int printf (__const char *__restrict __format, ...);


Локально stdio.h находится там же, где и все - в /usr/include. Исходный код данной функции никогда в программе присутствовать не будет. Вообще. Код stdio() находится в glibc, которая находится соответственно в /lib64 (для 32-битных систем - в /lib). Если очень хочется посмотреть на ее исходник - качайте исходник glibc.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы