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 から、または DLL に (それぞれ) インポートおよびエクスポートするようにリンカーに指示します。これは Windows 固有です。

特定のケースでは、このマクロはおそらくmain()ライブラリの一部ではないため、おそらく削除できます。

于 2012-12-17T09:35:45.013 に答える
7

これはキーワードではなく、さまざまなコンパイラ固有のキーワードをカプセル化して、関数を として宣言するマクロexportedです。

「共有ライブラリQ_DECL_EXPORTの作成」も参照してください。

通常、他のライブラリまたは実行可能ファイルによってインポート (「使用」) されるために、ライブラリからエクスポートする必要がある関数を定義するためにライブラリで使用されます。

これまでのところ関数でこれを見たことはありませんmainが、それはブラックベリー固有のものである可能性があります。一方で、このチュートリアルも関数でマクロを使用していないため、main()おそらく削除できます。

于 2012-12-17T09:28:44.187 に答える