What's the Consequence of Defining a Zero-Size Array in C/C ?
Defining a zero-size array, such as int array[0];, in C or C is a violation of the language standard. According to the ISO 9899:2011 standard, arrays must have a positive size greater than zero.
However, some compilers may allow such definitions without raising any errors or warnings for compatibility with legacy code that used old syntax. For instance, GCC does not complain about defining a zero-size array.
Consequences of Zero-Size Arrays
Despite the lack of compiler errors, defining a zero-size array will result in undefined behavior. The array will not be allocated any memory, and any attempt to access or use it will likely lead to crashes or unpredictable outcomes.
Practical Implications
If you encounter code that defines a zero-size array, you should treat it as an error and either fix the definition or handle the case where the size is zero.
Optimization Considerations
Zero-size arrays are not optimized out by compilers. They may still take up some space in the executable file, as some compilers may reserve a small amount of memory for compatibility purposes.
Alternate Use for Zero-Size Arrays
In some cases, zero-size arrays can be used as a degenerate case in structures for tail padding. This technique is used to ensure that structures have a particular alignment or to pad trailing members. However, this use of zero-size arrays is a specialized application and should not be confused with general-purpose zero-size arrays.
The above is the detailed content of What Happens When You Define a Zero-Size Array in C/C ?. For more information, please follow other related articles on the PHP Chinese website!