IBM Support

Unexpected definition of __USE_ISOC99 when using the xlc compiler invocation

Troubleshooting


Problem

The __USE_ISOC99 macro is defined unnecessarily by the GCC header file features.h in Red Hat Enterprise Linux 6 (RHEL6).

Symptom

The __USE_ISOC99 macro is defined in the GNU header files in RHEL6, even when strict conformance to the C89 language level is specified with the XL C compiler option -qlanglvl=stdc89. This is different behaviour than what occurs on RHEL5 or SLES11 with the same version of the compiler.

Any code that is dependant on this macro not being defined, or build configurations that have code paths dependant on this macro might be affected. In addition, new language features available only in C99 are enabled in the GCC header files.

Cause

The __USE_ISOC99 macro is defined unnecessarily by the GCC header file features.h.

Environment

Red Hat Enterprise Linux 6 (RHEL6)

Resolving The Problem

The macro __STRICT_ANSI can be defined to give the previous expected behaviour. This can be done by adding -D__STRICT_ANSI to a compile command, or by using the c89 compiler invocation, which predefines __STRICT_ANSI.

[{"Product":{"code":"SSXVZZ","label":"XL C\/C++ for Linux"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Component":"Compiler","Platform":[{"code":"PF016","label":"Linux"}],"Version":"11.1","Edition":"","Line of Business":{"code":"LOB57","label":"Power"}}]

Document Information

Modified date:
08 August 2018

UID

swg21455370