Last Update 2021/03/06
-fdiagnostics-show-location=出力指定 オプション
エラーメッセージのソース内位置情報を出力指定により制御
効果は折り返しの発生する場合のみ
効果は折り返しの発生する場合のみ
テスト概要
-fdiagnostics-show-location=オプションを使用せずにコンパイル
once指定時と同様に、ソース内位置情報は、エラーメッセージに折り返えしが発生した場合も最初の行のみ出力(デフォルト)
ターミナル(OSX)への出力例及びファイル出力例(その1と同じため省略)
ターミナル(OSX)への出力例及びファイル出力例(その1と同じため省略)
-fdiagnostics-show-location=once としてコンパイル
オプション不使用の場合と同様に、ソース内位置情報は、エラーメッセージに折り返えしが発生した場合も最初の行のみ出力(デフォルト)
ターミナル(OSX)への出力例及びファイル出力例
ターミナル(OSX)への出力例及びファイル出力例
-fdiagnostics-show-location=every-line としてコンパイル
エラーメッセージに折り返しが発生した場合は、ソース内位置情報を全ての行頭にプレフィクスとして付加
ターミナル(OSX)への出力例及びファイル出力例
ターミナル(OSX)への出力例及びファイル出力例
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
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;
}
-fdiagnostics-show-location=オプションを使用せずにコンパイル
コンパイル実行
折り返しを有効にするため-fmessage-length=オプションを使用
折り返しを有効にするため-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;
~~~~~~
-fdiagnostics-show-location=once としてコンパイル
コンパイル実行
折り返しを有効にするため-fmessage-length=オプションを使用
折り返しを有効にするため-fmessage-length=オプションを使用
$ gcc -fmessage-length=50 -fdiagnostics-show-location=once main.c <--- 折り返し目安文字数を50文字に指定して実行
以下、「その1」と同じ出力
ファイル出力も同様
「once」の指定がデフォルト値
$
-fdiagnostics-show-location=every-line としてコンパイル
コンパイル実行
折り返しを有効にするため-fmessage-length=オプションを使用
折り返しを有効にするため-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;
~~~~~~