Loose-Info.com
Last Update 2021/03/06
TOP - 各種テスト - gcc - -fdiagnostics-show-location=出力指定

-fdiagnostics-show-location=出力指定 オプション
エラーメッセージのソース内位置情報を出力指定により制御
効果は折り返しの発生する場合のみ

テスト概要

その1
-fdiagnostics-show-location=オプションを使用せずにコンパイル
once指定時と同様に、ソース内位置情報は、エラーメッセージに折り返えしが発生した場合も最初の行のみ出力(デフォルト)
ターミナル(OSX)への出力例及びファイル出力例(その1と同じため省略)

その2
-fdiagnostics-show-location=once としてコンパイル
オプション不使用の場合と同様に、ソース内位置情報は、エラーメッセージに折り返えしが発生した場合も最初の行のみ出力(デフォルト)
ターミナル(OSX)への出力例及びファイル出力例

その3
-fdiagnostics-show-location=every-line としてコンパイル
エラーメッセージに折り返しが発生した場合は、ソース内位置情報を全ての行頭にプレフィクスとして付加
ターミナル(OSX)への出力例及びファイル出力例

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

使用ファイル

main.c
/* -fdiagnostics-show-location= オプション動作確認用ソースファイル */ #include <stdio.h> int main(void) { /* 下記コードでエラーメッセージ発生 */ printf(""i); prinnntf("Error!!!\n") return 0; }

その1

-fdiagnostics-show-location=オプションを使用せずにコンパイル

コンパイル実行
折り返しを有効にするため-fmessage-length=オプションを使用
$ gcc -fmessage-length=50 main.c <--- 折り返し目安文字数を50文字に指定して実行 main.c: In function ‘main’: main.c:8:11: error: expected <--- ソース内位置情報 ‘)’ before ‘i’ printf(""i); ^ ) main.c:9:5: warning: implicit <--- ソース内位置情報 declaration of function ‘prinnntf’; did you mean ‘printf’? [ -Wimplicit-function-declaration] prinnntf("Error!!!\n") ^~~~~~~~ printf main.c:9:27: error: expected <--- ソース内位置情報 ‘;’ before ‘return’ prinnntf("Error!!!\n") ^ ; return 0; ~~~~~~ $

ファイルへの出力
$ gcc -fmessage-length=50 main.c 2> sample1.txt $
sample1.txt
main.c: In function ‘main’: main.c:8:11: error: expected ‘)’ before <--- ソース内位置情報 ‘i’ printf(""i); ^ ) main.c:9:5: warning: implicit declaration of <--- ソース内位置情報 function ‘prinnntf’; did you mean ‘printf’? [-Wimplicit-function-declaration] prinnntf("Error!!!\n") ^~~~~~~~ printf main.c:9:27: error: expected ‘;’ before <--- ソース内位置情報 ‘return’ prinnntf("Error!!!\n") ^ ; return 0; ~~~~~~

その2

-fdiagnostics-show-location=once としてコンパイル

コンパイル実行
折り返しを有効にするため-fmessage-length=オプションを使用
$ gcc -fmessage-length=50 -fdiagnostics-show-location=once main.c <--- 折り返し目安文字数を50文字に指定して実行 以下、「その1」と同じ出力 ファイル出力も同様 「once」の指定がデフォルト値 $

その3

-fdiagnostics-show-location=every-line としてコンパイル

コンパイル実行
折り返しを有効にするため-fmessage-length=オプションを使用
$ gcc -fmessage-length=50 -fdiagnostics-show-location=every-line main.c main.c: In function ‘main’: main.c:8:11: error: expected ‘)’ <--- ソース内位置情報 main.c:8:11: error: before ‘i’ <--- printf(""i); ^ ) main.c:9:5: warning: implicit declaration of <--- ソース内位置情報 main.c:9:5: warning: function <--- main.c:9:5: warning: ‘prinnntf’; <--- main.c:9:5: warning: did you mean <--- main.c:9:5: warning: ‘printf’? [ <--- main.c:9:5: warning: <--- main.c:9:5: warning: -Wimplicit-function-declaration <--- main.c:9:5: warning: ] <--- prinnntf("Error!!!\n") ^~~~~~~~ printf main.c:9:27: error: expected ‘;’ <--- ソース内位置情報 main.c:9:27: error: before <--- main.c:9:27: error: ‘return’ <--- prinnntf("Error!!!\n") ^ ; return 0; ~~~~~~ $

ファイルへの出力
$ gcc -fmessage-length=50 -fdiagnostics-show-location=every-line main.c 2> sample3.txt $
sample3.txt
main.c: In function ‘main’: main.c:8:11: error: expected ‘)’ before ‘i’ <--- ソース内位置情報 printf(""i); ^ ) main.c:9:5: warning: implicit declaration of function ‘prinnntf’; did you <--- ソース内位置情報 main.c:9:5: warning: mean ‘printf’? [-Wimplicit-function-declaration] <--- prinnntf("Error!!!\n") ^~~~~~~~ printf main.c:9:27: error: expected ‘;’ before ‘return’ <--- ソース内位置情報 prinnntf("Error!!!\n") ^ ; return 0; ~~~~~~