Директива препроцессора «Использование» - PullRequest
0 голосов
/ 25 октября 2011

Из моих предыдущих знаний в области обучения C я знаю, что директива препроцессора, такая как #include, #define, не является утверждением, поэтому, как следует из названия, она обрабатывается до того, как программа скомпилировано, поэтому нам не нужно добавлять ; в конце.

В C ++ он вводит мне новую директиву, которая using, но почему эта директива добавляет точку с запятой? Я думал, что это похоже на предыдущую директиву, которую я узнаю, где это не утверждение?

Ответы [ 2 ]

5 голосов
/ 25 октября 2011

using не является директивой препроцессора. Это видно и анализируется самим компилятором.

Тот факт, что вы часто не ставите ; в конце #define макросов, объясняется тем, что они обрабатываются препроцессором как «простая» замена текста, например:

#define SOMETHING "abcd";

...
   if (strcmp(thing, SOMETHING) == 0) { ... }
...

будет ошибкой компилятора, так как компилятор увидит:

   if (strcmp(thing, "abcd";) == 0) { ... }
                       //  ^ invalid here
0 голосов
/ 25 октября 2011

using можно рассматривать как объявление, например, typedef is.

И вы можете попросить компилятор вывести результат предварительной обработки, например, с помощью g++ -C -E, но не существует простогоспособ попросить его вывести эффекты using

...