es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no se diagnostica el uso de un nombre de identificador reservado en un contexto constante?

Basado en las siguientes dos reglas:

  • Utilizar un identificador que comience con “_”, seguido de una letra mayúscula, o contenga un doble guión bajo, es un comportamiento indefinido.
  • El comportamiento indefinido no está permitido en expresiones constexpr -> el compilador no debe compilar.

Entonces, ¿por qué los compiladores no se quejan de esto?

constexpr int _UB() {return 1;}
int main() {
    constexpr int a = _UB();
    return a;
}

Demo: Enlace

Además, veo mucho código profesional y compatible con MISRA que parece violar esta regla de nomenclatura, ver por ejemplo aquí:

#ifndef _STM32F732xxH
#define _STM32F732xxH

¿Todas estas bibliotecas también están invocando comportamientos indefinidos?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Las reglas mencionadas en la pregunta forman parte del estándar de C++, y es responsabilidad del compilador seguirlas. Sin embargo, en el código proporcionado, el identificador “UB” no viola las reglas mencionadas. El identificador no comienza con “” seguido de una letra mayúscula, ni contiene doble guión bajo. Por lo tanto, el código se compila sin problemas.

    Respecto a la segunda parte de la pregunta, es posible que algunas bibliotecas utilicen identificadores que violen las reglas de nomenclatura mencionadas en el estándar de C++. Sin embargo, esto no significa necesariamente que esas bibliotecas estén invocando un comportamiento no definido. En la práctica, los compiladores pueden optar por permitir algunas violaciones del estándar para mejorar la compatibilidad con código heredado. Además, algunos estándares de codificación, como MISRA, pueden tener sus propias reglas que pueden diferir del estándar de C++. Por lo tanto, que una biblioteca sea compatible con MISRA no significa necesariamente que siga todas las reglas del estándar de C++.

Comments are closed.