了解函数的返回类型

时间:2016-08-31 14:54:31

标签: c return-type

我正在查看传递给我的代码以解决问题,但我无法理解函数的定义之一。

void DESC_API ApplDesc(DescMsg* pMsg)

我可以看到函数没有返回任何内容,因此void保持良好状态。但DESC_API在这做什么呢?这是在头文件

中定义的方式
#if defined(DESC_API)
#else
 /* No paging used. */
#define DESC_API
#endif

4 个答案:

答案 0 :(得分:3)

看起来DESC_API a是可见性宏。对于MSVC,可能会定义为__declspec(dllexport)__declspec(dllimport),对于gcc或clang,可能定义为__attribute__ ((visibility ("default")))

当然,它可能被定义为其他东西(如下所述),但最流行的用例只是符号可见性属性。

由于gcc和clang默认导出所有符号,因此不需要任何属性,DESC_API为空。至于MSVC,您的构建系统可能会通过外部/DDESC_API=__declspec(dllimport)设置它。

答案 1 :(得分:1)

看起来DESC_API可用于在返回任何内容的函数和返回void*的函数之间切换。

如果你定义

#define DESC_API *

该函数将返回一个void指针;否则,该函数将不返回任何内容。

当然,函数的其余部分必须根据DESC_API的值进行条件返回。

答案 2 :(得分:1)

宏似乎是一个钩子,通过该钩子可以将额外的限定符注入到函数签名中。我倾向于认为它的用途是在某些情况下利用特定于编译器的扩展,例如将函数标记为使用某些特定的调用约定。

请注意,您提供的宏定义是有条件的。它提供了在未定义宏的情况下定义宏(带有空替换文本),其中先前的定义可能来自另一个头或命令行选项。

答案 3 :(得分:0)

好吧,可能什么也没做,因为你可以通过宏看到DESC_API被空格替换,因此这可能是一个用于方便阅读的宏,但它是