gccとclangのエラーメッセージに関する所感
clangはgccよりエラーメッセージが良いという話を聞いたことがあったのですが、先日なるほどと思う出来事がありました。
エッセンスとしては以下のようなコードをコンパイルしたときのことです。
#include <iostream>
void foo(int i)
{
std::cout << "foo(int)" << std::endl;
}
class Foo
{
public:
void foo();
};
void Foo::foo()
{
std::cout << "Foo::foo()" << std::endl;
foo(0);
}
判るだろ?俺の意図を汲めよ!と思わないでもないですがエラーになります。
g++は
sample.cxx:17:7: error: no matching function for call to ‘Foo::foo(int)’
foo(0);
^
sample.cxx:14:6: note: candidate: void Foo::foo()
void Foo::foo()
^~~
sample.cxx:14:6: note: candidate expects 0 arguments, 1 provided
と言ってくるのですがclang++だと
sample.cxx:17:2: error: too many arguments to function call, expected 0, have 1; did you mean
'::foo'?
foo(0);
^~~
::foo
sample.cxx:3:6: note: '::foo' declared here
void foo(int i)
^
言語仕様上エラーにしなければならないのは同じですが「お前は ::foo と言いたいのか?」と察してくれます。
それにclangは関数呼び出しの始まり(関数名の1文字目)を発生場所として指しているのに対して、gccは終わり(閉じ括弧)を指しています。
バージョンはそれぞれg++ 7.5.0とclang 6.0.0です。
Author And Source
この問題について(gccとclangのエラーメッセージに関する所感), 我々は、より多くの情報をここで見つけました https://qiita.com/staatsschreiber/items/48359e47a365f99caa29著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .