Определение функции в C - PullRequest
       3

Определение функции в C

0 голосов
/ 27 февраля 2011

Я новичок в C и, возможно, у меня вопрос n00b ...

До сих пор я думал, что функция всегда определяется как:

return_type function_name(function_arg_1 type, function_arg_1_name, ...)

Но теперь я нашел заголовочный файл C, где функция выглядит следующим образом:

TIDY_EXPORT int TIDY_CALL         tidyDetectedHtmlVersion( TidyDoc tdoc );

Что больше:

i_do_not_know return_type i_do_not_know function_name(function_arg_1 type, function_arg_1_name)

Весь источник можно увидеть на http://tidy.sourceforge.net/docs/api/tidy_8h-source.html

Так что же делают "TIDY_EXPORT" и "TIDY_CALL"?

Ответы [ 8 ]

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

TIDY_EXPORT int TIDY_CALL - это просто модификаторы вашей функции.

Имя функции tidyDetectedHtmlVersion, оно принимает один параметр (tdoc) типа TidyDoc и возвращает int.

TIDY_EXPORT - это макрос, определенный в файле platform.h, который определен как

00492 #if defined(_WIN32)
00493 
00494 #if (defined(_USRDLL) || defined(_WINDLL)) && !defined(TIDY_EXPORT)
00495 #define TIDY_EXPORT __declspec( dllexport ) 
00496 #endif

, которая позволяет экспортировать функцию при компиляции файла в виде библиотеки (например, dll)

Что касается TIDY_CALL, он определен в том же файле, что и:

00498 #ifndef TIDY_CALL
00499 #ifdef _WIN64
00500 #  define TIDY_CALL __fastcall
00501 #else
00502 #  define TIDY_CALL __stdcall
00503 #endif
00504 #endif

См. Этот вопрос для объяснения Что такое __stdcall?

2 голосов
/ 27 февраля 2011

C - это просто ... пока не включатся макросы!Все в ALL CAPS, вероятно, является макросом, который заменяется другим текстом перед компиляцией.Этот текст может быть определен как что угодно, включая пустую строку.К счастью, был использован Doxygen, поэтому вы можете просмотреть документацию http://tidy.sourceforge.net/docs/api/tidy_8h.html.

Включенный файл:

#include "platform.h"

, который вы можете прочитать здесь , определяетмакро.

Для получения дополнительной информации о макросах во всей их красе, прочитайте это .

2 голосов
/ 27 февраля 2011

В platform.h у вас есть

#if (defined(_USRDLL) || defined(_WINDLL)) && !defined(TIDY_EXPORT)
#define TIDY_EXPORT __declspec( dllexport )
#endif

#ifndef TIDY_CALL
#ifdef _WIN64
#define TIDY_CALL __fastcall
#else
# define TIDY_CALL __stdcall
#endif
#endif 
2 голосов
/ 27 февраля 2011

TIDY_EXPORT и TIDY_CALL являются макросами. Они определены в platform.h .

1 голос
/ 27 февраля 2011

TIDY_EXPORT определяется как __ declspec (dllexport) в Windows, чтобы разрешить экспорт функции при компиляции Tidy в виде DLL.

TIDY_CALL - это макрос, который расширяется до соглашения о вызовах для конкретной платформы .

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

0 голосов
/ 27 февраля 2011

Это макросы, вы можете найти их где-нибудь в исходном коде.Например, TIDY_CALL находится в platform.h

 #ifndef TIDY_CALL
 #ifdef _WIN64
 #  define TIDY_CALL __fastcall
 #else
 #  define TIDY_CALL __stdcall
 #endif
 #endif
0 голосов
/ 27 февраля 2011

TIDY_CALL и т. Д. Являются (это мое предположение, но очень вероятно) макросами.http://www.google.pl/search?sourceid=chrome&ie=UTF-8&q=macros+C%2B%2B#sclient=psy&hl=pl&source=hp&q=macros+C&aq=f&aqi=&aql=&oq=&pbx=1&fp=58c095358c87453c

0 голосов
/ 27 февраля 2011

Это некоторые макросы, определенные где-то в вашей библиотеке. Выполните текстовый поиск по всем файлам, и вы, вероятно, найдете то, что они точно определяют. Используя некоторую стратегию паранормального диагностирования, я предполагаю, что экспорт TIDY является некоторой декорацией для экспорта функции из библиотеки (например, declspec (dllexport) в компиляторах MS, а TIDY_CALL определяет соглашение о вызовах (то есть stdcall, pascal и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...