簡體   English   中英

C ++ #define預處理器

[英]C++ #define preprocessor

我需要知道C ++中的#define指令是否聲明了全局標簽? 全球我的意思是在每個文件中都可見?

我正在使用Visual Studio 2008,(猜測是否重要)

不,只在當前的翻譯單位。

即每一個具有文件#define ,或者包含具有下一個文件#define將看到的定義。

編輯,響應你的評論:在每個文件中獲取一個定義,或者將它放在一個包含在任何地方的標題中,或者使用一些編譯器選項來添加定義。

例如,對於gcc,人們會這樣做

gcc -Dthedefine=itsvalue

不確定如何在VC ++中指定這樣的包含,但我確信它可能以某種方式。

#define指令將token-string替換為源文件中所有后續出現的標識符。 只有在形成令牌時才會替換標識符。 (請參閱C ++語言參考中的C ++標記。)例如,如果標識符出現在注釋中,字符串內或作為較長標識符的一部分,則不會替換標識符。

它不是全局的,它只適用於當前的文件/源

在msdn中定義

由“#define”定義的符號從指令的位置到翻譯單元的末尾(或者對於該符號最近的“#undef”)是可見的。 例如,如果在“file.h”文件中定義某些內容,則此符號可在“file.h”和每個文件中看到,其中包括“file.h”,直接或間接...

#define僅在其定義的翻譯單元中起作用。在翻譯單元之間共享頭文件,可以是多個文件。

但是,要使其真正全局化,您需要一個Visual Studio擴展。 / D命令行選項允許您將等效的#define傳遞給預處理器,您可以將它們放在項目的屬性頁中。 這幾乎是“全球化的”; 對於多項目解決方案,您可以使用共享的繼承項目屬性表。

它只能在您定義的文件或包含該文件的文件中定義

無論您在一個文件中定義了什么宏,只有在其中包含宏的文件時才會在另一個文件中顯示,因此它不會自動為全局。 通常,出於這個原因,應在頭文件中定義宏,以便可以執行#include“headerFile.h”。

#define指令將從該時間點開始定義,直到編譯完成為止 - 請記住,每個.cpp都算作一個單獨的編譯單元。

要在源文件中定義某些內容,它需要位於所有源文件包含的頭文件中

您還可以設置Visual Studio屬性表,該表由.vsprops文件支持,並將其分配給解決方案中的相關項目。

這將允許您輕松維護多個項目中多種類型的常用設置,即使它們位於離散的解決方案文件中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM