1樓:匿名使用者
這是編譯器內建巨集,這些巨集定義不僅可以幫助我們完成跨平臺的原始碼編寫,靈活使用也可以巧妙地幫我們輸出非常有用的除錯資訊。例如:
printf("file: %d, line: %d, %s/n", "__file__, __line__, "這裡寫上相關資訊");
ansi c標準中幾個標準預定義巨集:
__line__:在源**中插入當前源**行號;
__file__:在原始檔中插入當前原始檔名;
__date__:在原始檔中插入當前的編譯日期__time__:在原始檔中插入當前編譯時間;
__stdc__:當要求程式嚴格遵循ansi c標準時該標識被賦值為1;
__cplusplus:當編寫c++程式時該識別符號被定義。
2樓:匿名使用者
注意,是雙下劃線,而不是單下劃線
__file__ 包含當前程式檔名的字串__line__ 表示當前行號的整數
__date__ 包含當前日期的字串
__stdc__ 如果編譯器遵循ansi c標準,它就是個非零值__time__ 包含當前時間的字串
例如:輸出當前程式檔名的程式:
#include
int main(void)
3樓:匿名使用者
如果新增了這段斷言**,對於開發大型、複雜的系統,這條語句其實用處很大。每次程式執行錯誤之後,它會列印程式**指定的位置,方便我們在龐大的程式中很快找到錯誤的位置。
我們的系統會隨著時間的推移,不斷升級更新,也就是需要提交很多版本的可執行檔案(hex、bin等)。但是,產品後期使用中,我們對某些裝置進行了升級,可能忽略了一些裝置(忘記升級),如果出現故障,我們怎樣才能很快找到是哪一個版本的軟體出現故障呢?
我們的系統會隨著時間的推移,不斷升級更新,也就是需要提交很多版本的可執行檔案(hex、bin等)。但是,產品後期使用中,我們對某些裝置進行了升級,可能忽略了一些裝置(忘記升級),如果出現故障,我們怎樣才能很快找到是哪一個版本的軟體出現故障呢?
c幾種特殊標準定義
__file__ :正在編譯檔案的檔名
__line__ :正在編譯檔案的行號
__date__:編譯時刻的日期字串 如「sep 22 2020」
__time__:編譯時刻的時間字串 如」10:00:00「
__stdc__:判斷該檔案是不是標準c程式
1.__file__編譯檔名稱
file中文意思即檔案,這裡的意思主要是指:正在編譯檔案對應正在編譯檔案的路徑和檔案的名稱。
keil版本對應的路徑是相對於工程檔案而言的路徑,iar版本路徑是相對windows路徑。
源**:
char buildfile = __file__;
printf("編譯檔案路徑:%s\n", buildfile);
keil:
編譯檔案路
iar:
編譯檔案路徑
2.__line__編譯檔案行號
上面說的是編譯的檔名,是一個字串,而這裡說的是行號,是一個整型變數,這是這兩者的區別,
比如在工程中新增源**:
char buildline = __line__;
printf("編譯**所在行:%d\n", buildline);
可以看不是陣列的字串,列印資訊:
編譯**所在行:44
一般情況下,__file__是和__line__結合一起使用,用於列印我們**資訊,方便快速定位**位置。
3.__date__編譯日期
__date__日期,需要注意的是:這個日期是你在編譯時windows系統的日期,如果對應那部分**之前編譯好了,後面沒有編譯,這個日期還是之前的日期,而不是後面編譯的日期。因此,如果這裡用於定版本,就需要在定版本時對工程進行全部重新編譯,它才會更新至你最後編譯的日期
4樓:匿名使用者
printf("\n [%s]: %d ", __function__, __line__);
列印出 函式名稱 和 行號
很簡單 是c的巨集定義 不需要標頭檔案
goodluck
5樓:為你而駐
原始檔名用%d列印是不是有點問題呢?
stm32庫函式中,assert_param斷言時,__file和__line,是怎樣確定主調處
6樓:
斷言是個巨集,在stm32f10x_conf.h定義的。編譯的時候編譯器會把__file__替換成斷言所在的函式的檔名,把__line__替換成所在的行號,所以程式執行的時候脫離編譯器也可以顯示的
7樓:匿名使用者
那個定位是開發環境提供的功能吧
c語言中file定義的陣列有什麼用?怎麼用?
8樓:匿名使用者
用於即將開啟使用的5個檔案,比如:
f[0]=fopen("file0.txt",'r');
f[1]=fopen("file1.txt",'r');
f[2]=fopen("file2.txt",'r');
f[3]=fopen("file3.txt",'r');
f[4]=fopen("file4.txt",'r');
象上述開啟後你就可以分別讀取每個檔案中的內容了,如:
fgets(buffer,256,f[0]); //讀取f[0]對應的檔案中的一行
9樓:匿名使用者
f表示含有5個檔案指標的陣列
C 中pow函式,C 中pow(x,y)函式怎麼用?最好給舉個例子
2型別是整型,0.5屬於浮點數,而你的函式宣告裡面第一個引數是浮點數,第二個引數是整型的,int轉float double可以隱式轉換,編譯器允許這種轉換,但是float double不能隱式轉換成int,這樣可能會造成資料丟失,編譯器不允許,除非你強制轉換 在vc 6.0中原型為double po...
C中getline函式使用問題,C 怎麼用getline函式讀取檔案資料?
一般編寫習慣上,不會有順序的連續兩次輸入 若需要多次輸入,則都是用迴圈來代替的。應該是因為標準輸入每次回車都向程式輸入資料的原因。標準輸入是以回車為單位向程式輸入資料,也就是說當ni hao回車後,程式得到了如下輸入 ni hao n 這個串被第一個getline讀取後,因為正常讀到了分隔符,認為輸...
C 中while語句怎麼用,誰能講一下c 中while語句的用法?
如果括號裡是表示式,實際上就是true,可以在程式裡面用break 跳出迴圈 誰能講一下c 中while語句的用法?語法 while 條件 語句 while是計算機的一種基本迴圈模式。當滿足條件時進入迴圈,進入迴圈後,當條件不滿足時,執行完迴圈體內全部語句後再跳出 而不是立即跳出迴圈 while語句...