2017-02-18 11 views
0

Что такое синтаксис назначения переменных? Пожалуйста, объясните, почему этот код работает так, как он делает, и как? Кажется, что переменные назначаются без оператора =. Любые последующие тесты показывают, что pi_num возвращает 3.14. Зачем?Как эта форма переменной присваивания работает?

#define SPECIAL_NUMBER 3.14 
    cout << "Special number is " << SPECIAL_NUMBER << endl; 
    #define SPECIAL_VARIABLE pi_num 
    float SPECIAL_VARIABLE = SPECIAL_NUMBER; 
    cout << "Pi: " << pi_num << endl; 
+0

Это макросы. Посмотрите на предварительно обработанный код. –

+1

Интересно, что в этом фрагменте нет ни переменных, ни присваивания. –

+1

@ н.м. О, да, есть. 'float pi_num = 3.14;' –

ответ

1

Произошло то, что вы скрыли, что происходит, используя макросы.

Имейте в виду, что preprocessor выполняет замену текста и заменяет макросы своим расширением. В вашем коде каждое использование SPECIAL_NUMBER будет заменено на 3.14 и каждое использование SPECIAL_VARIABLEpi_num ПЕРЕД кодом.

Таким образом, компилятор видит свой код как

cout << "Special number is " << 3.14 << endl; 
float pi_num = 3.14; 
cout << "Pi: " << pi_num << endl; 

Я оставлю обсуждение в одиночку над float pi_num = 3.14, является ли присвоение или инициализация (OP вряд ли понимать различие).

Я предполагаю, что вы знаете, что математическая величина, известная как pi (греческая буква), приблизительно равна 3.14.

1

После предварительной обработки это будет выглядеть

cout << "Special number is " << 3.14 << endl; 
float pi_num = 3.14; 
cout << "Pi: " << pi_num << endl; 

Нет волшебства.