在MSVC中处理__attribute__

时间:2015-02-09 13:50:37

标签: c visual-c++ gcc attributes c99

我想知道在使用MSVC时处理包含GCC __attribute__扩展名的代码的最佳方法是什么。以下是处理此问题的安全方法:

#define __attribute__(x) /* blank - should simply ignore thanks to C preprocessor */

谢谢!

2 个答案:

答案 0 :(得分:2)

__attribute__不是宏,它是一个GCC特定的扩展,需要用适当的等效Visual C ++替换。它的等价通常是__declspec

http://msdn.microsoft.com/en-US/library/dabb5z75(v=vs.110).aspx

例如:

#if defined(_MSC_VER)
#define DLL_PUBLIC __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
#else
#if defined(__GNUC__)
#define DLL_PUBLIC __attribute__ ((dllexport))
#endif

答案 1 :(得分:1)

查看GCC Manual并找出每个属性的作用。然后找出MSVC的等价物。有些可以安全地被忽略,但有些你会想要替换。

如果您希望代码成为真正的跨平台,请创建一组可以为每个平台正确实现的宏。