Enhanced C-Language Compatibility
The Enhanced C-Language Compatibility option changes a few compiler behaviors of the C# language in order to more easily port C code. These mainly affect compatibility between integers, booleans and pointers. It is controlled via the #pragma ccompatibility on
Compiler Directive.
This option is not intended for general use, but for specific sections of code ported from the C language. It's effects are:
- Integers, Pointers and and Floats become compatible with boolean, where
0
ornull
equals false. This e.g. allows pointers to be used as an if condition, as one would in classic C, C++ or Objective-C:
if (myObject) // runs only if myObject is not nil
{
}
-
Method pointers become assignment compatible with Blocks, if the target is a block type.
-
Otherwise incompatibility pointer become assignment compatible without type checks. For example an
Integer*
can be assigned to aFloat*
, or vie versa. -
The value Literal
0
becomes assignment compatible with enums and unmanaged pointers (essentially, it is treated as equivalent tonull
/nil
.