Я видел случаи, когда подобный код переносил значение из пространства имен компилятора ("пространство имен" в целом, а не C ++ namespace
) в пространство имен препроцессора, например, :
// In the compiler namespace, not in the preprocessor namespace
static int const FOO = 1234;
// Bring the constant into the preprocessor namespace as well
#ifndef FOO // <---- FOO really is undefined here.
#define FOO FOO
#endif
Действительно ужасные вещи.
Лично я не нашел применения для такого рода вещей, но тем не менее существует.
РЕДАКТИРОВАТЬ : Хотя я видел это, я не знаю, почему это было бы полезно, кроме проверки, определен ли "FOO
" как символ препроцессора где-то еще в коде; возможно, имея дело с каким-то устаревшим кодом. Кто-нибудь?