1. 程式人生 > >C語言中的__FILE__、__LINE__和#line(用於列印當前函式及行數)

C語言中的__FILE__、__LINE__和#line(用於列印當前函式及行數)

C語言中的__FILE__用以指示本行語句所在原始檔的檔名,舉例如下(test.c):
  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("%s\n",__FILE__);
  5. }
在gcc編譯生成a.out,執行後輸出結果為:test.c在windows的vc6.0下編譯執行結果為:c:\documents and settings\administrator\桌面\test.c----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C語言中的__LINE__用以指示本行語句在原始檔中的位置資訊,舉例如下:
  1. #include <stdio.h>
  2. main()
  3. {
  4. printf("%d\n",__LINE__);
  5. printf("%d\n",__LINE__);
  6. printf("%d\n",__LINE__);
  7. };
該程式在linux用gcc編譯,在windows的vc6.0下編譯都可以通過,執行結果都為:789還可以通過語句#line來重新設定__LINE__的值,舉例如下:
  1. #include <stdio.h>
  2. #line 200  //指定下一行的__LINE__為200
  3. main()
  4. {
  5. printf("%d\n",__LINE__);
  6. printf("%d\n",__LINE__);
  7. printf("%d\n",__LINE__);
  8. };
編譯執行後輸出結果為:202203204-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------另外gcc還支援__func__,它指示所在的函式,但是這個關鍵字不被windows下的vc6.0支援,舉例如下:
  1. #include <stdio.h>
  2. void main()
  3. {
  4. printf("this is print by function %s\n",__func__);
  5. }
其編譯後輸出結果為this is print by function main

注意 “#line”、 “__LINE__”、 “__FILE__" 及 “__func__" 都是大小寫敏感的。

相關推薦

C語言__FILE____LINE__#line用於列印當前函式

C語言中的__FILE__用以指示本行語句所在原始檔的檔名,舉例如下(test.c):#include <stdio.h>int main(){printf("%s\n",__FILE__);}在gcc編譯生成a.out,執行後輸出結果為:test.

C語言__FILE____LINE__#line用法

C語言中的__FILE__用以指示本行語句所在原始檔的檔案。 例如: #include <stdio.h>int main(){printf("%s\n",__FILE__);} 在g

C語言宣告定義初始化的區別

函式和變數(全域性變數)都有宣告和定義, 對於函式而言: 同一檔案內,如果函式fun_1呼叫fun_2時,如果fun_2在fun_1之後定義,則需在fun_1之前對fun_2進行宣告,如下: void fun_2();// 宣告 void fun_1() { ... fu

智能合約語言 Solidity 教程系列8 - Solidity API特殊的變量

