Functions declarations always start with the fn keyword; otherwise they look very similar to C. Since there are no forward declarations of any kind in C2, there is just one form of a function declaration, which is the definition:

public fn i32 main(i32 argc, char** argv) {
    return 0;

Functions may also have attributes. More information on attributes can be found here.


In C2 arrays cannot be used as function arguments, so pointers must be used instead. This is done because in C passing 'int numbers[20]' is not a copy, but a pointer to an array, which is confusing and could lead to bugs.


Default arguments (like: fn void test(i32 a = 10) {} ) are not allowed in C2.