我是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”在做什么?
答案 0 :(得分:3)
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
请参阅此问题以获取解释What is __stdcall?
答案 1 :(得分:2)
TIDY_EXPORT和TIDY_CALL是宏。它们在platform.h中定义。
答案 2 :(得分:2)
在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
答案 3 :(得分:2)
C很简单......直到宏参与其中! ALL CAPS中的任何内容都可能是一个宏,这是一个在编译之前被其他文本替换的符号。该文本可以定义为任何内容,包括空字符串。幸运的是Doxygen已被使用,因此您可以查看文档http://tidy.sourceforge.net/docs/api/tidy_8h.html。
包含的文件:
#include "platform.h"
有关宏的所有荣耀的更多信息,read this。
答案 4 :(得分:1)
TIDY_EXPORT
#defined为__declspec(dllexport),以便在将Tidy编译为DLL时允许导出该函数。
TIDY_CALL
是一个扩展为特定于平台的calling convention的宏。
这两个功能都是C语言的非标准扩展(这就是为什么它们是在有条件编译的宏后面抽象出来的。)
答案 5 :(得分:0)
它们是您的库中的一些宏定义。在所有文件中进行文本搜索,您可能会找到他们确切定义的内容。通过使用一些超自然的诊断策略,我猜TIDY导出是从库中导出函数的一些装饰(即MS编译器中的declspec(dllexport),而TIDY_CALL指定调用约定(即stdcall,pascal等)
答案 6 :(得分:0)
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
答案 7 :(得分:0)
它们是宏,您可以在某处的源代码中找到它们。例如TIDY_CALL在platform.h中
#ifndef TIDY_CALL
#ifdef _WIN64
# define TIDY_CALL __fastcall
#else
# define TIDY_CALL __stdcall
#endif
#endif