2011-01-27 2 views
1

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

_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*); 

Можете ли вы сказать мне, где являются тело theese функций .....

+0

Вам даже не нужно открывать файлы в вашей системе. Иногда они размещены в Интернете, как HTML файлы, как это https://docs.google.com/viewer?pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxyeWFuYnJvb21maWVsZHxneDo1MmVlMGE3ZWY0M2U4ODk3&docid=ceac0a02f360520a8550d5bb6203700d%7C434bbc224d60a89bc0bbca61eea5d16d&chan=EQAAACOxrV%2B9nw4spSLems6Hb5e7CThUhkFvzhJxKF5%2BcOXC&a=v&rel=zip;z428;io.h или это https://svn.janelia.org/penglab/projects/vaa3d/trunk/v3d_main/common_lib/mingw32/include/stdio.h –

ответ

3

Обычно, как сказал Дарман Томас, у вас будет файл .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

Как правило, тело находится в файле с тем же именем, но окончание в .c или .cpp.

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

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

+0

но не файл с именем stdio.c или stdio.cpp или stdio.o – namco

+2

@namco: потому что реализация выполняется в библиотеках времени выполнения. Для MS эти библиотеки: http://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.71).aspx – eckes

+1

И для Linux много файлов заголовков предоставляют прототипы для системных вызовов , которые вообще не реализованы в C, - это в основном встроенная сборка или код уровня ядра – Falmarri

Смежные вопросы