ForNeVeR / Cesium

C compiler for the CLI platform
MIT License
348 stars 39 forks source link

Drop special treatment of functions with the empty parameter list #556

Open ForNeVeR opened 5 months ago

ForNeVeR commented 5 months ago

C23 has dropped the requirement of special treatment for the functions with empty parameter list, such as:

void foo();

In previous versions of the standard, this would introduce a function declaration with a lax parameter list, meaning the caller can call it while passing any parameters.

In C23, this is no longer the case, and declarations such as void foo(); and void foo(void); are strictly identical: they declare a function with no parameters.

For a summary of changes, see Annex M, M.2 Fifth Edition:

Major changes in this fifth edition (__STDC_VERSION__ 202311L) include:

  • mandated function declarations whose parameter list is empty be treated the same as a parameter list which only contain a single void;

See also proposal N2841 that's been accepted.

This unfortunate behavior has been causing a fair amount of pain for implementing the previous standard versions in Cesium, so I am glad we could finally drop it.

kant2002 commented 5 months ago

I would say we need a switch to support old scenario.

ForNeVeR commented 5 months ago

I'd say it already costs us a lot of resources in proper support.

Maybe we can implement some easy workaround instead, like ignoring the argument lists for these functions completely (with a switch).