• Можно импортировать все пространство имен с помощью одной директивы:
int main()
{
using namespace ElPuebloDeLaReinaDeLosAngeles;
santaMonica();
malibu();
}
При таком подходе конфликты имен становятся более вероятными. Если компилятор «жалуется» на двусмысленное имя (например, когда два класса имеют одинаковое имя, определенное в различных пространствах имен), всегда при ссылке на идентификатор его можно уточнить именем пространства имен.
Препроцессор
Препроцессор С++ — это программа, которая обрабатывает исходный файл
• Директива
#include "../shared/globaldefs.h"
• С помощью директивы
#define PI 3.14159265359
указывает препроцессору на необходимость замены каждого появления в текущей единице компиляции лексемы
#define SQUARE(x) ((x) * (x))
Считается хорошим стилем окружение в теле макроса скобками любых параметров, а также всего тела макроса, что позволяет избегать проблем, связанных с приоритетностью операторов. В конце концов нам нужно, чтобы запись
Компиляторы С++ обычно позволяют определять макросы в командной строке, используя опцию
CC -DPI=3.14159265359 -с main.cpp
Макросы были очень популярны в прежние дни, когда еще не были введены
• Макрос можно отменить в любом месте с помощью директивы
#undef PI
Эту возможность необходимо использовать, если требуется переопределить макрос, поскольку препроцессор не позволяет определять один и тот же макрос дважды. Эту директиву полезно также применять для управления условной компиляцией.
• Отдельные фрагменты программного кода можно обрабатывать или пропускать при помощи директив
#define NO_OPTIM 0
#define OPTIM_FOR_SPEED 1
#define OPTIM_FOR_MEMORY 2
#define OPTIMIZATION OPTIM_FOR_MEMORY
…
#if OPTIMIZATION == OPTIM_FOR_SPEED
typedef int MyInt;
#elif OPTIMIZATION == OPTIM_FOR_MEMORY
typedef short MyInt;
#else
typedef long long MyInt;
#endif
В приведенном выше примере компилятором будет обрабатываться только второе объявление, которое вводит синоним для
Другим оператором условной компиляции является проверка макроса на предмет его определения. Это можно сделать следующим образом, используя оператор
#define OPTIM_FOR_MEMORY
…
#if defined(OPTIM_FOR_SPEED)
typedef int MyInt;
#elif defined(OPTIM_FOR_MEMORY)
typedef short MyInt;
#else
typedef long long MyInt;
#endif