在 MSVC 中处理 __attribute__
Dealing with __attribute__ in MSVC
我想知道在使用 MSVC 时处理包含 GCC __attribute__
扩展的代码的最佳方法是什么。以下是处理此问题的安全方法吗:
#define __attribute__(x) /* blank - should simply ignore thanks to C preprocessor */
谢谢!
查看 GCC Manual 并了解每个属性的作用。然后找出 MSVC 等价物是什么。有些可以安全地忽略,但有些你会想要替换。
如果您希望您的代码真正跨平台,请创建您自己的一组可以针对每个平台正确实施的宏。
__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
我想知道在使用 MSVC 时处理包含 GCC __attribute__
扩展的代码的最佳方法是什么。以下是处理此问题的安全方法吗:
#define __attribute__(x) /* blank - should simply ignore thanks to C preprocessor */
谢谢!
查看 GCC Manual 并了解每个属性的作用。然后找出 MSVC 等价物是什么。有些可以安全地忽略,但有些你会想要替换。
如果您希望您的代码真正跨平台,请创建您自己的一组可以针对每个平台正确实施的宏。
__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