Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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