構文と意味エラー

1317 ワード

C++は「コマンド,アクセス」define機能パラメータが評価である.最初のパラメータが左氷を評価する場合、これはA呼to add(5,6)となり、そのうち同じ11となる.右撃氷パラメータ評価が第1となる場合、この使命to add(6,6)は、同じ12となる.これは、Xに対して1つの側効果しかないため、問題である.
他のケースではC++のコマンドはspecifyから何かを評価しないので、compilersによって仮定が異なります.C++がそれを澄ましている場合でも、いくつかのcompilersは動作involving変数と側incorrectly効果を実行します.これらの問題は一般的にいかなる保障を避けることができて、村には可変の側効果が氷を適用して、あなたが与えた声明よりも多くありません.
ルール:Aを使用しないでください.変更可能なサイド効果は、指定された宣言に適用されます.
ルール:メールとメールdecrementのインクリメンタルをプリオフセット値とプリdecrementで渡してください.「接頭辞バージョンはより多くのperformantだけでなく、y-o-u-r-eはlikelyが奇妙な問題に狂奔することを嫌っている.
2
3
4
5
6
7
8
9
10
11
12
13
int add(int x, int y)
{
    return x + y;
}
 
int main()
{
    int x = 5;
    int value = add(x, ++x); // is this 5 + 6, or 6 + 6?  It depends on what order your compiler evaluates the parameters in
 
    std::cout << value; // value could be 11 or 12, depending on how the above line evaluates!
    return 0;
}

この線がどのように動作しているかを見てみましょう.まず、コンパイラは同じ値を持つ一時コピーを5にコピーします.そして、元の×5から6に増えた.その後、コンパイラは計算結果を5にし、その値をYに割り当て、一時コピーを破棄します.
したがって,終了時の値は5,および*終了の値は6である.
ここでは、別の例で表示される相違間の接頭辞と接尾辞のバージョンを示します.
文法や意味の誤りプログラミングは難しく、誤りを起こす方法がたくさんあります.エラーは通常、2つに分類されます.構文エラーと意味エラー(論理エラー)です.文を書くと、これが正しくない構文エラーが発生した場合、構文++言語に基づいています.これには、セミコロンの欠落、宣言されていない変数、一致しないカッコまたはカッコ、終了していない文字列などのエラーが含まれます.たとえば、次のプログラムには、かなりの構文エラーが含まれています.