C 除錯巨集 LINE FILE

2021-06-06 19:12:03 字數 1515 閱讀 6081

__date____file____line____funcdname__

__stdc____time____timestamp__

使用方法:printf("%s %d %s",__date__,__line__,__file__);

unicode 使用方法:

#include

#define widen2(x) l ## x

#define widen(x) widen2(x)

#define __wfile__ widen(__file__)

wchar_t *pwsz = __wfile__;

ansi標準說明了五個預定義的巨集名。它們是:

__line__

__file__

__date__

__time__

__stdc__

c++中還定義了 __cplusplus

如果編譯器不是標準的,則可能僅支援以上巨集名中的幾個,或根本不支援。記住編譯程式也許還提供其它預定義的巨集名。

__line__ 及 __file__ 巨集指示,#line指令可以改變它的值,簡單的講,編譯時,它們包含程式的當前行數和檔名。

__date__ 巨集指令含有形式為月/日/年的串,表示原始檔被翻譯到**時的日期。

__time__ 巨集指令包含程式編譯的時間。時間用字串表示,其形式為: 分:秒

__stdc__ 巨集指令的意義是編譯時定義的。一般來講,如果__stdc__已經定義,編譯器將僅接受不包含任何非標準擴充套件的標準c/c++**。如果實現是標準的,則巨集__stdc__含有十進位制常量1。如果它含有任何其它數,則實現是非標準的。

__cplusplus 與標準c++一致的編譯器把它定義為乙個包含至少6為的數值。與標準c++不一致的編譯器將使用具有5位或更少的數值。

可以定義巨集,例如:

當定義了_debug,輸出資料資訊和所在檔案所在行

#ifdef _debug

#define debugmsg(msg,date) printf(msg);printf(「%d%d%d」,date,_line_,_file_)

#else

#define debugmsg(msg,date)

#endif

命令#line改變_line_   與__file__的內容,它們是在編譯程式中預先定義的識別符號。  

命令的基本形式如下:  

#line   number["filename"]  

其中的數字為任何正整數,可選的檔名為任意有效檔案識別符號。

行號為源程式中當前行號,檔名為原始檔的名字。命令#line主要用於除錯及其它特殊應用。  

例如,下面說明行計數從100開始;printf(   )  

語句顯示數102,因為它是語句#line 100後的第3行。  

#line   100

*/#include  

#line   100  

int   main()  

C語言 設計printf除錯巨集

借除錯巨集的設計,梳理下c語言巨集的用法 嵌入式裝置基本會配置rs232串列埠作為除錯io介面,假設底層串列埠單位元組輸出函式為serial putchar 利用fputc 和fputs 重定向printf函式 void fputc int byte,file stream void fputs c...

c語言 除錯程式必備 c標準 巨集 除錯方法

c標準中指定了一些預定義的巨集,對於程式設計經常會用到。下面這個表中就是一些常常用到的預定義巨集。date 進行預處理的日期 mmm dd yyyy 形式的字串文字 file 代表當前源 檔名的字串文字 line 代表當前源 中的行號的整數常量 time 原始檔編譯時間,格式微 hh mm ss f...

用於除錯的巨集

在linux程式設計中,gdb是個不錯的除錯工具。但是當檔案數量上百,甚至上千之後,使用gdb除錯就是一場災難。因此在程式中加入合理的列印資訊,能更高效的定位到問題的所在。下面就是定義的巨集。分別是warning,info,error。利用了,file function line 變數。cpp vi...