c中 file 和 line 怎麼用

2022-02-26 14:42:50 字數 2798 閱讀 2837

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語句...