"C++プログラミング言語 - 第4版"を読んでいますが、C++構文のハングを取得するための簡単な演習を入力しました。眉。要するに、私がメインでaccept
に()
を追加するのを忘れ:関数呼び出しが足りない引数リスト警告
bool accept()
{
cout << "Do you want to proceed (y or n)?\n";
char answer = 0;
cin >> answer;
if (answer == 'y')
{
return true;
}
return false;
}
int main()
{
accept;
}
これが実行され、コンパイルおよび(VS2015で)
C4551生成 - 関数呼び出し欠落している引数リストを
私は自分自身が「」を読んでいることに気がつきました。そして、彼らは大部分が「自分のコードをデバッグする」ことを要求しているので、クローズされるはずの質問がたくさんあります。
私は、コードがコンパイルされ、実行され、関数が(ユーザー入力を待っている)ブロッキング文と戻り値の型を含んでいると、カッコが欠落していてもすべてのコードが期待通りに実行されると考えました。しかし、そうではありません。
また、私は私がしようとすると(それが実際に起こっていたことだった場合)、任意の最適化を防ぐためにbool a = accept; cout << a;
に、メインにaccept
への呼び出しを変更すると考えました、それはどちらかaccept()
コードを呼び出していませんでした。私が知って興味が何
は次のとおりです。
accept
への呼び出しがに何をコンパイルなっていますか?accept
内のコードが呼び出さ取得されていないのはなぜ- なぜこれだけ警告、およびエラーではなく(私はより多くのように、これが受け入れられるか疑問だ、私はエラーとしてそれを表示するように設定を変更することができます知っています実際の結果が期待された結果と異なる場合は、デフォルトでは「劇的に」ですか?この質問は意見に基づくものかもしれませんが、同意すれば省略してください)
bool a = accept; cout << a;
コードをメインで実行すると、出力として1
が生成されます。false
がデフォルトのbool値(少なくともC#の場合)で、受け入れコードが実行されないため真の値を返すものは何もありません。
の可能性のある重複した[私は括弧なしで関数を使用するときに、なぜC++コンパイラは文句ないのですか?](http://stackoverflow.com/questions/11082329/why-doesnt-the-c-compiler-complain -when-i-use-functions-括弧なし)およびhttp://stackoverflow.com/questions/17073066/g-calling-function-with-parenthesis-not-f-but-f-why-always-return –
@ HithamS.AlQadheeb:近づいている間に、彼は関数ポインタと 'bool'に崩壊しなければならないいくつかのことを尋ねます。だから完全な複製ではありません。 –
@ HithamS.AlQadheeb "複製"の回答は私の質問の一部にしか答えません。私のコンパイラが警告を出していたので、「重複」の質問のタイトルはちょうど私が経験していたものとまったく正反対のもので、警告文を質問タイトルとして使用しています。私の同じタイトルを使用している他の質問は、「なぜ私のコードは機能しないのですか?」と質問しているので、あなたが見つけた「dupe」が(まともなものではなく)検索可能。 – Kcvin