Tipo Diferencia de caracteres literales en C y C++

Cada literal (constante) en C/C++ tendrá un tipo de información asociada. Tanto en C como en C++, los literales numéricos (p. ej., 10) tendrán int como tipo. Significa que sizeof(10) y sizeof(int) devolverán el mismo valor.
Si compilamos lo que hemos dicho en términos de código, se verá así.
Ejemplo:

C++

#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    cout<<sizeof(10)<<endl;
     cout<<sizeof(int)<<endl;
    return 0;
}

C

// C program to illustrate that 'sizeof(10)' with its type 'int'
// will return the same value as of 'sizeof(int)'
 
#include <stdio.h>
 
int main(void)
{
    printf("%lu\n", sizeof(10));
    printf("%lu\n", sizeof(int));
   
    return (0);
}
 
// This code is contributed by sarajadhav12052009

Producción:

4
4

Sin embargo, los caracteres literales (por ejemplo, ‘V’) tendrán diferentes tipos, sizeof(‘V’) devuelve valores diferentes en C y C++. En C, un carácter literal se trata como tipo int mientras que, en C++, un carácter literal se trata como tipo char ( sizeof(‘V’) y sizeof(char) son iguales en C++ pero no en C. Veamos esto comportamiento interesante a través de un ejemplo.

C

#include <stdio.h>
int main()
{
printf("%lu", sizeof('V'));
printf("\n");
printf("%lu", sizeof(char));
return 0;
}
 
 
 
// Output
// 4
// 1

C++

#include<bits/stdc++.h>
using namespace std;
 
int main()
{
cout<<sizeof('V')<<endl;
cout<<sizeof(char)<<endl;
return 0;
}
 
 
 
 
// Output
// 1
// 1

Resultado del programa anterior:

  • Resultado de C: tamaño de (‘V’) = 4 y tamaño de (char) = 1 
  • Resultado de C++: tamaño de (‘V’) = 1 y tamaño de (char) = 1

Más precisamente, podemos decir que en C, sizeof(‘V’) se tratará como un int sin signo largo, veamos un ejemplo para aclarar las cosas.

C

#include <stdio.h>
int main()
{
    printf("%d", sizeof('V'));
    return 0;
}

Salida: dará este error.

source.c: In function 'main':
source.c:7:10: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=]
    7 | printf("%d", sizeof('V'));
      |         ~^   ~~~~~~~~~~~
      |          |   |
      |          int long unsigned int
      |         %ld

Este comportamiento es necesario en C++ para admitir la sobrecarga de funciones. Un ejemplo lo hará más claro. Prediga la salida del siguiente programa en C++. 

C++

#include<bits/stdc++.h>
using namespace std;
 
void foo(char c)
{
   printf("From foo: char");
}
void foo(int i)
{
   printf("From foo: int");
}
   
int main()
{
   foo('V');
   return 0;
}

Producción:

From foo: char

El compilador debe llamar 

void foo(char);

ya que el tipo ‘V’ es char

Este artículo es una contribución de Venki . 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

Categories C++

Deja una respuesta

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