(由於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中定義的巨集。僅在函式實現中使用有效。三個巨集分別表示:編譯器修飾後的函式名稱、函式簽名、**中的函式名稱。
voidview codeexamplefunction()
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這樣就是比較顯然了。是mfc中預定義的巨集,個人感覺像是防止使用者誤使用。#ifndef debug
#define debug
#endif
#endif
因此,在實際編碼中應該使用_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 原始檔編譯時間 格...