0

重複の可能性:
main関数に入る前に、C ++で何かを印刷できますか?

int main()が呼び出される前に他の命令を実行する可能性はありますか?

int main(){cout<<"a";}

そして、main()でのその呼び出しの前に、cout<<"b"の呼び出しがあります。以前のどこか。たぶん、この#defineのことが役立つでしょう。

4

2 に答える 2

11

は必要ありませんdefine。グローバル オブジェクトを (同じファイル内に) 作成するだけで、その ctor (または、関数の呼び出しなど、初期化に使用するもの) が main が呼び出される前に実行されます。

編集: 同様に、これらのグローバル オブジェクトはメインの終了後に破棄されるため、そのデストラクタはその時点で実行されます。

于 2013-02-01T17:26:55.110 に答える
2

グローバルオブジェクトは、main()が実行される前に構築されます。したがって、クラスを定義し、そのコンストラクターにコードを配置してから、そのクラスのグローバルインスタンスを宣言できます。

class temp
{
public:
    temp()
    {
        cout << "before main" << endl;
    }

    ~temp()
    {
       cout << "after main" << endl;
    }
};

temp t;

int main()
{
    cout << "in main" << endl;
    return 0;
}

グローバル変数も、main()が実行される前に初期化されます。@jrokが示したように、値を返す関数を定義してから、その関数を呼び出し、その宣言でグローバル変数に値を割り当てることができます。

一部のコンパイラは#pragma startup、起動時にユーザー定義関数を実行するステートメント(および#pragma exitシャットダウンに対応するステートメント)もサポートしています。

void beforeMain()
{
    cout << "before main" << endl;
}
#pragma startup beforeMain

void afterMain()
{
    cout << "after main" << endl;
}
#pragma exit afterMain

int main()
{
    cout << "in main" << endl;
    return 0;
}
于 2013-02-01T17:39:15.960 に答える