Escriba un programa en C que no se compile en C++

Aunque C++ está diseñado para tener compatibilidad con versiones anteriores de C, puede haber muchos programas en C que producirían errores de compilación cuando se compilan con un compilador de C++. La siguiente es la lista de los programas en C que no se compilarán en C++:

  1. Llamar a una función antes de la declaración
  2. Usando puntero normal con variable const
  3. Uso de punteros encasillados
  4. Declarar valores constantes sin inicializar
  5. Uso de palabras clave específicas como nombres de variables
  6. Comprobación estricta de tipos
  7. El tipo de retorno de main()

Estos puntos se analizan en detalle a continuación:

1) Llamar a una función antes de la declaración: en C++, es un error del compilador llamar a una función antes de declararla. Pero en C, puede compilar. (Consulte ¿Qué sucede cuando se llama a una función antes de su declaración en C?

C

// C Program to demonstrate calling
// a function before declaration
#include <stdio.h>
  
// Main starts
int main()
{
    // fun() is called before its
    // declaration/definition
    fun();
}
  
// Function Declaration
int fun()
{
    printf("Hello");
    return 0;
}

2) Usar un puntero normal con variable const: en C++, se genera un error de compilación cuando se usa un puntero normal para apuntar a una variable const, sin embargo, está permitido en C. ( Must Read – Const Qualifier in C
 

C

// C Program to demonstrate using a
// normal pointer with const variable
#include <stdio.h>
  
// Main starts
int main()
{
  
    // A normal pointer points to const
    int const j = 20;
  
    int* ptr = &j;
  
    // The below assignment is invalid in C++,
    // results in error.In C, the compiler may
    // throw a warning, but casting is implicitly allowed
    printf("*ptr: %d\n", *ptr);
  
    return 0;
}

3) Uso de punteros encasillados: en C, un puntero vacío se puede asignar directamente a algún otro puntero como int *, char *. Pero en C++, un puntero vacío debe escribirse explícitamente cast. 

C

// C Program to demonstrate
// using typecasted pointers
#include <stdio.h>
  
// Main starts
int main()
{
    void* vptr;
  
    // In C++, it must be
    // replaced with int *iptr=(int *)vptr;
    int* iptr = vptr;
  
    return 0;
}

Nota: Esto es algo que notamos cuando usamos malloc(). El tipo de retorno de malloc() es nulo *. En C++, debemos encasillar explícitamente el valor de retorno de malloc() al tipo apropiado, por ejemplo, “int *p = (int *)malloc(sizeof(int))”. En C, no es necesario encasillar. 

4) Declarar valores constantes sin inicializar: En C++, la variable const debe inicializarse pero en C no es necesario. El siguiente programa compila y funciona bien en C, pero falla en la compilación en C++. 

C

// C Program to demonstrate declaring
// constant values without initializing:
#include <stdio.h>
  
// Main starts
int main()
{
    const int a;   
    return 0;
}

5) Uso de palabras clave específicas como nombres de variables: en C, se pueden usar palabras clave específicas como nombres de variables, sin embargo, no es posible en C++. El siguiente programa no se compilará en C++ pero compilará en C.  

C

// C Program to demonstrate using
// specific keywords as variable names
#include <stdio.h>
  
// Main starts
int main(void)
{
  
    // new is a keyword in C++
    // but not in C
    int new = 5;
  
    printf("%d", new);
}

Del mismo modo, podemos usar otras palabras clave como eliminar, explícito, clase , etc.

6) Comprobación estricta de tipos: C++ realiza una comprobación de tipos más estricta que C. Por ejemplo, el siguiente programa compila en C, pero no en C++. En C++, obtenemos el error del compilador «conversión no válida de ‘int’ a ‘char*'». 
 

C

// C Program to demonstrate
// strict type checking
#include <stdio.h>
  
// Main starts
int main()
{
    char *c = 333;
    printf("c = %u", c);
    return 0;
}

7) Tipo de retorno de main(): En C++, la función principal requiere el tipo de retorno de ‘int’, sin embargo, no es el caso en C. En C++, no podemos usar el tipo de retorno como ‘void’.

C

// C Program to demonstrate that
// 'void' can be used as a return type
// for main()
#include <stdio.h>
  
// Main starts
void main()
{
    printf("Hello World");
}

8) El siguiente programa compila en C pero no compila en C++. (Vea este artículo para más referencia). 

C

// C Program that won't compile in C++
#include <stdio.h>
void func()
{
    // definition
}
  
// Main starts
int main()
{
    func();
    func(2);
}

Explicación: en C++, func() es equivalente a func(void), sin embargo, en C, func() es equivalente a func(…).

Este artículo es una contribución de Abhay Rathi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *