Q_DECL_EXPORT int main(int argc, char **argv)
Что означает это Q_DECL_EXPORT
перед int main(...)
?
Q_DECL_EXPORT int main(int argc, char **argv)
Что означает это Q_DECL_EXPORT
перед int main(...)
?
Выдержка из документов 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()
скорее всего не является частью библиотеки.
Q_DECL_EXPORT main()
необходим при создании приложений Qt для Android, так как собственные приложения Android загружаются в виде библиотеки из исходного кода Java. Возможно, это было похоже на Blackberry, я не знаю.
- person tanius; 07.06.2020
Это не ключевое слово, это макрос для инкапсуляции различных ключевых слов, специфичных для компилятора, для объявления функции как exported
.
См. также Q_DECL_EXPORT
и Создание общих библиотек.
Обычно он используется с библиотеками для определения тех функций, которые необходимо экспортировать из библиотеки, чтобы их можно было импортировать («использовать») другими библиотеками или исполняемыми файлами.
До сих пор я не видел такого с функцией main
, но это может быть особенностью Blackberry. С другой стороны, это руководство не используйте макрос с функцией main()
, поэтому его, вероятно, можно удалить.