/* Zeta API - Z/inspection/compiler.h ______ ______________ ___ |__ / | ___|___ ___|/ \ / /__| __| | | / - \ /______|_____| |__| /__/ \__\ Copyright (C) 2006-2025 Manuel Sainz de Baranda y Goñi. Released under the terms of the GNU Lesser General Public License v3. */ #ifndef Z_inspection_compiler_H #define Z_inspection_compiler_H #include #include #include #define Z_COMPILER_IS(COMPILER) Z_IS_TRUE(Z_COMPILER_IS_##COMPILER) #define Z_COMPILER_DIALECT_HAS(LANGUAGE, FEATURE) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_##FEATURE) #define Z_COMPILER_DIALECT_HAS_ATTRIBUTE(LANGUAGE, ATTRIBUTE) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_ATTRIBUTE_##ATTRIBUTE) #define Z_COMPILER_DIALECT_HAS_ESCAPE_SEQUENCE(LANGUAGE, ESCAPE_SEQUENCE) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_ESCAPE_SEQUENCE_##ESCAPE_SEQUENCE) #define Z_COMPILER_DIALECT_HAS_IDENTIFIER(LANGUAGE, IDENTIFIER) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_IDENTIFIER_##IDENTIFIER) #define Z_COMPILER_DIALECT_HAS_LITERAL(LANGUAGE, LITERAL) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_LITERAL_##LITERAL) #define Z_COMPILER_DIALECT_HAS_OPERATOR(LANGUAGE, OPERATOR) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_OPERATOR_##OPERATOR) #define Z_COMPILER_DIALECT_HAS_OPERATOR_CASE(LANGUAGE, OPERATOR, CASE) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_OPERATOR_CASE_##OPERATOR##_##CASE) #define Z_COMPILER_DIALECT_HAS_PREPROCESSOR_DIRECTIVE(LANGUAGE, PREPROCESSOR_DIRECTIVE) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_PREPROCESSOR_DIRECTIVE_##PREPROCESSOR_DIRECTIVE) #define Z_COMPILER_DIALECT_HAS_PREPROCESSOR_IDENTIFIER(LANGUAGE, PREPROCESSOR_IDENTIFIER) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_PREPROCESSOR_IDENTIFIER_##PREPROCESSOR_IDENTIFIER) #define Z_COMPILER_DIALECT_HAS_PREPROCESSOR_OPERATOR(LANGUAGE, PREPROCESSOR_OPERATOR) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_PREPROCESSOR_OPERATOR_##PREPROCESSOR_OPERATOR) #define Z_COMPILER_DIALECT_HAS_SPECIFIER(LANGUAGE, SPECIFIER) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_SPECIFIER_##SPECIFIER) #define Z_COMPILER_DIALECT_HAS_SPECIFIER_CASE(LANGUAGE, SPECIFIER, CASE) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_SPECIFIER_CASE_##SPECIFIER##_##CASE) #define Z_COMPILER_DIALECT_HAS_STD_PRAGMA(LANGUAGE, STD_PRAGMA) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_STD_PRAGMA_##STD_PRAGMA) #define Z_COMPILER_DIALECT_HAS_STORAGE_CLASS(LANGUAGE, STORAGE_CLASS) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_STORAGE_CLASS_##STORAGE_CLASS) #define Z_COMPILER_DIALECT_HAS_TYPE(LANGUAGE, TYPE) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_TYPE_##TYPE) #define Z_COMPILER_DIALECT_HAS_TYPE_MODIFIER(LANGUAGE, TYPE_MODIFIER) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_TYPE_MODIFIER_##TYPE_MODIFIER) #define Z_COMPILER_DIALECT_HAS_TYPE_QUALIFIER(LANGUAGE, TYPE_QUALIFIER) \ Z_IS_TRUE(Z_COMPILER_HAS_##LANGUAGE##_TYPE_QUALIFIER_##TYPE_QUALIFIER) #define Z_COMPILER_HAS(FEATURE) \ Z_IS_TRUE(Z_COMPILER_HAS_##FEATURE) #define Z_COMPILER_HAS_ATTRIBUTE(ATTRIBUTE) \ Z_IS_TRUE(Z_COMPILER_HAS_ATTRIBUTE_##ATTRIBUTE) #define Z_COMPILER_HAS_CONSTANT(CONSTANT) \ Z_IS_TRUE(Z_COMPILER_HAS_CONSTANT_##CONSTANT) #define Z_COMPILER_HAS_FUNCTION(FUNCTION) \ Z_IS_TRUE(Z_COMPILER_HAS_FUNCTION_##FUNCTION) #define Z_COMPILER_HAS_LITERAL(LITERAL) \ Z_IS_TRUE(Z_COMPILER_HAS_LITERAL_##LITERAL) #define Z_COMPILER_HAS_MACRO(MACRO) \ Z_IS_TRUE(Z_COMPILER_HAS_MACRO_##MACRO) #define Z_COMPILER_HAS_MAGIC_CONSTANT(MAGIC_CONSTANT) \ Z_IS_TRUE(Z_COMPILER_HAS_MAGIC_CONSTANT_##MAGIC_CONSTANT) #define Z_COMPILER_HAS_TRAIT(TRAIT) \ Z_IS_TRUE(Z_COMPILER_HAS_TRAIT_##TRAIT) #define Z_COMPILER_HAS_TYPE(TYPE) \ Z_IS_TRUE(Z_COMPILER_HAS_TYPE_##TYPE) #define Z_COMPILER_ATTRIBUTE(ATTRIBUTE) \ Z_COMPILER_ATTRIBUTE_##ATTRIBUTE #define Z_COMPILER_CONSTANT(CONSTANT) \ Z_COMPILER_CONSTANT_##CONSTANT #define Z_COMPILER_FUNCTION(FUNCTION) \ Z_COMPILER_FUNCTION_##FUNCTION #define Z_COMPILER_LITERAL(LITERAL) \ Z_COMPILER_LITERAL_##LITERAL #define Z_COMPILER_MACRO(MACRO) \ Z_COMPILER_MACRO_##MACRO #define Z_COMPILER_MAGIC_CONSTANT(MAGIC_CONSTANT) \ Z_COMPILER_MAGIC_CONSTANT_##MAGIC_CONSTANT #define Z_COMPILER_TRAIT(TRAIT) \ Z_COMPILER_TRAIT_##TRAIT #define Z_COMPILER_TYPE(TYPE) \ Z_COMPILER_TYPE_##TYPE #ifdef Z_COMPILER_HEADER # include Z_COMPILER_HEADER #else # ifndef Z_COMPILER # include # endif /*# if Z_COMPILER == Z_COMPILER_ACC # include # elif Z_COMPILER == Z_COMPILER_ADAPTIVE_CPP # include # elif Z_COMPILER == Z_COMPILER_ALTIUM_C_TO_HARDWARE # include # elif Z_COMPILER == Z_COMPILER_ALTIUM_MICROBLAZE_C # include # elif Z_COMPILER == Z_COMPILER_AMSTERDAM_COMPILER_KIT # include # elif Z_COMPILER == Z_COMPILER_APPLE_CLANG # include # elif Z_COMPILER == Z_COMPILER_ARM_C_CPP_COMPILER # include # elif Z_COMPILER == Z_COMPILER_ARM_COMPILER # include # elif Z_COMPILER == Z_COMPILER_AZTEC_C # include # elif Z_COMPILER == Z_COMPILER_BCC # include */ # if Z_COMPILER == Z_COMPILER_CC65 # include # elif Z_COMPILER == Z_COMPILER_CLANG # include /*# elif Z_COMPILER == Z_COMPILER_CODE_WARRIOR # include # elif Z_COMPILER == Z_COMPILER_COMEAU_CPP # include # elif Z_COMPILER == Z_COMPILER_COMPAQ_C_CPP # include # elif Z_COMPILER == Z_COMPILER_COMPCERT # include # elif Z_COMPILER == Z_COMPILER_CONVEX_C # include # elif Z_COMPILER == Z_COMPILER_COVERITY_C_CPP_STATIC_ANALYZER # include # elif Z_COMPILER == Z_COMPILER_CRAY_C # include # elif Z_COMPILER == Z_COMPILER_DIAB_C_CPP # include # elif Z_COMPILER == Z_COMPILER_DICE_C # include # elif Z_COMPILER == Z_COMPILER_DIGITAL_MARS # include # elif Z_COMPILER == Z_COMPILER_DJGPP # include # elif Z_COMPILER == Z_COMPILER_EDG_CPP_FRONTEND # include # elif Z_COMPILER == Z_COMPILER_EKOPATH # include # elif Z_COMPILER == Z_COMPILER_FUJITSU_CPP # include */ /*# elif Z_COMPILER == Z_COMPILER_GCC*/ # elif Z_COMPILER == Z_COMPILER_GCC || Z_COMPILER == Z_COMPILER_MINGW_W64 || Z_COMPILER == Z_COMPILER_MINGW # include /*# elif Z_COMPILER == Z_COMPILER_GREEN_HILL_C_CPP # include # elif Z_COMPILER == Z_COMPILER_HP_ACPP # include # elif Z_COMPILER == Z_COMPILER_HP_ANSI_C # include # elif Z_COMPILER == Z_COMPILER_HP_UPC # include # elif Z_COMPILER == Z_COMPILER_IAR_C_CPP # include # elif Z_COMPILER == Z_COMPILER_IBM_XL_C_CPP # include # elif Z_COMPILER == Z_COMPILER_IBM_Z_OS_C_CPP # include # elif Z_COMPILER == Z_COMPILER_IMAGECRAFT_C # include # elif Z_COMPILER == Z_COMPILER_INTEL_CPP # include # elif Z_COMPILER == Z_COMPILER_JCC # include # elif Z_COMPILER == Z_COMPILER_KAI_CPP # include # elif Z_COMPILER == Z_COMPILER_KEIL_C166 # include # elif Z_COMPILER == Z_COMPILER_KEIL_C51 # include # elif Z_COMPILER == Z_COMPILER_KEIL_CARM # include # elif Z_COMPILER == Z_COMPILER_LCC # include # elif Z_COMPILER == Z_COMPILER_MCC # include # elif Z_COMPILER == Z_COMPILER_METAWARE_HIGH_C_CPP # include # elif Z_COMPILER == Z_COMPILER_MICROTEC_C_CPP # include # elif Z_COMPILER == Z_COMPILER_MINGW # include # elif Z_COMPILER == Z_COMPILER_MINGW_W64 # include # elif Z_COMPILER == Z_COMPILER_MIPS_PRO # include # elif Z_COMPILER == Z_COMPILER_MIRACLE_C # include # elif Z_COMPILER == Z_COMPILER_MPW_CPP # include # elif Z_COMPILER == Z_COMPILER_MSC # include */ # elif Z_COMPILER == Z_COMPILER_MSVC # include /*# elif Z_COMPILER == Z_COMPILER_NDP_C # include # elif Z_COMPILER == Z_COMPILER_NORCROFT_C # include # elif Z_COMPILER == Z_COMPILER_NVC # include # elif Z_COMPILER == Z_COMPILER_NWCC # include # elif Z_COMPILER == Z_COMPILER_OPEN64 # include # elif Z_COMPILER == Z_COMPILER_ORACLE_PRO_C_PRECOMPILER # include # elif Z_COMPILER == Z_COMPILER_ORACLE_SOLARIS_STUDIO # include # elif Z_COMPILER == Z_COMPILER_PACIFIC_C # include # elif Z_COMPILER == Z_COMPILER_PALM_C_CPP # include # elif Z_COMPILER == Z_COMPILER_PCC # include # elif Z_COMPILER == Z_COMPILER_PELLES_C # include # elif Z_COMPILER == Z_COMPILER_PGI_C_CPP # include # elif Z_COMPILER == Z_COMPILER_RENESAS_C_CPP # include # elif Z_COMPILER == Z_COMPILER_SAS_C # include # elif Z_COMPILER == Z_COMPILER_SCCZ80 # include # elif Z_COMPILER == Z_COMPILER_SDCC # include # elif Z_COMPILER == Z_COMPILER_SNC # include # elif Z_COMPILER == Z_COMPILER_SYMANTEC_CPP # include # elif Z_COMPILER == Z_COMPILER_SYSTEMS_C # include # elif Z_COMPILER == Z_COMPILER_TENDRA # include # elif Z_COMPILER == Z_COMPILER_THINK_C # include # elif Z_COMPILER == Z_COMPILER_TI_C_CPP_COMPILER # include */ # elif Z_COMPILER == Z_COMPILER_TINY_CC # include /*# elif Z_COMPILER == Z_COMPILER_TURBO_C # include # elif Z_COMPILER == Z_COMPILER_TURBO_CPP # include # elif Z_COMPILER == Z_COMPILER_ULTRA_C_CPP # include # elif Z_COMPILER == Z_COMPILER_USL # include # elif Z_COMPILER == Z_COMPILER_VBCC # include # elif Z_COMPILER == Z_COMPILER_VOS_C # include # elif Z_COMPILER == Z_COMPILER_VOS_STANDARD_C # include # elif Z_COMPILER == Z_COMPILER_WATCOM_C_CPP # include # elif Z_COMPILER == Z_COMPILER_ZORTECH_CPP # include */ # elif Z_COMPILER == Z_COMPILER_UNKNOWN # include # else # error "Invalid `Z_COMPILER` key." # endif #endif #include #ifdef Z_COMPILER_BIT_FIELD_ORDER_ALL # define Z_COMPILER_BIT_FIELD_ORDER(bits) Z_COMPILER_BIT_FIELD_ORDER_ALL #else # define Z_COMPILER_BIT_FIELD_ORDER(bits) Z_COMPILER_BIT_FIELD_ORDER_##bits##BIT #endif #ifndef Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_STRUCT # define Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_STRUCT #endif #ifndef Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_TYPE # define Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_TYPE #endif #ifndef Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_BODY # define Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_BODY #endif #ifndef Z_COMPILER_PACKED_NAMED_STRUCTURE_AFTER_BODY # define Z_COMPILER_PACKED_NAMED_STRUCTURE_AFTER_BODY #endif #ifndef Z_COMPILER_PACKED_NAMED_UNION_BEFORE_UNION # define Z_COMPILER_PACKED_NAMED_UNION_BEFORE_UNION #endif #ifndef Z_COMPILER_PACKED_NAMED_UNION_BEFORE_TYPE # define Z_COMPILER_PACKED_NAMED_UNION_BEFORE_TYPE #endif #ifndef Z_COMPILER_PACKED_NAMED_UNION_BEFORE_BODY # define Z_COMPILER_PACKED_NAMED_UNION_BEFORE_BODY #endif #ifndef Z_COMPILER_PACKED_NAMED_UNION_AFTER_BODY # define Z_COMPILER_PACKED_NAMED_UNION_AFTER_BODY #endif #ifndef Z_COMPILER_PACKED_STRUCTURE_BEFORE_STRUCT # define Z_COMPILER_PACKED_STRUCTURE_BEFORE_STRUCT #endif #ifndef Z_COMPILER_PACKED_STRUCTURE_BEFORE_BODY # define Z_COMPILER_PACKED_STRUCTURE_BEFORE_BODY #endif #ifndef Z_COMPILER_PACKED_STRUCTURE_AFTER_BODY # define Z_COMPILER_PACKED_STRUCTURE_AFTER_BODY #endif #ifndef Z_COMPILER_PACKED_UNION_BEFORE_UNION # define Z_COMPILER_PACKED_UNION_BEFORE_UNION #endif #ifndef Z_COMPILER_PACKED_UNION_BEFORE_BODY # define Z_COMPILER_PACKED_UNION_BEFORE_BODY #endif #ifndef Z_COMPILER_PACKED_UNION_AFTER_BODY # define Z_COMPILER_PACKED_UNION_AFTER_BODY #endif #endif /* Z_inspection_compiler_H */