Значение ключевого слова Q_DECL_EXPORT

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

Что означает этот Q_DECL_EXPORT перед int main(...) ?

    Выдержка из документов QT :

    В зависимости от вашей целевой платформы Qt предоставляет специальные macros, которые содержат необходимые определения:

    • 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() скорее всего не является частью библиотеки.

    Это не ключевое слово, а его макрос, чтобы инкапсулировать различные ключевые слова для компилятора, чтобы объявить функцию как exported .

    См. Также Q_DECL_EXPORT и Создание общих библиотек .

    Обычно он используется с библиотеками для определения тех функций, которые необходимо экспортировать из библиотеки, чтобы их импортировать («использовать») другими библиотеками или исполняемыми файлами.

    Я до сих пор не видел этого с main функцией, но это может быть черная вещь. С другой стороны, в этом руководстве не используется макрос с функцией main() , поэтому его можно, вероятно, удалить.