C言語のlineを関数で使う方法
538, 2022-08-18
目次
C言語における行番号のあつかい
C言語ではprintf()
などで行番号を出力したい時にLINEマクロを使います。
このマクロを使うと現在のコード上の行番号を出力できます。
#include <stdio.h> int main(void) { printf("%d\n", __LINE__); // 4 return 0; }
関連記事
C言語の関数の定義方法を解説します【function】
C言語で関数から複数の戻り値を返す【ポインタ、構造体】
C言語の関数ポインタをtypedefする方法【型定義】
C言語の関数のアドレスを参照する方法
C言語の関数呼び出し: 返り値ありなし、引数ありなしの場合
関数の呼び出し時の行番号を出力する
このマクロを関数と一緒に使う方法。
つまり関数の呼び出し位置の行番号を出力する方法ですが、これはマクロ関数を使うのが一般的です。
実体の関数のラップとしてマクロ関数を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__
はデバッグなどで重宝します。
(^ _ ^) | 行番号を操ろう |
(・ v ・) | デバッグに使えるよ |