Saltar al contenido

¿Puede un null puntero constante ser cualquier expresin constante entera evaluada a 0?

Después de indagar en diferentes repositorios y páginas de internet al final hemos dado con la solución que te enseñamos ahora.

Solución:

Tienes razón en que todos estos son válidos.

La sección 6.6 de la norma C establece:

1

constant-expression:
    conditional-expression

...

3 Las expresiones constantes no deben contener operadores de asignación, incremento, decremento, llamada de función o coma, excepto cuando están contenidos dentro de una subexpresión que no se evalúa.

...

6 Un expresión constante entera será de tipo entero y solo tendrá operandos que sean constantes enteras,
constantes de enumeración, constantes de caracteres, sizeof expresiones cuyos resultados son constantes enteras, _Alignof expresiones y constantes flotantes que son los operandos inmediatos de las conversiones. Los operadores de conversión en una expresión constante entera solo deben convertir tipos aritméticos en tipos enteros, excepto como parte de un operando a la sizeof o _Alignof operador.

Cada una de las expresiones en sus ejemplos se ajusta a esta descripción, es decir:

  • Todos los operandos son constantes enteras
  • La expresión es un expresión condicional (es decir, no utiliza operadores de asignación o coma) sin incrementos, decrementos o operadores de llamada de función
  • Evalúa a 0

Así que todas son formas válidas de asignar NULL a un puntero.

Algunos ejemplos que son no expresiones constantes enteras:

int x = 1;
int *ptr1 = (3, 0);    //  invalid, comma operator not allowed
int *ptr2 = (x = 0);   //  invalid, assignment not allowed
int *ptr3 = x - 1;     //  invalid, an operand is not an integer constant

Sí.

[C99 6.6/6]: Una expresión de constante entera tendrá un tipo entero y solo tendrá operandos que sean constantes enteras, constantes de enumeración, constantes de caracteres, expresiones sizeof cuyos resultados sean constantes enteras y constantes flotantes que sean los operandos inmediatos de las conversiones. Los operadores de conversión en una expresión constante entera solo convertirán tipos aritméticos en tipos enteros, excepto como parte de un operando en el operador sizeof.

Tenga en cuenta que este no es el caso en C++, donde null Las constantes de puntero se definen de manera diferente:

[conv.ptr]/1: A null constante puntero es un literal entero ([lex.icon]) con valor cero o un prvalue de tipo std​::​nullptr_­t. [..]

Si posees alguna sospecha y forma de aumentar nuestro división puedes escribir una interpretación y con deseo lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.