• ベストアンサー

c言語のエラーについて

VC++でプログラムを作っていますが、コンパイルする際に以下のエラーが表示されました。 error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。 どのような意味か教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

#1と#2の方の逆のパターンも考えられます。 定義済みの関数と同名の変数を宣言している場合もあります。 http://www.okweb.ne.jp/kotaeru.php3?q=325817

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=325817
takijun
質問者

お礼

int select; void select(void); がだぶっていました。ありがとうございました。

その他の回答 (2)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

エラー部分のソースがわからないので原因を特定できませんが… C言語では関数をポインタとして認識します。 func()は「関数func()を呼び出す」ではなく、「関数ポインタfuncに呼び出し演算子()で評価する」という解釈です。 関数呼び出しは「項(引数リスト)」という形式です。 「項(引数リスト)」を利用する式はすべて関数式として解釈しようとします。 しかし、「項(引数リスト)」の項が関数ポインタでないとき「関数としての呼び出しができない」というコンパイルエラーとなります。 #include <stdio.h> main(void) { int a[10] ; a(0) ;//←Error C2063 a[0](0) ;//←Error C2064 return (0) ; } C2063は「項が関数ポインタでないオブジェクト」であるときに発生します。 C2064は「項が関すポインタでない式」であるときに発生します。 ソースをよく読めば「式()」形式になっているところがあると思います。 よくやるミスとしては ・()で演算順序を変えようとして演算子を書き忘れる ・ifやforなどの制御キーワードのタイプミス ・関数名/関数ポインタ変数のタイプミス などなど...

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

関数とはみなせない識別子にかっこ "()" をつけると、このように文句をいわれます。 例えば、 int main() {   int xxx;   xxx(); /* ← 整数に括弧をつけても駄目だよねえ */   return 0; } また、c++ の場合には、関数の方に対するチェックが厳しいですから、 ・関数のプロトタイプ宣言がない or 宣言を持つファイルをインクルードしてない ・プロトタイプ宣言と違う型の引数を使っている などでも、このエラーが出ると思います。

関連するQ&A

専門家に質問してみよう