Compiler User GuidePreface Overview of the Compiler Getting Started with the Compiler Compiler Features Compiler Coding Practices Compiler Diagnostic Messages Using the Inline and Embedded Assemblers of the AR Compiler Command-line Options Language Extensions Preprocessor extensions #assert #include_next #unassert #warning C99 language features available in C90 // comments Subscripting struct Flexible array members C99 language features available in C++ and C90 Variadic macros long long restrict Hexadecimal floats Standard C language extensions Constant expressions Array and pointer extensions Block scope function declarations Dollar signs in identifiers Top-level declarations Benign redeclarations External entities Function prototypes Standard C++ language extensions ? operator Declaration of a class member friend Read/write constants Scalar type constants Specialization of nonmember function templates Type conversions Standard C and Standard C++ language extensions Address of a register variable Arguments to functions Anonymous classes, structures and unions Assembler labels Empty declaration Hexadecimal floating-point constants Incomplete enums Integral type extensions Label definitions Long float Nonstatic local variables Structure, union, enum, and bitfield extensions GNU extensions to the C and C++ languages Compiler-specific Features C and C++ Implementation Details What is Semihosting? Via File Syntax Summary Table of GNU Language Extensions Standard C Implementation Definition Standard C++ Implementation Definition C and C++ Compiler Implementation Limits
Such names are in a namespace distinct from all other names, including macro names.
You can test a predicate name defined using
This has the value 1 if a
A predicate can have multiple values. That is, subsequent assertions do not override preceding assertions.
The following example assigns multiple values and shows the results
#assert foo(one) // Assigns the value "one" #assert foo(two) // Assigns the value "two" #assert foo(three) // Assigns the value "three" #unassert foo(two) // Unassigns the value "two" #if #foo(one)... // 1 #if #foo(two)... // 0, because of #unassert #if #foo(three)... // 1 #if #foo(four)... // 0, because this value was never asserted
of your data.