Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

108
Visualizações
VLA y efecto secundario en el operando de sizeof

Sé que sizeof nunca evalúa su operando, excepto en el caso específico donde dicho operando es un VLA. O pensé que lo sabía.

 void g(int n) { printf("g(%d)\n", n); } int main(void) { int i = 12; char arr[i]; // VLA (void)sizeof *(g(1), &arr); // Prints "g(1)" (void)sizeof (g(2), arr); // Prints nothing return 0; }

¿Qué está pasando?

Por si acaso, esto está compilado con GCC 5.1 en Coliru .

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Parece que debería pensarlo dos veces antes de publicar, porque me llamó la atención justo después de hacerlo.

Mi comprensión de cómo interactúa sizeof con los VLA es realmente correcta, como lo confirma la siguiente cita (¡gracias @this!):

6.5.3.4 Los operadores sizeof y _Alignof
Si el tipo del operando es un tipo de matriz de longitud variable, se evalúa el operando; de lo contrario, el operando no se evalúa y el resultado es una constante entera

Eso no es lo que está causando este comportamiento sorprendente (para mí).

 (void)sizeof (g(2), arr);

En la subexpresión (g(2), arr) , el operador de coma desencadena el decaimiento de matriz a puntero de arr . Por lo tanto, el operando de sizeof ya no es un VLA, sino un simple char* , y vuelve a no evaluar su operando.

Aparentemente , este comportamiento ha sido alterado en C++, donde el operador de coma ya no decaerá las matrices.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda