Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

537
Vistas
gcc: ¿cuáles son los ejemplos de prácticas no ISO, que no se encuentran en -pedantic?

https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html :

Algunos usuarios intentan usar -Wpedantic para verificar que los programas cumplan estrictamente con ISO C. Pronto descubren que no hace exactamente lo que quieren: encuentra algunas prácticas que no son ISO, pero no todas, solo aquellas para las que ISO C requiere un diagnóstico y algunas otras para las que se han agregado diagnósticos.

¿Cuáles son los ejemplos de prácticas no ISO que no encuentra -pedantic ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El problema aquí es fundamentalmente que es posible escribir programas en C que contengan errores (no solo fallas para lograr una conformidad estricta) que no es razonable exigir que un compilador de C detecte. En el momento en que se escribió originalmente el estándar (1989), el análisis de todo el programa estaba fuera de discusión, e incluso ahora, es costoso. Y uno siempre será capaz de generar construcciones como

 extern _Bool collatz_sequence_does_not_terminate(int); int foo(int n) { int rv; if (collatz_sequence_does_not_terminate(n)) { return rv; } return 23; }

donde la respuesta a "¿este programa tiene un comportamiento indefinido?" depende de un problema matemático cuya solución se desconoce.

Por lo tanto, el manual intenta advertirle, no solo que GCC no puede detectar todas las posibles violaciones de la conformidad ISO C, sino que ningún compilador puede hacerlo. Está redactado un poco demasiado precioso, si todavía trabajara en GCC, podría revisarlo para que sea más claro.


Si desea un ejemplo concreto de algo que hace que el programa no cumpla con los requisitos, no se diagnostica en absoluto y es relativamente probable que surja en la vida real, pruebe esto para ver el tamaño:

 /* ac */ #include <stdint.h> uint64_t val = 0x0123456789abcdef; /* bc */ #include <stdio.h> extern double val; int main(void) { printf("%g\n", val); return 0; }

Se requiere un análisis de todo el programa para detectar la discrepancia de tipo entre los dos archivos. No es un caso difícil; el compilador podría anotar cada símbolo global con su tipo y el enlazador podría verificar todos los usos de cada símbolo para verificar la coherencia con la definición. Pero no conozco ninguna cadena de herramientas, ni ningún producto de análisis estático, que detecte este error para las variables.

over 4 years ago · Santiago Trujillo Denunciar

0

GCC admite otras formas de expresiones constantes que no son requeridas por ISO C. Por ejemplo:

 int main() { const int m = 5; static int n = m; return n; }

Este código compila bien en modo "pedante" aunque la variable static se inicializa con algo que no es una expresión constante conforme a ISO C.

over 4 years ago · Santiago Trujillo Denunciar

0

  1. El preprocesador C, 11.1 Comportamiento definido por la implementación :

GCC permite el carácter '$' en los identificadores como una extensión para la mayoría de los objetivos. Esto es cierto independientemente del modificador std=, ya que esta extensión no puede entrar en conflicto con los programas que cumplen con los estándares. Sin embargo, cuando se preprocesa el ensamblador, los dólares no son caracteres de identificación por defecto.

UPD. 2. Permitiendo "simple complex ":

 #include <complex.h> complex x; $ gcc -std=c11 -pedantic -Wall -Wextra <nothing>

C11, 6.2.5 Tipos, 11:

Hay tres tipos de complejos , designados como float _Complex , double _Complex y long double _Complex .

y 7.3.1 Introducción, 4:

El macrocomplejo complex expande a _Complex ;

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda