Liste des Groupes | Revenir à cl c |
On 26/11/2024 16:25, Bart wrote:Can still sort of work:On 26/11/2024 19:11, Thiago Adams wrote:Yes..I realized now I am wrong. Considering function calls uses registers I think the old C model works only when passing everything on stack.On 26/11/2024 15:35, Thiago Adams wrote:>>>
(I think I know the answer but I would like to learn more.)
>
I am using C89 as "compiler backend intermediate language".
>
I want a very simple output that could facilitate the construction of a simple C89 compiler focused on code generation.
Another question is.. does the compiler cares about function type when calling a function or this is just an information to avoid programmers mistakes?
Yes.
>
It will need to know about types anyway so that it can generate the correct code.
>
While for function calls, different types may be passed in different registers.
>
This is less critical for 32-bit code than for 64-bit, but presumably you will want your C89 code to be compiled to 64-bit code on 64-bit machines?
>>>
Consider this code:
>
int main() {
strcmp("a", "b");
}
>
It compiles in -std=c89
>
Now changing to -std=c99 -std=c11 it gives:
>
error: implicit declaration of function 'strcmp'
>
>
Then adding:
>
int strcmp();
>
int main() {
strcmp("a", "b");
}
>
it works in C99 / C11
>
I think in C23 empty parameter list means no args, while in the previous versions (void) means no args.
>
Considering that in previous versions of C we could call a function without its signature I think the compiler only needs the caller side. (of course I am not considering programmer mistakes)
>
So, I think one extra simplification for small compilers is to ignore function parameters.
I don't think so. But you are welcome to look at godbolt.org and see for yourself. Try this for example:
Les messages affichés proviennent d'usenet.