Incompatibilidades entre códigos C y C++

Las incompatibilidades C/C++ que causan la mayoría de los problemas reales no son sutiles. La mayoría son fáciles de capturar por los compiladores.
Esta sección da ejemplos de código C que no es C++:

1) En C, las funciones se pueden definir usando una sintaxis que opcionalmente especifica tipos de argumentos después de la lista de argumentos:

// C code that uses argument types after
// the list of arguments.
#include<stdio.h>
void fun(a, b)int a;int b;     // Invalid in C++
{
    printf("%d %d", a, b);
}
  
// Driver code
int main()
{
    fun(8, 9);
    return 0;
}
Output:
8 9 
Error in C++ :-  a and b was not declared in this scope 

2) En C y en versiones anteriores al estándar de C++, el especificador de tipo predeterminado es int.

// C code to show implicit int declaration.
#include<stdio.h>
int main()
{
    // implicit int in C, not allowed in C++
    const a = 7;    
      
    printf("%d", a);
    return 0;
}
Output:
7
Error in C++ :-  a does not name a type 

3) En C, un objeto de datos globales puede declararse varias veces sin usar el especificador externo . Siempre que como máximo una declaración de este tipo proporcione un inicializador, el objeto se considera definido solo una vez.

// C code to demonstrate multiple global
// declarations of same variable.
#include<stdio.h>
  
// Declares single integer a, not allowed in C++
int a;   int a;  
int main()
{
    return 0;
}
Error in C++ :-  Redefinition of int a

4) En C, un void* puede usarse como el operando de la derecha de una asignación o inicialización de una variable de cualquier tipo de puntero.

// C code to demonstrate implicit conversion
// of void* to int*
#include<stdio.h>
#include<malloc.h>
void f(int n)
{
    // Implicit conversion of void* to int*
    // Not allowed in C++.
    int* p = malloc(n* sizeof(int));  
}
  
// Driver code
int main()
{
    f(7);
    return 0;
}
Error in C++ :-  Invalid conversion of void* to int*

5) En C, una array se puede inicializar mediante un inicializador que tenga más elementos de los que requiere la array.

// C code to demonstrate that extra character
// check is not done in C.
#include<stdio.h>
int main()
{
    // Error in C++
    char array[5] = "Geeks";      
  
    printf("%s", array);
    return 0;
}

Producción:

Geeks
Error in C++ :-  Initializer-string for array of chars is too long

6) En C, una función declarada sin especificar ningún tipo de argumento puede tomar cualquier cantidad de argumentos de cualquier tipo. Haga clic aquí para saber más sobre esto.

// In C, empty brackets mean any number
// of arguments can be passed
#include<stdio.h>
  
void fun() {  } 
int main(void)
{
    fun(10, "GfG", "GQ");  
    return 0;
}
Error in C++ :-  Too many arguments to function 'void fun()'

Artículos relacionados:

Este artículo es una contribución de Sakshi Tiwari . Si le gusta GeeksforGeeks (¡sabemos que le gusta!) y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

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 *