Cómo verificar el estado de #pragma STDC?
Considere este código:
/* t0.c */
pragma STDC FENV_ACCESS ON
include “t0.h”
Luego, en t0.h, ¿cómo se puede verificar el estado de STDC FENV_ACCESS?
/* t0.h */
/* ¿cómo se puede verificar el estado de STDC FENV_ACCESS? */
/* algo así como: #if STDC FENV_ACCESS == ON */
Si no es posible, entonces:
1. ¿Por qué no es posible?
2. ¿Será útil agregar esta característica al estándar de C?
davy.ai
Respuesta:
No es posible verificar el estado de
STDC FENV_ACCESS
ent0.h
porqueSTDC FENV_ACCESS
es una directiva pragma y no una directiva del preprocesador. Las directivas pragma son manejadas por el compilador durante la compilación y no son procesadas por el preprocesador. Por lo tanto,STDC FENV_ACCESS
no está definido en el preprocesador y no se puede verificar ent0.h
.Agregar esta característica al estándar C puede que no sea útil, ya que las directivas pragma son manejadas por el compilador y no están destinadas a ser verificadas por el preprocesador. Además,
STDC FENV_ACCESS
es una pragma no estándar que puede que no esté disponible en todos los compiladores. Por lo tanto, confiar en ella puede hacer que el código no sea portable. Es mejor usar funciones estándar de C comofesetround()
yfegetround()
para establecer y obtener respectivamente la dirección de redondeo, las cuales son más seguras y portables.