-3

if/else#if/ #else/の構造が混同されてい#endifます。

  1. それらの違いは何ですか?
  2. それぞれをどのような特定の状況で使用する必要がありますか?
4

3 に答える 3

9

if/else と #if/#else/#endif について混乱しています。それらは同じロジック機能を持っているようです。

それらの違いは何ですか?

#if#elseおよび#endif前処理に属します。それらは実行されませんが、テキスト置換の指示です。これらは、テキスト エディターに通常見られる自動 "検索 & 置換" 機能のようなものと考えることができます。

ifおよびelseは実行時の構成要素です。これらは、プログラムの実行中に実行されると考えることができます。

このプログラムがあるとしましょう:

#include <iostream>

#define VALUE 1

int main()
{
#if VALUE == 1
    std::cout << "one\n";
#else
    std::cout << "not one\n";
#endif
}

コンパイラにこのプログラムをコンパイルするように指示すると、「実際の」C++ コードが実際にコンパイルされる前に、プリプロセッサがテキストの置換を行います。プログラムは次のようになります。

#include <iostream>

int main()
{
    std::cout << "one\n";
}

さて、技術的には、ここで使用できifます:

#include <iostream>

#define VALUE 1

int main()
{
    if (VALUE == 1)
    {
        std::cout << "one\n";
    }
    else
    {
        std::cout << "not one\n";
    }
}

しかし、C++ ではfor constants を使用しません#define。代わりに次のようなものがあります。

#include <iostream>

int const value = 1;

int main()
{
    if (value == 1)
    {
        std::cout << "one\n";
    }
    else
    {
        std::cout << "not one\n";
    }
}

おそらく、値は、たとえばユーザー入力によって、プログラムの実行中にのみ認識されます。#if次に、プログラムが実行される前にのみ機能する を使用することは明らかにできません。使用する必要がありますif:

#include <iostream>

int main()
{
    int value;
    std::cin >> value; // gross simplification here

    if (value == 1)
    {
        std::cout << "one\n";
    }
    else
    {
        std::cout << "not one\n";
    }
}

What kind of specific situations for me to choose each of them?

初心者向けの良いガイドラインは#ifのとおり#ifndefです。プリプロセッサでしか解決できない問題が発生した場合は、 のさらなる使用を検討してください。#if

于 2015-03-11T16:18:42.580 に答える