2016-10-27 4 views
1

CプロジェクトでEclipse CDTを使用しています。ビルド環境はEclipseの外にあるので、私はエディタを使用します。いくつかの例外を除いて期待通りのコードでEclipseエディタで関数とenum値にエラーが表示されない

エラーマーカーがshwonされています

  1. 私は関数が存在するかどうかは関係ない関数呼び出しを行うと。エディタは関数呼び出しにエラーマーカーを表示しません。私は、 "Unresolved symbol"エラー、または同様のものが予想されます。 スペルミスのある関数名がエラーとして表示されることが予想され、ヘッダファイルに宣言されている既存の関数がインクルードしてエラーとして表示されることが予想されます。しかし、そうではありません。

  2. プロジェクトの他の場所(ヘッダーファイル内)に存在する列挙型メンバーの名前を入力すると、ヘッダーファイルが含まれていなくてもエディターがそれを認識します。これはもちろん、コンパイラのエラーにつながりますが、私はエディタにエラーマーカーがあると思います。

いくつか設定がありますか?それとも、Eclipseエディタの仕組みですか?

は、私は長い時間前に、これらのエラーマーカーを見てのかすかな記憶を持っていますが、メモリは

答えて

0

は、その定義が含まれて到達できないプロジェクトであるが、名前の解決...私にトリックを果たしている可能性がある、既知の問題です。それはbug 297690によって追跡され、固定されています(多くの困難な作業はbug 402498で行われています)。

プロジェクトにまったくない関数の名前を解決することは、2つの状況で起こる可能性があります。

Cコードで

C言語では、関数は使用前に宣言する必要はありません。先行宣言なしの使用は、暗黙宣言として扱われます。 、以下のCファイルである

は有効なコードです:

void func() { 
    another_func(); // another_func is implicitly declared here 
} 

リンカはリンク時にマッチング機能の定義を見つけようと、それができない場合はエラーが発生します。

したがって、another_funcのスペルを間違えた場合、コンパイル時(リンク時のみ)にエラーが検出されず、同様にCDTが診断できなくなります。 Cとは異なり

C++テンプレートコードで

、C++ は、機能は使用前に宣言すること必要がありません。しかし、テンプレートを含む1つの微妙なことがあります。

関数呼び出しは、テンプレート内で発生し、引数の一部が依存している場合:

template <typename T> 
void foo(T t) { 
    misspelt_function(t); 
} 

CDTがs、二「なぜならC++道のsの定義」fooの時点でスペルミス機能を診断することはできませんフェーズ名ルックアップ規則が働く:の後に、misspelt_functionの定義を与えることは、引数依存のルックアップによって見つけられるfooの定義のポイント(インスタンス化のポイントの前)を有効にします。この特定のインスタンス化についてはtのタイプ)。

(CDT は、理論的には特定のインスタンスfoo、コンパイラが行う方法についてはスペルミスの機能を診断することができ、それが現在ではすべてのインスタンスの遺体を入力し、確認されません。)

+0

' int dummyfunc(void) { return 55; (空) 私はこのコンテンツとCファイルがある場合// dummy_funcは間違っているが、エラー・マーカーは } ' – Habba

+0

を示していない。 ' int型dummyfunc(ボイド) {リターン55。 (空) } ' それから間違っているので、dummy_funcの呼び出しでエラーマーカーが予想されます。しかし、私はエラーマーカーを取得しません。 – Habba

+0

@ハバ:ああ、OK。私は何が起こっているのを見る。私の編集された答えを見てください。 – HighCommander4

関連する問題