智能合約語言 以太坊 solidity Solidity API 主要表現為Solidity 內置的特殊的變量及函數,他們存在於全局命名空間裏,主要分為以下幾類:有關區塊和交易的屬性有關錯誤處理有關數學及加密功能地址相關合約相關下面詳細講解下區塊和交易的屬性(Block And Transacti

C語言__FILE____LINE____func__等預定義跟蹤除錯

標準C語言預處理要求定義某些物件巨集,每個預定義巨集的名稱一兩個下劃線字元開頭和結尾,這些預定義巨集不能被取消定義(#undef)或由程式設計人員重新定義。下面預定義巨集表,被我抄了下來。 __LIN

C語言__FILE__ __LINE__ 等巨集的含義

int main(int argc, char *argv[]) {   printf( "file=%s/nline=%s ",__FILE__,__LINE__);   return (0); }

C語言的淺拷貝深拷貝

淺拷貝 首先看下面這段程式碼: # include<assert.h> # include<string.h> #include <stdlib.h> typedef struct Node//定義了一個結構體 { int size; char *da

C語言的隨機數 srand ( ) rand ( )

在C語言中,生成一個隨機數,一般利用兩個函式,即void srand ( unsigned int seed ) 和 int rand ( void )。     srand() 函式用於生成一個隨機數種子,種子的值等於引數seed,這個引數由我們指定一個

C語言的單引號雙引號的區別

  首先肯定地說,二者是有區別的,不是說用誰都一樣。 1、實質區別,代表的含義不同 'A'代表的是一個整數,而且這個整數對應的是編譯器所採用的字符集中的字元序列對應的數值。所以'A'跟ASCII中的65意義是相同的。 1 # include <iostream>

c語言的註釋,multi-line comment

在C/C++語言中, 在對原始檔做預處理的時候,有兩條基本原則: 1、凡是以//開頭的為單行註釋 2、凡是以\結尾的代表此行尚未結束 於是前處理器在處理的時候會先按第二條規則,看每行的末尾的那個字元是不是”\”,是的 話,就下一行接到本行。 然後把所有以//開頭的註釋和/*

資料結構C語言 Part4 串陣列廣義表

首先,我們目前提到的(Part1-Part4)都是線性結構。 這一節,我們主要是要掌握: 1. 瞭解串的儲存方法,理解串的兩種模式匹配演算法,重點掌握BF演算法。 2. 明確陣列和廣義表這兩種資料結構的特點,掌握陣列地址計算方法,瞭解幾種特殊矩陣的壓縮儲存方法。 3.

資訊學奧賽系列課程:C++語言數量型別變數常量

C++語言基本資料型別:          在使用程式實現演算法的過程中,需要各種型別的資料,如:計算圓的半徑、周長、面積,描述 物體運動過程中的速度、時間、距離,購物時的數量、單價和總價等。      C++語言中,基本的資料型別有: 整型:int     包括正整數

C語言的指標陣列陣列指標

可以將 *string看成陣列 a[] 下的a,即指標是指向陣列的首地址的; 指標陣列是陣列元素為指標的陣列(例如 int *p[3],定義了p[0],p[1],p[2]三個指標),其本質為陣列。 指

C語言空格符空字元字元陣列結束符回車的區別

       空格符和空字元是不一樣的,在ASCII裡面,空格(space)符號的ASCII碼是32,而空字元是0, 2個是完全不一樣的2個字元         空字元 一般來描述一個字串的結尾,其實是控制符的一種,但不能理解為沒有字元,應該理解為代表什麼都沒有的字元.好比回車0x0A和換行0x0D雖然

C 語言的結構體共用體聯合體

本文主要總結了譚浩強主編的《C 程式設計》教材中結構體和共用體相關章節的內容。 在 C 語言中, 結構體(struct) 是一個或多個變數的集合,這些變數可能為不同的型別,為了處理的方便而將這些變數組織在一個名字之下。由於結構體將一組相關變數看作一個單元而不是各自獨立的實體,因此結構體有助於組織複雜的資料,

C語言變數的宣告定義

變數宣告和變數定義變數定義:用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有一個定義。變數宣告:用於向程式表明變數的型別和名字。定義也是宣告,extern宣告不是定義定義也是宣告:當定義變數時我們聲明瞭它的型別和名字。extern宣告不是定義:通過使用ext

C語言棧的建立應用

棧的特點為: 先進後出(first in last out)。 棧中有兩個指標,棧頂指標和棧尾指標。其中,棧尾指標是不動的。用棧頂指標等於棧尾指標來判定棧是否為空。壓棧時,將棧頂指標+1,然後將資料存

C語言的靜態變數普通變數的區別

下面用程式碼說明: 一個可執行程式包括BSS段、資料段、程式碼段(文字段)。 bss segment ,data segment ,code/text segment ①BSS(Block by Start Symbol) :通常指用來存放程式中未初化的全域性變數和靜態變數

關於C語言返回區域性變數區域性指標變數

char *test1(void) { char b[10] = "abcde"; return b; } char *test1_ver2(void) { static char b[10] = "abcde"; return b; } char *test2(voi

c語言資料型別運算子表示式

資料型別   1.基本資料型別: 基本資料型別最主要的特點是,其值不可以分解為其他型別。也就是說,基本資料型別是 自我說明的 2.構造資料型別: 構造資料型別是根據已定於的一個或多個數據型別用構造的方法來定義的。也就是說, 一個構造型別的值可以分解為若干個“成員”或“元素