1. 程式人生 > >C語言預定義巨集(__LINE__、__DATE__等)淺析

C語言預定義巨集(__LINE__、__DATE__等)淺析

ANSIC標準定義了以下5種可供C語言使用的預定義巨集: 
__LINE__ 在原始碼中插入當前原始碼行號 
__FILE__ 在原始碼中插入當前原始碼檔名 
__DATE__ 在原始碼中插入當前編譯日期〔注意和當前系統日期區別開來〕 
__TIME__ 在原始碼中插入當前編譯時間〔注意和當前系統時間區別開來〕 
__STDC__ 當要求程式嚴格遵循ANSIC標準時該識別符號被賦值為1。 

識別符號__LINE__和__FILE__通常用來除錯程式; 
識別符號__DATE__和__TIME__通常用來在編譯後的程式中加入一個時間標誌,以區分程式的不同版本; 

當編譯器嚴格遵循ANSIC標準時,識別符號__STDC__就會被賦值為1。

如果編譯器不遵循標準時,則可能僅支援以上巨集名中的幾個,或根本不支援;不同的編譯器可能會提供其他預定義的巨集名。

以下是在Linux C 中的程式碼及其在gcc編譯器中的執行效果:

原始碼檔名test.c

#include<stdio.h>

int main()
{
	printf("%d\n",__LINE__);//顯示所在行號
	printf("%s\n",__func__);//顯示所在函式
	printf("%s\n",__TIME__);//顯示當前時間
	printf("%s\n",__DATE__);//顯示當前日期
	printf("%s\n",__FILE__);//顯示所處檔名,在原始碼中插入當前原始碼檔名
	printf("%d\n",__STDC__);//編譯器遵循ANSI C標準時該標識被賦值為1;
	return 0;
}
編譯執行結果如下:
[[email protected] Test]# gcc test.c 
[[email protected] Test]# ./a.out
5
main
21:25:52
May 30 2016
test.c
1