¿Qué impide que C++ sea un superconjunto estricto de C? [duplicate]

3 minutos de lectura

avatar de usuario
Miguel

Posible duplicado:

“C subconjunto de C++” -> ¿Dónde no? ejemplos?

Soy consciente de que C++ no es un superconjunto estricto de C. ¿Qué características del lenguaje impiden que C++ sea un superconjunto de C?

  • Esta pregunta ha sido respondida 1000 veces, me gustaría ver una respuesta técnica que demuestre que simplemente no es posible, dejando de lado las palabras clave y C99…

    – Matt Carpintero

    23 de septiembre de 2010 a las 9:41

  • @Matt Joiner: ¿por qué dejar de lado el C99?

    – JeremyP

    23 de septiembre de 2010 a las 9:43

  • @Matt: demuestra eso qué no es posible? Por supuesto, todos los programas en C se pueden refactorizar a C++ válido. Eso es bastante trivial, dado que ambos lenguajes son Turing completos.

    – Konrad Rodolfo

    23 de septiembre de 2010 a las 9:43

  • @Konrad: Es casi tan trivial, pero no del todo. C es Turing completo y también proporciona acceso a un sistema de archivos. Su modelo informático tiene salidas que no son las mismas que las salidas del modelo de Turing. Un lenguaje hipotético que fuera Turing completo pero que no proporcionara acceso a un sistema de archivos, no sería un superconjunto de C en el sentido de “puede ser refactorizado”. Pero debido a que C++ proporciona acceso a todas las bibliotecas de C y a volatile memoria, nos vemos bien en la puntuación de E/S.

    –Steve Jessop

    23 de septiembre de 2010 a las 10:36


El elefante en la habitación: lo siguiente es C válido pero no C++ válido.

int typename = 1;

Sustituya su palabra reservada favorita de C++.

  • El ejemplo más corto sería int new = 1;

    – HojaJS

    31 de diciembre de 2013 a las 18:35

C++ tampoco admite arreglos de longitud variable, donde:

int array[n];

es válido en C, pero no en C++. Una versión en C++ de lo anterior sería:

int *array = new int[n];
  ...
delete [] array;

  • yo reemplazaría new int[] y delete[] con std::vector<int>.

    – fredo desbordamiento

    23 de septiembre de 2010 a las 9:52

  • @notJim: sí, array se asignaría en la pila. Si n eran demasiado grandes para eso, entonces, si tiene suerte, la implementación finaliza debido a una señal (u otra sanción impulsada por el sistema operativo). Si no tienes suerte, la implementación continúa destruyendo ciegamente la memoria de otra persona. Depende del sistema operativo/compilador.

    –Steve Jessop

    23 de septiembre de 2010 a las 10:39


  • Es decir NO cómo lo haría en C++.

    – Martín York

    23 de septiembre de 2010 a las 12:39

  • @FredOverflow: Sí, eso es C++ idiomático.

    – Andreas Magnuson

    1 de marzo de 2011 a las 8:36

  • g++ permite esto. Muy hacky, y lo usé en la universidad.

    – albahaca

    17 mayo 2015 a las 17:03

hay un especial wiki entrada que resume un montón de cuestiones.

avatar de usuario
alejandro c

Ejemplo simple, considere esta declaración:

int f();

Esto es C válido, pero C++ no válido: f(3, 2, -5, "wtf");

Explicación: en C, int f() es tratado como int f(...) (al menos en el sitio de la primera convocatoria). declarar como int f(void) si no quieres f para tomar parámetros.

Uno desde la parte superior de mi cabeza: C ++ no admite int predeterminado.

  • El tipo de retorno implícito tampoco está permitido en C, excepto antes de C99.

    – Antti Haapala — Слава Україні

    13 de marzo de 2016 a las 16:21

  • El tipo de retorno implícito tampoco está permitido en C, excepto antes de C99.

    – Antti Haapala — Слава Україні

    13 de marzo de 2016 a las 16:21

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad