C ++ - макрос определяет директиву - PullRequest
0 голосов
/ 22 января 2011

At: http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

В нем упоминается директива под названием " Macro определяет ".Что мы имеем в виду, когда говорим « Макро »?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 22 января 2011

Макрос - это директива препроцессора, определяющая имя, которое должно быть заменено (или удалено) препроцессором непосредственно перед компиляцией.

Пример:

#define MY_MACRO1 somevalue
#define MY_MACRO2
#define SUM(a, b) (a + b)

тогда, если где-либо вВ коде (кроме строковых литералов) есть упоминание MY_MACRO1 или MY_MACRO2, препроцессор заменяет его тем, что идет после имени в строке #define.

Также могут быть макросы спараметры (например, сумма).В этом случае препроцессор распознает аргументы, например:

int x = 1, y = 2;
int z = SUM(x, y);

препроцессор заменяет следующим образом:

int x = 1, y = 2;
int z = (x + y);

только после этой замены компилятор получает возможность скомпилировать полученный код.

2 голосов
/ 22 января 2011

Макрос - это фрагмент кода, который подставляется в вашу программу препроцессором (до начала самой компиляции).Это может быть функциональный блок или постоянное значение.

Предупреждение при использовании функционального макроса.Рассмотрим следующий код:

#define foo(x) x*x

Если вы позвоните foo(3), он станет (и будет скомпилирован как) 3*3 (= 9).Если вместо этого вы позвоните foo(2+3), он станет 2+3*2+3, (= 2 + 6 + 3 = 11), что не то, что вы хотите.Кроме того, поскольку код подставляется на место, foo(bar++) становится bar++ * bar++, увеличивая bar в два раза.

Макросы являются мощными инструментами, но при попытке сделать это можно легко выстрелить себе в ногучто-то необычное с ними.

1 голос
/ 22 января 2011

«Макрос определяет» просто указывает, как они указаны (с директивами #define), в то время как «Макрос» - это определенная функция или выражение.

Между семантикой, однако, между ними мало различий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...