Вопрос Вопрос к программистам

Регистрация
14 Июл 2013
Сообщения
83
Репутация
0
Спасибо
0
Монет
0
Вот есть функция printf из stdio.h.

И когда говорят что он находиться в stdio.h говорят что там находиться не функцтя а его прототип.



Но в учебных материалах нас учат писать функции в заголовочных файлах.

А потом создавать прототип вызываемой функции в начале программы чтобы компилятор знал.

Но прототип для меня выглядит так:

int printf(char str, char arg1);

, а сама функция int printf(char str, char arg1){

Тело функции}

Что то типа такого, ноесли мы посмотрим stdio.h там никакого не то что функции printf нет, тами прототипа нет.

Там одно упоминание printf где директива define подставляет 4 место _PRINTF_NAN_LEN_MAX .



Вопрос.

Где тогда находится сама рривычная для меня вид функции?

Или этот код для взлома Пентагона и есть часть функции printf?

extern FILE *fopen64 (const char *restrict __filename,

const char *__restrict __modes)

__attribute_malloc attr_dealloc_fclose __wur;

extern FILE *freopen64 (const char *__restrict __filename,

const char *__restrict __modes,

FILE *__restrict __stream) __wur __nonnull ((3));

#endif



#ifdef __USE_POSIX

extern FILE *fdopen (int __fd, const char *__modes) __THROW

__attribute_malloc __attr_dealloc_fclose __wur;

#endif

#ifdef __USE_MISC
 
В C, функции, такие как printf, объявлены в заголовочном файле stdio.h, но их определения (реализации) обычно находятся в стандартной библиотеке. Когда вы включаете stdio.h в свой код, вы получаете прототипы функций (их объявления), но не сами реализации.

Прототип функции обычно выглядит как:

c
Copy code
int printf(const char *format, ...);
Где ... означает, что функция принимает переменное количество аргументов.

Определение (реализация) функции printf и других стандартных функций находится в стандартной библиотеке C, которая компилируется вместе с вашей программой. В большинстве случаев эта библиотека уже установлена на вашем компьютере, и компилятор автоматически связывает вашу программу с ней.

Если вы используете стандартный компилятор C, то вы обычно не видите кода стандартной библиотеки. Этот код скомпилирован и доступен в виде бинарных объектов, готовых к использованию.

Относительно вашего второго вопроса, код, который вы показали, не является определением функции printf. Этот код в stdio.h содержит прототипы для различных функций стандартной библиотеки, таких как fopen64, freopen64, fdopen и другие, которые относятся к работе с файлами. Функция printf может быть реализована в другом месте в стандартной библиотеке.
 
Конечная реализация функции находится в dll библиотеке. Вы ее не можете посмотреть, потому что она на машинном коде специфичном для данной архитектуры и операционной системы. Другими словами как вы средствами языка можете "пощупать" внутренности компьютера?
Вы захотите же копнуть еще глубже, что такое стандартное устройство вывода, каким образом байты превращаются в пиксели на экране? )
 
Назад
Сверху