意味不明の警告
Posted: 2007年8月21日(火) 16:57
こんにちは
さっそく質問ですが
環境:MS Visual Studio 2005
コンパイルしたとき下記のようなメッセージが出ました。
warning C4717: 'MyClass::getXXX' : すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。
Q1:
「スタック オーバーフローの発生」って、実行する時の話ではないか、なぜコンパイル段階で出たのでしょうか。
MS Visual Studio 2005 help を調べたら、以下のように書いております。
/********** MS Visual Studio 2005 help:*************/
コンパイラの警告 (レベル 1) C4717
言語のフィルタ : すべて 言語のフィルタ : 複数 言語のフィルタ : Visual Basic 言語のフィルタ : C# 言語のフィルタ : C++ 言語のフィルタ : J# 言語のフィルタ : JScript
Visual Basic (宣言)
Visual Basic (使用法)
C#
C++
J#
JScript
エラー メッセージ
'function' : すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。
関数を通るすべてのパスに、その関数の呼び出しが含まれています。この関数は、それ自体を再帰的に呼び出してからでなければ終了できないため、この関数は終了しません。
次の例では C4717 警告が生成されます。
コードのコピー
// C4717.cpp
// compile with: /W1 /c
// C4717 expected
int func(int x) {
if (x > 1)
return func(x - 1); // recursive call
else {
int y = func(0) + 1; // recursive call
return y;
}
}
int main(){
func(1);
}
//////////////////////////////////////////////////////////////////////////
Q2:
この例で何を説明したいでしょうか。(どこに悪いの?)
ご教授お願いします。
さっそく質問ですが
環境:MS Visual Studio 2005
コンパイルしたとき下記のようなメッセージが出ました。
warning C4717: 'MyClass::getXXX' : すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。
Q1:
「スタック オーバーフローの発生」って、実行する時の話ではないか、なぜコンパイル段階で出たのでしょうか。
MS Visual Studio 2005 help を調べたら、以下のように書いております。
/********** MS Visual Studio 2005 help:*************/
コンパイラの警告 (レベル 1) C4717
言語のフィルタ : すべて 言語のフィルタ : 複数 言語のフィルタ : Visual Basic 言語のフィルタ : C# 言語のフィルタ : C++ 言語のフィルタ : J# 言語のフィルタ : JScript
Visual Basic (宣言)
Visual Basic (使用法)
C#
C++
J#
JScript
エラー メッセージ
'function' : すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。
関数を通るすべてのパスに、その関数の呼び出しが含まれています。この関数は、それ自体を再帰的に呼び出してからでなければ終了できないため、この関数は終了しません。
次の例では C4717 警告が生成されます。
コードのコピー
// C4717.cpp
// compile with: /W1 /c
// C4717 expected
int func(int x) {
if (x > 1)
return func(x - 1); // recursive call
else {
int y = func(0) + 1; // recursive call
return y;
}
}
int main(){
func(1);
}
//////////////////////////////////////////////////////////////////////////
Q2:
この例で何を説明したいでしょうか。(どこに悪いの?)
ご教授お願いします。