【问题标题】:Dealing with __attribute__ in MSVC在 MSVC 中处理 __attribute__
【发布时间】:2015-02-09 13:50:36
【问题描述】:

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    __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? #define PV_API __attribute__((visibility ("default")))
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-12
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多