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++:
- Llamar a una función antes de la declaración
- Usando puntero normal con variable const
- Uso de punteros encasillados
- Declarar valores constantes sin inicializar
- Uso de palabras clave específicas como nombres de variables
- Comprobación estricta de tipos
- 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