Где находится тело функции в заголовочных файлах C - PullRequest
1 голос
/ 27 января 2011

Когда я смотрю на файлы заголовков C (или C ++) например stdio.h есть определение некоторых функций например

_CRTIMP FILE* __cdecl __MINGW_NOTHROW fopen (const char*, const char*);
_CRTIMP FILE* __cdecl __MINGW_NOTHROW freopen (const char*, const char*, FILE*);
_CRTIMP int __cdecl __MINGW_NOTHROW fflush (FILE*);
_CRTIMP int __cdecl __MINGW_NOTHROW fclose (FILE*);
/* MS puts remove & rename (but not wide versions) in io.h  also */
_CRTIMP int __cdecl __MINGW_NOTHROW remove (const char*);
_CRTIMP int __cdecl __MINGW_NOTHROW rename (const char*, const char*);
_CRTIMP FILE* __cdecl __MINGW_NOTHROW tmpfile (void);
_CRTIMP char* __cdecl __MINGW_NOTHROW tmpnam (char*);

Можете ли вы сказать мне где тело этих функций .....

Ответы [ 2 ]

3 голосов
/ 27 января 2011

Обычно, как сказал @Daren Thomas, у вас будет файл .c, соответствующий хадеру (файл .h).Однако, что касается стандартной библиотеки, эти файлы c предварительно скомпилированы и собраны в большой файл (например, libc.so), и их можно найти в папке lib вашего компилятора в Windows и в папке / usr / libв ОС Unix / Linus.

Для g ++ библиотека libc используется в качестве стандартной библиотеки.Вы можете скачать пакет здесь:

http://ftp.gnu.org/gnu/glibc/glibc-2.9.tar.gz

... и просмотреть исходный код для всех функций.

3 голосов
/ 27 января 2011

Обычно тело находится в файле с тем же именем, но заканчивающимся на .c или .cpp.

Иногда у вас нет исходного кода, поэтому ищите .o, который содержит объектный код для вашей библиотеки, то есть скомпилированной библиотеки. Заголовочный файл является своего рода описанием API.

В особых случаях, таких как stdio.h, которые являются частью стандартной библиотеки, расположение этих файлов зависит от конкретной реализации. Фактически, наличие этих файлов также зависит от реализации - я полагаю, что компилятор может предоставить эту информацию, как ему угодно.

...