#define
само по себе заменит символ ничем .
С другой стороны, #define 1
, как вы его называете, заменит символ везде 1
везде это найдено в файле. Так, например, следующий код:
#include <iostream>
#define EXAMPLE "hello"
int main()
{
std::cout << EXAMPLE;
return 0;
}
print
hello
Это потому, что здесь EXAMPLE
заменен на "hello"
, что делает оператор print эквивалентным:
std::cout << "hello";
Если вместо этого вместо #define
изменить выражение:
#define EXAMPLE
Это даст ошибку компиляции :
main.cpp: In function ‘int main()’:
main.cpp:15:25: error: expected primary-expression before ‘;’ token
std::cout << EXAMPLE;
Что касается того, почему вы когда-либо используете эту вторую форму #define
, это потому, что есть другая директива процессора, которую вы можете использовать, которая называется #ifdef
:
#include <iostream>
#define EXAMPLE
int main()
{
#ifdef EXAMPLE
std::cout << "EXAMPLE defined.";
#endif
return 0;
}
Это напечатает :
EXAMPLE defined.
Поскольку #ifdef
(и его относительный #ifndef
) требуют только определения символа, нам не нужно давать ему значение. Просто нужно быть там, чтобы работать.
Обычное место, где вы видите подобные вещи, это охрана заголовков (что, вероятно, то, что вы видите). Вы также можете увидеть это с идентификацией платформы или даже , чтобы определить, использует ли компилятор C ++ или нет .