Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Q_DECL_EXPORT keyword meaning

Tags:

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

What does this Q_DECL_EXPORT before int main(...) means?

like image 868
Tahlil Avatar asked Dec 17 '12 09:12

Tahlil


2 Answers

Excerpt from QT docs:

Depending on your target platform, Qt provides special macros that contain the necessary definitions:

  • Q_DECL_EXPORT must be added to the declarations of symbols used when compiling a shared library.
  • Q_DECL_IMPORT must be added to the declarations of symbols used when compiling a client that uses the shared library.

I haven't check the QT code, but most likely this macro will do following:

#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) and __declspec(dllexport) tells the linker to import and export (respectively) a symbol from or to a DLL. This is Windows specific.

In your particular case this macro probably could be removed, since main() most likely is not part of a library.

like image 107
Andrejs Cainikovs Avatar answered Oct 06 '22 10:10

Andrejs Cainikovs


Its not a keyword, its a macro to encapsulate the different compiler specific keywords to declare a function as being exported.

See also Q_DECL_EXPORT and Creating Shared Libraries.

It is usually used with libraries to define those functions which need to be exported from the library, in order to be imported ("used") by other libraries or by executables.

I have not seen this with a main function so far, but that could be a blackberry specific thing. On the other hand, this tutorial does not use the macro with the main() function either, so it can probably be removed.

like image 23
Andreas Fester Avatar answered Oct 06 '22 08:10

Andreas Fester