ユーニックス総合研究所

  • home
  • archives
  • c-gengo-line-kansu

C言語のlineを関数で使う方法

  • 作成日: 2022-08-17
  • 更新日: 2023-12-25
  • カテゴリ: C言語

C言語における行番号のあつかい

C言語ではprintf()などで行番号を出力したい時にLINEマクロを使います。
このマクロを使うと現在のコード上の行番号を出力できます。

#include <stdio.h>  

int main(void) {  
    printf("%d\n", __LINE__);  // 4  
    return 0;  
}  

関連記事

自作関数read_fileでファイルを読み込み【ファイル入出力, コマンド】
目が覚めるC言語のdo-while文の使い方【ループ処理、初心者向け】
明快!C言語のcontinue文の使い方
君はまだC言語のdefineのすべてを知らない【マクロ、プリプロセス】
プログラミングの関数とは?わかりやすく解説します

関数の呼び出し時の行番号を出力する

このマクロを関数と一緒に使う方法。
つまり関数の呼び出し位置の行番号を出力する方法ですが、これはマクロ関数を使うのが一般的です。
実体の関数のラップとしてマクロ関数を1つ作っておいて、そのマクロ関数から実体の関数を呼び出します。

#include <stdio.h>  

void show(const char *text, long line) {  
    printf("%ld: %s\n", line, text);  
}  

#define SHOW(text) show(text, __LINE__)  

int main(void) {  
    SHOW("Hello");  // 10: Hello  
    return 0;  
}  

↑の場合、main関数内で呼び出しているのはSHOW()です。
そしてSHOW()マクロ関数は内部でshow()関数を呼び出しています。
この時にshow()関数の引数に__LINE__を渡します。
こうするとSHOW()の呼び出し位置の行番号がshow()関数に渡されます。

マクロ関数はただのコードの置き換えです。
そのためSHOW("Hello")の呼び出しは実際にはshow("Hello", __LINE__)に置き換わります。

行番号の変更

また行番号は#lineプリプロセッサ指令で変えることができます。

#include <stdio.h>  

int main(void) {  
    printf("%d\n", __LINE__);  // 4  
#line 100  
    printf("%d\n", __LINE__);  // 100  
#line 200  
    printf("%d\n", __LINE__);  // 200  
    return 0;  
}  

おわりに

今回はC言語のlineを関数で使う方法を解説しました。
__LINE__はデバッグなどで重宝します。

🦝 < 行番号を操ろう

🐭 < デバッグに使えるよ