Файлы заголовка C, которые входят в состав вашей операционной системы, компилятора или библиотеки времени выполнения C, на самом деле не предназначены для потребления человеком. Вы можете их прочитать, и вы можете немного научиться, пытаясь понять их, но они в первую очередь предназначены для использования компилятором. Как вы видели в этих примерах, они, как правило, зависят от множества специфических для компилятора функций (привычка, которую вы должны избегать в своем собственном коде).
Они также имеют тенденцию иметь много #ifdef
s, поэтому одни и те же заголовки могут использоваться с различными системами.
Если вы просто хотите знать, как использовать функцию sin
, например, вам лучше читать документацию вашей системы. В моей системе Ubuntu, например, man sin
это показывает (среди прочего):
СИНТАКСИС
#include <math.h>
double sin(double x);
float sinf(float x);
long double sinl(long double x);
Link with -lm.
_CRTIMP
и __cdecl
, вероятно, важны для компилятора, но как программист вы можете безопасно игнорировать их.
Если вы ищете исходный код, который реализуетsin
функция, которая может быть или не быть доступна. Он может быть написан на языке, отличном от C; были даже системы, в которых она реализована на аппаратных средствах (хотя потребуется небольшая оболочка).
Другой ответ дает ссылку на одну реализацию, но это, вероятно, не тот, который используется в вашей системе.
И вам не нужно слишком зависеть от того, как реализована функция sin
. Это, конечно, хорошая вещь, чтобы знать, но вам не нужна эта информация для написания кода, который ее использует. (Я абсолютно не хочу отбить любопытство.)
Первой гугле ссылки: http://objectmix.com/c/32997-whats-use-__cdecl.html и ваш ответ: '_CRTIMP просто макрос, который, вероятно, расширяется до некоторой нестандартной спецификации вызова или нечего, в зависимости от нестандартного . «CRT» , вероятно, означает «C Runtime Library». «IMP», вероятно, означает «импорт». __cdecl - спецификатор соглашения о вызовах, поддерживаемый Visual C++ и некоторыми другими компиляторами Windows C++. – Vyktor
Я полагаю, я был недостаточно ясен. Где существует 'cos (double)'? Где сама функция? Кстати, я посетил эту ссылку) –
@MichaelSazonov В заголовках только вы узнаете, какие функции и данные доступны; сами определения содержатся в другом месте (стандартная библиотека C (msvcrt32.dll или что-то в этом роде)) – Dave