Существует ли очевидный способ, чтобы препятствовать тому, чтобы windows.h создал близкий и далекий макрос?

unset - это функция, а не оператор. Используйте его, как unset($_SESSION['key']);, чтобы отключить этот ключ сеанса. Однако вы можете использовать session_destroy();. (Обязательно запустите сеанс с помощью session_start();)

11
задан Chilledrat 4 May 2012 в 20:19
поделиться

5 ответов

Можно безопасно не определить их вопреки требованиям от других. Причина состоит в том, что они - просто макросы. Они только влияют на препроцессор между своим определением и своим неопределением. В Вашем случае, который будет от рано в windows.h к последней строке windows.h. При необходимости в дополнительных заголовках окон Вы включали бы их после windows.h и перед #undef. В Вашем коде препроцессор просто оставит символы без изменений, как предназначено.

Комментарий о более старом коде не важен. Тот код будет в отдельной библиотеке, скомпилированной независимо. Только в ссылке время будет они быть соединенным, когда макросы будут давно в прошлом.

22
ответ дан 3 December 2019 в 02:31
поделиться

Не определите любые макросы, включая которые Вы не хотите после windows.h:

#include <windows.h>
#undef near
#undef far
8
ответ дан 3 December 2019 в 02:31
поделиться

Вы, вероятно, не хотите к неопределенному рядом и далеко везде. Но когда необходимо использовать имена переменной, можно использовать следующее, чтобы не определить макрос локально и добавить его назад, когда Вы сделаны.

#pragma push_macro("near")
#undef near
//your code here.
#pragma pop_macro ("near")
1
ответ дан 3 December 2019 в 02:31
поделиться

возможно:

#undef near
#undef far

могло быть опасным хотя...

3
ответ дан 3 December 2019 в 02:31
поделиться

Лучше всего не к. Они определяются для назад совместимости с более старым кодом - если бы Вы избавились от них так или иначе и затем позже должны были использовать часть того старого кода, то Вы были бы повреждены.

-2
ответ дан 3 December 2019 в 02:31
поделиться