При создании модуля для веб-сервера Apache я столкнулся с несколькими примерами, когда декларация структуры говорит, что она принимает только const char*
членов, как в объявлении apr_table_t
и apr_array_header_t
, но примеры, которые я нахожу в различных модулях, таких как mod_security, и даже новая функция ap_parse_form_data
указывает, что в эти структуры вставлен тип данных void *
.Я хотел бы понять, насколько возможно переопределение набора C struct?
Мои вопросы: как это возможно и почему мой компилятор Visual Studio жалуется, если я попытаюсь использовать тот же метод?
Хорошим примером этого является mod_security с функцией create_request, которая хранит void *
в примечании request_rec
.
Это мой компилятор тогда? Когда я пытался использовать один и тот же точный код для выяснения процесса, компилятор с горечью жаловался, что определение функции, которую я использовал, было принято только apr_table_t *, const char *, const char *. Я не пытался компилировать код в Windows, но делал это в Linux много раз. –
@AlexErwin: Можете ли вы опубликовать некоторый фактический код вместе с ошибкой, которую вы испытываете? –
Я не уверен, как это сделать здесь, потому что код изобилует. Однако фрагмент структуры apr_table_t 'struct apr_table_entry_t { char * key; char * val; apr_uint32_t key_checksum; }; 'Я не в состоянии продублировать ошибку прямо сейчас, но когда я выполняю эту функцию' APR_DECLARE (void) apr_table_set (apr_table_t * t, const char * key, const char * val); 'с переменная, напечатанная как void *, компилятор перестает говорить и говорит, что я не могу этого сделать. Может быть, это потому, что я использую компилятор C++? –