Liste des Groupes | Revenir à cl c |
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:Yes.>>
(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?
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?
>I don't think so. But you are welcome to look at godbolt.org and see for yourself. Try this for example:
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.
Les messages affichés proviennent d'usenet.