2012-02-25 4 views
8

main関数に入る前に、C++で何かを印刷できますか?main関数に入る前に、C++で何かを印刷できますか?

これは、ブルームバーグでの面接の質問です:

回答 :一部のコンテンツでprintf文からグローバル変数割り当て値を作成します。

+2

あなたはまた、あなたa)はそのコードのスタイルガイドを表示する* *それらを求める、とのb)の表現作品なければなりませんそれらのコードベースからのコード。 –

+4

@KerrekSB:どんな大きな組織(Bloombergの3000人以上の開発者がいる)のように、コードの品質は悪いから良いまでさまざまです。 'main()'を入力する前にコードを実行することについての質問は、全く無関係ではなく、合理的なイントロです。アクセスされたオブジェクトがどのように構築されているかを確認する方法に関するディスカッションそれは日々重要ですか?おそらくそうではありません。 ...上の引用の答えは疑わしいでしょう:グローバル変数と 'printf()'の使用は私に不思議に思うでしょう。 –

答えて

9
#include <iostream> 
struct X 
{ 
    X() 
    { 
     std::cout << "Hello before "; 
    } 
} x; 

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

この整形式のC++プログラムを印刷

こんにちは前にメイン()あなたが見

、C++標準保証、この例では、名前空間スコープ変数のコンストラクタ( 、それはxです)は、main()の前に実行されます。したがって、そのようなオブジェクトのコンストラクタで何かを印刷すると、main()の前に印刷されます。 QED

+0

非常にいいです......... –

+3

答えが欠落しています:どの時点でstd :: coutがこの時点で安全に使用できることを確認できますか? – Flexo

+0

@awoodland uhm ...標準で保証されていますか? (厳しい主張、私は証明しようとします:) –

0

ヘッダファイル

class A 
{ 
    static A* a; 
public: 
    A() { cout << "A" ; } 
}; 

実装ファイルは:

A* A::a = new A; 

まあ、静は(だけではなく)mainへの呼び出し前に初期化されています。

EDIT

もう1:

bool b = /*(bool)*/printf("before main"); 

int main() 
{ 
    return 0; 
} 
+3

'new'私の目は私の目! – wilhelmtell

+0

@wilhelmtell何が問題なのですか? 'A'はメンバーとして自分自身を含めることはできません。私はポイントを証明する別のクラスを書くのを怠っていました。 –

8
#include <iostream> 

std::ostream & o = (std::cout << "Hello\n"); 

int main() 
{ 
    o << "Now main() runs.\n"; 
} 
+1

いいです!!!!!!! –

+1

もちろん、 'o'がグローバルに表示されないようにする:' namespace {std :: ostream&o(std :: cout << "hello \ n"); } 'または' static std :: ostream&o(std :: cout << "hello \ n"); 'しかし、これらは詳細です。 –

+1

'operator <<()'がスローした場合、問題があります。 – wilhelmtell

0
#include <iostream> 
using namespace std; 

int b() { 
    cout << "before "; 
    return 0; 
} 
static int a = b(); 

int main() { 
    cout << "main\n"; 
} 
関連する問題