2

関数の呼び出しを間違えました'。コンパイラが私の関数を無視する理由を理解するために多くの時間を費やしました。コンパイル時に報告されないのはなぜですか?コンパイラはエラーなしですべてをビルドしますが、tereは「2」のメッセージボックスではありません。

#include "stdafx.h"
#include <windows.h>

void tstB()
{
MessageBox(NULL, "2", NULL, NULL);
}

int _tmain(int argc, _TCHAR* argv[])
{
MessageBox(NULL, "1", NULL, NULL);
tstB;
return 0;
}
4

3 に答える 3

5

有効な式なのでエラーではありません。式の結果は関数ポインタです。次のような式を使用できます。

void (*p)() = tstB;
于 2012-08-12T21:22:42.300 に答える
3

tstB;有効なステートメントである式としての使用について違法なことは何もありません。に似ています

int main() {
    int a;
    a;
}
于 2012-08-12T21:22:54.937 に答える
2

あなたはそれをこのように呼ぶ必要があります:

tstB();

それ以外の場合は、関数へのポインタがありますが、これはエラーではありません。

適切なコンパイルフラグを使用して、GCCはwarning: statement has no effect [-Wunused-value]

于 2012-08-12T21:22:25.473 に答える