2012-02-25 6 views
8

¿Se puede imprimir algo en C++ antes de ingresar a la función principal?¿Se puede imprimir algo en C++ antes de ingresar a la función principal?

Es pregunta de la entrevista en Bloomberg:

respuesta : crear un valor asignación variable global de la declaración printf con un cierto contenido.

+2

También debe preguntar * ellos * se puede mostrar) sus guías de estilo de código, y b) una pieza representable de código de su base de código. –

+4

@KerrekSB: como en cualquier organización grande (hay> 3000 desarrolladores en Bloomberg), la calidad del código varía de mala a buena. La pregunta sobre la ejecución del código antes de ingresar 'main()' no es del todo irrelevante y una introducción razonable, p. a una discusión sobre cómo asegurarse de que se construyan los objetos a los que se accede. ¿Importa el día a día? Probablemente no. ... y sospecharía de la respuesta que acabo de citar: tanto las variables globales como el uso de 'printf()' me harían dudar. –

Respuesta

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

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

Este bien formadas C impresiones

programa ++

Hola antes principal()

Usted ve, el C++ estándar garantiza que los constructores de las variables de espacio de nombres de alcance (en este ejemplo , es x) se ejecutará antes de main(). Por lo tanto, si imprime algo en un constructor de dicho objeto, se imprimirá antes del main(). QED

+0

muy bueno ......... –

+3

La respuesta le falta una pieza: ¿Cómo puede estar seguro de que std :: cout es seguro de usar en este momento? – Flexo

+0

@awoodland uhm ... Porque el estándar lo garantiza? (afirmación difícil, voy a tratar de probar :) –

0

Archivo de cabecera

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

archivo de implementación:

A* A::a = new A; 

Bueno, la estática (y no sólo) se inicializan antes de la llamada a main.

EDITAR

Otra:

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

int main() 
{ 
    return 0; 
} 
+3

'new' ¡MIS OJOS MIS OJOS! – wilhelmtell

+0

@wilhelmtell ¿qué pasa con eso? 'A' no puede contenerse como miembro, y yo era perezoso para escribir otra clase para probar un punto. –

8
#include <iostream> 

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

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

¡¡¡Bien !!! –

+1

Por supuesto, no desea que 'o' sea visible globalmente:' namespace {std :: ostream & o (std :: cout << "hello \ n"); } 'o' static std :: ostream & o (std :: cout << "hello \ n"); 'pero estos son detalles. –

+1

si 'operator <<()' lanza un problema. – wilhelmtell

0
#include <iostream> 
using namespace std; 

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

int main() { 
    cout << "main\n"; 
} 
Cuestiones relacionadas