2015-03-17 4 views
1

Почему источник апаш есть:'#define AP_MODULE_DECLARE (типа) типа' в C/C++

#define AP_MODULE_DECLARE(type) type 

Что такое преимущество, используя, например, эту форму:

AP_CORE_DECLARE(void) ap_add_per_dir_conf(server_rec *s, void *dir_config);` 

vs

void ap_add_per_dir_conf(server_rec *s, void *dir_config); 

спасибо.

ответ

2

Обратите внимание, что для этих макросов возможны другие определения. включают/ap_config.h имеет следующие (с некоторым отступом добавленным мной):

#if !defined(WIN32) || defined(AP_MODULE_DECLARE_STATIC) 
... 
# if defined(WIN32) 
# define AP_MODULE_DECLARE(type)   type __stdcall 
# else 
# define AP_MODULE_DECLARE(type)   type 
# endif 
... 
#else 
... 
# define AP_MODULE_DECLARE(type)   __declspec(dllexport) type __stdcall 
... 
#endif 

Здесь AP_MODULE_DECLARE используется для добавления __stdcall (который определяет конкретное соглашение о вызове) и/или __declspec(dllexport) (что связано для экспорта функции как части интерфейса общей библиотеки).

Обратите внимание, что, например, __declspec(dllexport) не будет добавлен, если определено значение AP_MODULE_DECLARE_STATIC. Моя догадка (которая может быть не совсем точной, поскольку я не знаком с этим кодом) заключается в том, что она связана с привязкой модуля как к статической библиотеке, и в этом случае __declspec(dllexport) не имеет смысла.

Если вам интересно, что означает «dso» в комментариях к этому файлу, то для динамический общий объект. Это, в основном, общая библиотека, хотя Apache, похоже, резервирует термин разделяемая библиотека для вещей, которые не загружаются во время выполнения с использованием dlopen(3).

+0

спасибо! Я пытаюсь выучить C++, среди прочего, читать открытый исходный код. У вас есть какие-либо советы по этому поводу? – slombo

+0

@ user1092646: Ищите какой-то проект, который кажется интересным, и посмотрите, есть ли какая-нибудь работа. Например, вы можете проверить отслеживание ошибок или IRC. Еще одна вещь, которую я иногда делаю, - это выбрать небольшую ошибку в некоторых приложениях, которую я обычно просто отмахиваюсь и пытаюсь понять, что ее вызывает (и либо исправить, либо сообщить о моих выводах). Это может вас многому научить. – Ulfalizer

Смежные вопросы