¿Puedes pensar en 'un programa' que da 'salidas diferentes para un compilador C y un compilador C++' (aún da salida consistente bajo el mismo lenguaje)?Salida diferente para compilador diferente - C y C++
Respuesta
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;
}
aunque es exacto, lo veo más como un truco :) Sin embargo, es bueno. –
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). –
@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
int class;
no se compilará en C++ y compilará en C.
¡Guau! muchas ideas, todo en un solo lugar ... agradable ... – Aditya369
La pregunta era sobre la salida del programa, no la salida del compilador. –
int main() { return sizeof 'a'; }
¡Perfectamente conciso! – GManNickG
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'). –
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'));
}
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
Y 'sizeof (int)' podría ser 1. –
typedef char X;
int main() {
struct X { double foo; }
printf("%d\n", sizeof(X));
return 0;
}
Falta ' #include
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
*/
}
Esto devuelve un estado diferente según el idioma, pero no produce ninguna * salida *. –
#include <stdio.h>
int main(void)
{
#ifdef __cplusplus
puts("C++");
#else
puts("C");
#endif
return 0;
}
El preprocesador es parte del lenguaje? – harper
@harper: Sí. Es la sección 6.10 del estándar C99, sección 16 del estándar C++. –
- 1. Diferente declaración y definición en C++
- 2. ¿Por qué la salida de este programa es diferente entre C y C++?
- 3. ¿por qué vs C++ 2010 compilador producir un código de montaje diferente para función similar
- 4. Hacer que GNU use un compilador diferente
- 5. Tamaño de texto diferente para hardware diferente
- 6. LINQ - ¿Estilo de sintaxis diferente, resultado diferente?
- 7. Imprimir ?? y !! en diferente secuencia mostrará un resultado diferente
- 8. Ejecutar código como un usuario diferente (C#)
- 9. Diferente código/configuración en la versión y Depuración (Obj-C)
- 10. misma condición en C y Java, diferente resultado
- 11. Vim ancho de texto diferente para comentarios C multilínea?
- 12. Salida diferente, mismo nombre de usuario y contraseña
- 13. ¿Por qué la salida es diferente?
- 14. salida diferente después de la clase principal de la ejecución
- 15. compilador "g ++" y "C++"
- 16. ¿Se permite a un compilador de C++ emitir código de máquina diferente compilando el mismo programa?
- 17. Resultado diferente con OPENCV C y C++ API (diferencia Frontera interpolación)
- 18. Generación de dependencia gcc para un directorio de salida diferente
- 19. compilador C para Windows?
- 20. interfaz entre exe y dll con diferente biblioteca de tiempo de ejecución de C/C++
- 21. ¿Cómo puedo contar con una base numérica diferente en C++?
- 22. ¿Indicador bash diferente para el modo de edición vi diferente?
- 23. ¿El compilador .NET JIT genera código diferente para parámetros genéricos con diferentes enumeraciones?
- 24. C++ diferencias compilador (VS2008 y g ++)
- 25. ¿Disposición diferente de log4j para la depuración y el error?
- 26. ¿Puede congelar un proceso C/C++ y continuarlo en un host diferente?
- 27. Salida de código variable C
- 28. Función de llamada C con diferente puntero de pila (gcc)
- 29. log4net/C# - Diseño diferente basado en el nivel
- 30. Diferente entre $ .each y ko.utils.arrayForEach
Este es una estúpida pregunta de entrevista –