visual c 中預定義的巨集

2022-05-28 02:09:10 字數 1211 閱讀 2183

(由於visual studio通常包含很多開發環境,通常將其中c/c++的ide稱為visual c++ 20xx)

整理下visual c++ 2010下預定義的巨集。做一下備忘和了解,在實際編碼中可以考慮使用部分巨集作為判斷標準。

注意本文中提及的所有預定義巨集都是無引數的,並且不能重定義。

1. __file__、__line__

這兩個預定義巨集是c語言中定義的,主要用於標識**段所在的原始檔名稱(全路徑或者檔名)以及當前位置在原始檔中的行數。多用於錯誤跟蹤、預編譯報錯、程式異常跟蹤等,比如trace、assert失敗的提示資訊。

2. _char_unsigned

vc中附加定義的巨集。主要用於說明char型別的資料,是有符號的還是無符號的。預設情況下char是無符號的。

在很多開源專案裡面,使用cl或gcc編譯原始碼時可能需要關注下char的正負:因為有符號的char在做數值執行遇到型別提公升的情況可能會存在不確定性的行為(跟編譯器的實現有關)。

3. __funcdname__、__funcsig__、__function__ 

vc中定義的巨集。僅在函式實現中使用有效。三個巨集分別表示:編譯器修飾後的函式名稱、函式簽名、**中的函式名稱。

void

examplefunction()

view code

4. _win32、_win64

vc中定義的巨集。用於說明應用程式是基於win32或是win64平台的。

5. _debug

vc中定義的巨集。含義很明顯,用於標識當前程式是除錯版本。

之所以單獨拿出來是因為 _debug和debug兩個巨集經常混在一起,很容易讓人誤解到底該使用哪乙個。

按照msdn上介紹和說明,幾乎多數資料都只有_debug巨集,這也是assert、trace等生效必須定義的巨集。

那麼debug這個巨集是從**來的呢?  mfc程式裡面通常會用debug巨集定義。你可以隨便找個mfc專案中的源**檔案,輸入#ifdef debug,然後轉到定義看看其實現。在atldef.h中,會看到如下定義:

#ifdef _debug

#ifndef debug

#define debug

#endif

#endif

這樣就是比較顯然了。是mfc中預定義的巨集,個人感覺像是防止使用者誤使用。

因此,在實際編碼中應該使用_debug巨集,不要使用debug(即使已經定義了)。

visual c 中預定義的巨集

由於visual studio通常包含很多開發環境,通常將其中c c 的ide稱為visual c 20xx 整理下visual c 2010下預定義的巨集。做一下備忘和了解,在實際編碼中可以考慮使用部分巨集作為判斷標準。注意本文中提及的所有預定義巨集都是無引數的,並且不能重定義。1.file li...

預定義,巨集定義

巨集定義 其作用就是 換其名曰 給程式中的一段特殊的 函式,資料取了個簡單明瞭的名字。不過有一點這傢伙的作用範圍是全域性的。即使它是在某乙個函式塊中定義的。這個其實也容易理解。因為巨集定義是預定義的一種,在我們的程式之前,由預編譯器 cpp 提前編譯出來了,那個時候程式裡的結構是個啥樣子編譯器壓根就...

C C 中的預定義巨集

標準預定義巨集 內容 file 代表當前源 檔名的字串文字 包含了詳細路徑,如 g program study c main.cpp line 代表當前源 中的行號的整數常量 date 進行預處理的日期 mmm dd yyyy 形式的字串文字,如 aug 27 2017 time 原始檔編譯時間 格...