20

Q_DECL_EXPORT int main(int argc, char **argv)

Q_DECL_EXPORT之前是什么int main(...)意思?

4

2 回答 2

22

摘自QT 文档

根据您的目标平台,Qt 提供包含必要定义的特殊宏:

  • Q_DECL_EXPORT 必须添加到编译共享库时使用的符号声明中。
  • Q_DECL_IMPORT 必须添加到编译使用共享库的客户端时使用的符号声明。

我没有检查 QT 代码,但这个宏很可能会执行以下操作:

#ifdef _WIN32 || _WIN64
    #define Q_DECL_EXPORT __declspec(dllexport)
    #define Q_DECL_IMPORT __declspec(dllimport)
#else
    #define Q_DECL_EXPORT
    #define Q_DECL_IMPORT
#endif

__declspec(dllimport)__declspec(dllexport)告诉链接器从 DLL 中导入和导出(分别)符号。这是特定于 Windows 的。

在您的特定情况下,这个宏可能会被删除,因为main()很可能不是库的一部分。

于 2012-12-17T09:35:45.013 回答
7

它不是关键字,它是一个宏,用于封装不同的编译器特定关键字以将函数声明为exported.

另请参阅Q_DECL_EXPORT创建共享库

它通常与库一起使用来定义那些需要从库中导出的函数,以便被其他库或可执行文件导入(“使用”)。

到目前为止,我还没有看到这个main功能,但这可能是黑莓特有的东西。另一方面,本教程也没有将宏与main()函数一起使用,因此可能可以将其删除。

于 2012-12-17T09:28:44.187 回答