Как определить символ области файла в C ++ - PullRequest
1 голос
/ 11 июля 2011

В C # директива #define определяет символ, например, следующая строка определяет символ "DEBUG":

#define DEBUG

область действия этого символа - файл, в котором он определен.

В C ++ символ предварительной обработки (/ D «DEBUG») может быть определен для получения того же эффекта. Но / D - это параметр настройки всего проекта.

У меня вопрос, как определить локальный для файла символ в C ++?

Ответы [ 2 ]

7 голосов
/ 11 июля 2011

#define в C и C ++ доступен, но он не создает символ, он создает макрос препроцессора, который по сути является операцией замены текста, которая происходит до того, как компилятор даже увидит исходный файл.

Обычный способ создания локального символа в файле C ++ - это использование анонимного пространства имен, например,

namespace 
{
    const int SOME_LOCAL_INT = 3;
    const std::string SOME_LOCAL_STRING("Blah");
}

Использование анонимного пространства имен гарантирует, что символ не будет виден внемодуль компиляции, в котором он определен.Однако обратите внимание, что если вы определите анонимное пространство имен внутри файла заголовка, копия символов, содержащихся в нем, будет доступна во всех файлах C ++, которые включают этот заголовочный файл, поэтому лучше поместить анонимное пространство имен в файл .cpp, чтобычто они действительно местные.

2 голосов
/ 11 июля 2011

Если вы хотите обязательно , используйте #define в заголовке, чтобы символ был локальным в этом заголовке, а затем используйте как показано ниже:

//file.h
#define DEBUG
//... code
#undef DEBUG // clearing the symbol

#undef будет неопределеннымранее определенный DEBUG.Так что если вы #include этот file.h где-либо, это не будет иметь никакого эффекта DEBUG, поскольку это просто локально для file.h.

...