2011-03-29 12 views

Respuesta

19

Este programa produce 12 en C++ o C99, y 6 en C89:

#include <stdio.h> 

int main() 
{ 
    int a = 12//**/2; 
    ; 

    printf("%d\n", a); 
    return 0; 
} 
+0

aunque es exacto, lo veo más como un truco :) Sin embargo, es bueno. –

+1

Eso realmente no responde la pregunta, ¿verdad? Produce la misma salida en C y C++ (C99 es, después de todo, el estándar C actual). –

+0

@KeithThompson: Sí, [respuesta de ecik] (http://stackoverflow.com/questions/5467576/different-output-for-different-compiler-c-and-c/5469636#5469636) es una coincidencia más precisa para el pregunta. – caf

3
int class; 

no se compilará en C++ y compilará en C.

+0

¡Guau! muchas ideas, todo en un solo lugar ... agradable ... – Aditya369

+1

La pregunta era sobre la salida del programa, no la salida del compilador. –

9
int main() { return sizeof 'a'; } 
+1

¡Perfectamente conciso! – GManNickG

+2

Pero no es perfectamente portátil. 'sizeof 'a'' podría ser 1 en C si' sizeof (int) == 1' (que solo es posible si 'CHAR_BIT> = 16'). –

20

Incompatibilities between ISO C and ISO C++

Un ejemplo común es sizeof('A'), que es por lo general 4 en C pero siempre 1 en C++, porque el personaje las constantes como 'A' tienen el tipo int en C pero el tipo char en C++:

#include <stdio.h> 

int main(void) 
{ 
    printf("%d\n", sizeof('A')); 
} 
+1

operador 'sizeof' devuelve' size_t' no 'int'. Entonces tu código contiene error. http://stackoverflow.com/questions/940087/whats-the-correct-way-to-use-printf-to-print-a-size-t – UmmaGumma

+0

Y 'sizeof (int)' podría ser 1. –

5
typedef char X; 
int main() { 
    struct X { double foo; } 
    printf("%d\n", sizeof(X)); 
    return 0; 
} 
+1

Falta ' #include '. '"% d "' requiere un 'int', no un' size_t'. Una implementación conforme podría tener 'sizeof (struct X) == 1' (con, por ejemplo,' CHAR_BIT == 64'), reparable dando a 'struct X' dos' char' members en lugar de 'double'. –

4

De wikipedia, alterado para producir una salida consistente en cada idioma:

extern int T; 

int size(void) 
{ 
    struct T { int i; int j; }; 

    return sizeof(T) == sizeof(int); 
    /* C: return 1 
    * C++: return 0 
    */ 
} 
+0

Esto devuelve un estado diferente según el idioma, pero no produce ninguna * salida *. –

2
#include <stdio.h> 
int main(void) 
{ 
#ifdef __cplusplus 
    puts("C++"); 
#else 
    puts("C"); 
#endif 
    return 0; 
} 
+0

El preprocesador es parte del lenguaje? – harper

+0

@harper: Sí. Es la sección 6.10 del estándar C99, sección 16 del estándar C++. –

Cuestiones relacionadas