Salida de programas C++ | Conjunto 24 (C++ frente a C)

Prediga la salida de los siguientes programas C++.

  1. Programa 1 

CPP

#include <iostream>
using namespace std;
int main()
{
    char array[3] = "abc";
    cout << array;   
    return 0;
}
  1. Producción:
error: initializer - string for array of chars is too long
  1. Explicación: La aplicación de array en C++ es similar a la de C. La única excepción es la forma en que se inicializan las arrays de caracteres. Al inicializar una array de caracteres en ANSI C, el compilador permitirá la siguiente declaración:
char array[3] = "abc"    // allowed in ANSI C
  1. Esto se debe a que C asume que el programador tiene la intención de omitir el carácter NULL (‘\0’) en la definición. Pero en C++, el tamaño debe ser 1 más grande que la cantidad de caracteres, por lo tanto, la siguiente declaración es correcta.
char array[4] = "abc"    // O.K. for  C++
  1. Programa 2 

CPP

#include <iostream>
using namespace std;
int main()
{
    cout << sizeof('x');
    cout << sizeof(char);   
    return 0;
}
  1. Producción:
1 1
  1. Explicación: es notable que las constantes de carácter se almacenan como tipo de carácter en C++, pero este no es el caso en C. En ANSI C, el mismo programa produciría el resultado:
4 1     // result when code is executed in C
  1. porque las constantes de carácter se promocionan a int. Recomendado que ejecute el mismo código en C
  2. Programa 3 

CPP

#include <iostream>
using namespace std;
int main()
{
    void *ptr1;
    char *ptr2;
    ptr2 = ptr1; // statement 1
    return 0;
}
  1. Producción:
error: invalid conversion from 'void*' to 'char*
  1. Explicación: en C o C++ se permite asignar cualquier tipo de puntero a un puntero vacío sin utilizar una conversión. Pero no podemos asignar un puntero vacío a un puntero no vacío sin usar un tipo de puntero convertido a no vacío en C++. Por lo tanto, la declaración uno debería ser:
ptr2 = (char*)ptr1;    // valid in C++
  1. Nota: debe tenerse en cuenta que cuando el mismo código se compila en C, no producirá ningún error, es decir, en C podemos asignar un puntero vacío a un puntero no vacío sin usar ningún tipo de conversión.
  2. Programa 4 

CPP

#include <iostream>
using namespace std;
int main()
{
    const int size;
    cout << size;
    return 0;
}
  1. Producción:
error: uninitialized const 'size'
  1. Explicación: A primera vista, es obvio pensar que la salida será un valor basura, pero no es el caso. A diferencia de C en C++, cualquier variable declarada como constante debe inicializarse en el momento de la declaración. Por lo tanto, el código dado no compilará y arrojará el error. Cabe señalar que el mismo código se compilará en ANSI C y producirá una salida como 0.
  2. Programa 5 

CPP

#include <iostream>
using namespace std;
int main()
{
    enum season { spring, summer, autumn, winter };
     
    season myFavSeason_1 = spring;
    season myFavSeason_2 = 4;  // statement 1
     
    cout << myFavSeason_1;
    cout << endl;
    cout << myFavSeason_2;
 
    return 0;
}
  1. Producción:
error: invalid conversion from 'int' to 'main()::season'
       season myFavSeason_2 = 4;
  1. Explicación: a diferencia de C en C++, cada tipo de datos enumerado conserva su propio tipo independiente. Esto significa que C++ no permite que un valor int se convierta automáticamente en un valor de enumeración. Entonces habrá un error al ejecutar el código. Sin embargo, si se realiza la conversión de tipos, el código funcionará cambiando la declaración 1 a la siguiente declaración:
season myFavSeason_2 = (season) 4; 

Artículos relacionados: C vs C++ Este artículo es una contribución de Avinash Kumar Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@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 *