Si se viola el requisito "debe/no debe", entonces ¿importa en qué sección (por ejemplo, semántica, restricciones) se encuentra dicho requisito?
Motivo de la pregunta: esta opinión:
Esto se encuentra en una sección de Semántica del estándar, no en Restricciones, por lo que no se requiere diagnóstico.
¿Es cierto que la violación del requisito "debe/no debe" ubicado en la sección Semántica no requiere un diagnóstico?
Las infracciones semánticas no requieren un mensaje de diagnóstico, mientras que las infracciones de restricciones sí.
La sección 5.1.1.3p1 del estándar C11 sobre Diagnósticos establece lo siguiente:
Una implementación conforme producirá al menos un mensaje de diagnóstico (identificado de una manera definida por la implementación) si una unidad de traducción de preprocesamiento o unidad de traducción contiene una violación de cualquier regla o restricción de sintaxis, incluso si el comportamiento también se especifica explícitamente como indefinido o implementación- definido. No es necesario generar mensajes de diagnóstico en otras circunstancias.
El estándar define muy vagamente lo que realmente significa "semántica". Lo que es más importante, no existe una definición del término en la sección 3 Términos, definiciones y símbolos de la norma.
Lo que el estándar define en esa sección es el significado de "restricción":
3.8
1 restricción
Restricción, ya sea sintáctica o semántica , mediante la cual debe interpretarse la exposición de los elementos del lenguaje.
Se agregó énfasis en "... o semántica".
El estándar continúa:
4. Conformidad
1 En este documento, "deberá" debe interpretarse como un requisito sobre una implementación o sobre un programa; por el contrario, "no deberá" debe interpretarse como una prohibición.
2 Si se viola un requisito de "deberá" o "no deberá" que aparece fuera de una restricción o restricción de tiempo de ejecución, el comportamiento no está definido.
Y luego llegamos a:
5.1.1.3 Diagnósticos
1 Una implementación conforme producirá al menos un mensaje de diagnóstico (identificado de una manera definida por la implementación) si una unidad de traducción de preprocesamiento o una unidad de traducción contiene una violación de cualquier regla o restricción de sintaxis, incluso si el comportamiento también se especifica explícitamente como indefinido o implementación -definido.
Se agregó énfasis en "... o restricción".
Según 3.8, ser "solo" una restricción semántica no descarta que algo sea una restricción .
Según 4. 1), un "deberá" es un requisito, un "no deberá" una prohibición.
Interpreto ambos para indicar una restricción.
Según 5.1.1.3, no solo las reglas de sintaxis violadas, sino también las restricciones violadas requieren un diagnóstico, incluso si (según 4.2)) "[...] el comportamiento también se especifica explícitamente como indefinido o definido por la implementación".
Tenga en cuenta, sin embargo, para evitar malentendidos:
Me refiero aquí a la semántica especificada con un "debe" / "no debe" en el estándar , no a la semántica de ningún programa.