C++ #define препроцессор

Я использовал эту строку для запуска браузера по умолчанию:

System.Diagnostics.Process.Start("http://www.google.com"); 
5
задан Brian Tompsett - 汤莱恩 27 November 2015 в 11:43
поделиться

8 ответов

Нет, только в текущей единице перевода.

То есть каждый файл, имеющий #define или включающий файл с #define , увидит определение.

Edit, чтобы ответить на ваш комментарий: чтобы получить определение в каждом файле, либо поместите его в заголовок, который включается повсюду, либо используйте какую-либо опцию компилятора для добавления определений.

например, для gcc можно было бы сделать

gcc -Dthedefine=itsvalue

Не уверен, как указать такие включения в VC ++, но Я уверен, что это возможно.

9
ответ дан 18 December 2019 в 07:55
поделиться

Символ, определяемый "#define", виден от места директивы до конца единицы перевода (или до ближайшего "#undef" для этого символа). Например, если вы определяете что-то в файле «file.h», этот символ будет отображаться в «file.h» и в каждом файле, который включает «file.h», прямо или косвенно ...

2
ответ дан 18 December 2019 в 07:55
поделиться

Директива #define заменяет токен-строка для всех последующих появления идентификатора в исходный файл. Идентификатор заменяется только тогда, когда он формирует токен. (См. Токены C ++ на языке C ++. Ссылка.) Например, идентификатор не заменяется, если он появляется в комментарий, внутри строки или как часть более длинного идентификатора.

Это не глобально, это просто для текущего файла / источника

, определенного в msdn

3
ответ дан 18 December 2019 в 07:55
поделиться

Он будет определен только в определенном вами файле или в файлах, которые включают этот файл

1
ответ дан 18 December 2019 в 07:55
поделиться

Какой бы макрос вы ни определили в одном файле, он будет виден в другом файле только в том случае, если вы включили в него файл с макросом, поэтому он не будет автоматически глобальным. Обычно по этой причине макросы должны быть определены в ваших файлах заголовков, чтобы вы могли сделать #include «headerFile.h».

1
ответ дан 18 December 2019 в 07:55
поделиться

Директива #define будет определять с этого момента времени до завершения компиляции - имейте в виду, что каждый .cpp считается как это отдельная единица компиляции.

Чтобы определить что-то в исходных файлах, это должно быть в файле заголовка, который включает все исходные файлы

1
ответ дан 18 December 2019 в 07:55
поделиться

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

Однако, чтобы сделать его действительно глобальным, вам понадобится расширение Visual Studio. Параметр командной строки / D позволяет передать в препроцессор эквивалент #define , и вы можете поместить его на страницу свойств вашего проекта. Это почти «настолько глобально, насколько это возможно»; для многопроектных решений можно использовать совместно унаследованные листы свойств проекта.

2
ответ дан 18 December 2019 в 07:55
поделиться

Вы также можете настроить лист свойств Visual Studio, который поддерживается файлом .vsprops, и назначить его соответствующим проектам в вашем решении. .

Это позволит вам легко поддерживать общие настройки многих типов в нескольких проектах, даже если они находятся в отдельных файлах решения.

http://msdn.microsoft.com/en-us/library/a4xbdz1e % 28VS.80% 29.aspx

1
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: