C Language Extensions
- Updated2023-02-21
- 5 minute(s) read
C Language Extensions
The LabWindows/CVI compiler has several extensions to the C language. The purpose is to make the LabWindows/CVI compiler compatible with external compilers that use common C extensions.
![]() |
Note For information about the C language extensions supported in different versions of LabWindows/CVI, visit ni.com/info and enter the following Info Code: CLangExt. |
The following table lists the supported Clang and GCC extentions:
Supported | ||
---|---|---|
C Extensions | GNU89 | C99 |
Alignment | Yes | Yes |
Alternate Keywords: __const__, __asm__, etc., for header files. | Yes | Yes |
Asm Labels: Give a name to variables and functions for __asm__ use (use __asm__ keyword only). | Yes | Yes |
Atomic Builtins: Built-in functions for atomic memory access. | Partial: all except __sync_fetch_and_nand and __sync_nand_and_fetch. | Partial: all except __sync_fetch_and_nand and __sync_nand_and_fetch. |
Attribute Syntax: Formal syntax for attributes. | Yes | Yes |
Attributes on Enumerators | Yes | Yes |
Availability Attribute | No | No |
Binary constants: Binary constants using the 0b prefix. | Yes, with warning | Yes, with warning |
Blocks | No | No |
_Bool data type | Yes | Yes |
Builtin Functions | Yes | Yes |
Builtin Macros | Yes | Yes |
C++ Comments: C++ comments are recognized. | Yes | Yes |
Case Ranges: 'case 1 ... 9' and such. | No | No |
Cast to Union: Casting to union type from any member of the union. | Yes, with warning | Yes, with warning |
Character Escapes: You can use \e as ASCII escape. | Yes | Yes |
Checks for Standard Language Features | Partial: (without c_thread_local); query extension using __has_extension. | Partial: (without c_thread_local); query extension using __has_extension. |
Checks for Type Traits | No | No |
Complex Numbers: Data types for complex numbers. | Partial, with warning | Partial, with warning |
Compound Literals: Give structures, unions or arrays as values. | Yes, with warning | Yes, with warning |
Concatenation of wide and non-wide character strings | Yes | Yes |
Conditionals: Omits the middle operand of a ?: expression. | No | No |
Constant Array Folding: Variable length arrays folded to constant arrays | Yes, with warning | Yes |
Constraints: Constraints for asm operands. | Partial: All except 'H', 's', ' ', '?', '!', '&', '%', '#', '*'. | Partial: All except 'H', 's', ' ', '?', '!', '&', '%', '#', '*'. |
Constructing Calls: Dispatching a call to another function. | No | No |
Decimal Float: Decimal Floating Types. | No | No |
Designated Inits: Labeling elements of initializers. | Yes, with warning | Yes, with warning |
Digraphs and Trigraphs | Yes | Yes |
Dollar Signs: You can use dollar signs in identifiers. | Yes | Yes |
Duplicate type qualifiers | Yes | Yes |
Empty Structures: Structures with no members. | Yes, with warning | Yes, with warning |
Escaped Newlines: Slightly looser rules for escaped newlines. | No, with warning | No, with warning |
Explicit Register Variables - Store a local variable in a register. | Yes | Yes |
Extended Asm: Assembler Instructions with C Expression Operands | No | No |
Extensions for Dynamic Analysis | No | No |
Extensions for Static Analysis | Partial: Only __noreturn__. | Partial: Only __noreturn__. |
Feature Checking Macros | Partial: __has_extension not supported. | Partial: __has_extension not supported. |
Fixed-Point: Fixed-Point Types. | No | No |
Flexible Array: Members at the end of a structure or union. | Yes, with warning | Yes |
Floating Types: Additional Floating Types | No | No |
Format String Checking | Yes | Yes |
Function Attributes: Declaring that functions have no side effects, or that they can never return. | Yes | Yes |
Function Names: Printable strings which are the name of the current function. | Yes | Yes |
Function Overloading in C | Yes | Yes |
Function Prototypes: Prototype declarations and old-style definitions. | Yes, with warning | Yes, with warning |
Hex Floats: Hexadecimal floating-point constants. | Yes, with warning | Yes |
Include File Checking Macros | Yes | Yes |
Incomplete Enums: enum foo;, with details to follow. | Yes, with warning | Yes, with warning |
Initializer lists for complex numbers in C | No | No |
Initializers: Non-constant initializers. | Yes | Yes |
Inline: Defining inline functions (as fast as macros). | Yes | Yes |
Integer Constant Expression Folding: Expressions that are folded to integer constants | Yes, with warning | Yes, with warning |
Labels as Values: Getting pointers to labels, and computed gotos. | No | No |
Local Labels: Labels local to a block. | No | No |
Long Long: Double-word integers, long long int. |
Yes, with warning | Yes |
Messages on deprecated and unavailable Attributes | Yes | Yes |
Mixed Declarations: Mixing declarations and code. | Yes, with warning | Yes |
Nested Functions: As in Algol and Pascal, lexical scoping of functions. | No | No |
New limit for #line directive | Yes | Yes |
Non-standard C++11 Attributes | No | No |
Object Size Checking: Built-in functions for limited buffer overflow checking. | Yes | Yes |
Objective-C Features | No | No |
Offsetof: Special syntax for implementing offsetof. | Yes | Yes |
Other Builtins: Other built-in functions. | Partial | Partial |
Pointer Arithmetic: Arithmetic on void-pointers and function pointers. | No | No |
Pragmas: Pragmas accepted by GCC | Yes | Yes |
_Pragma preprocessing operator | Yes | Yes |
Return Address: Getting the return or frame address of a function. | Yes | Yes |
snprintf family of functions | Yes | Yes |
Statement Expressions: Putting statements and declarations inside expressions. | No | No |
Static arrays as function parameters | Yes, with warning | Yes |
Subscripting: Any array can be subscripted, even if not an lvalue. | Yes | Yes |
Target Builtins: Built-in functions specific to particular targets. | No | No |
Target Format Checks: Format checks specific to particular targets. | No | No |
Target-Specific Extensions | No | No |
Thread-Local: Per-thread variables. | Yes | Yes |
Thread-Safety Annotation Checking | No | No |
Trailing comma allowed in enum declaration | Yes, with warning | Yes |
Type Attributes: Specifying attributes of types. | Yes | Yes |
Typeof: typeof, referring to the type of an expression. | No | No |
Type-generic math | No | No |
Type Safety Checking | No | No |
Unnamed Fields: Unnamed struct/union fields within structs/unions. | Yes, with warning | Yes, with warning |
User-Specified System Frameworks | No | No |
Variable Attributes: Specifying attributes of variables. | Partial: All except shared and __gcc_struct__. | Partial: aligned attribute supported. |
Variable Length: Arrays whose length is computed at run time. | Yes, with warning | Yes, with warning |
Variadic Macros: Macros with a variable number of arguments. | Yes, with warning | Yes |
Vector Extensions: Using vector instructions through built-in functions. | Yes | Yes |
Vectors and Extended Vectors | Partial | Partial |
vscanf family of functions | Yes | Yes |
Zero Length: Zero-length arrays. | Yes, with warning | Yes, with warning |