Deutsch   English   Français   Italiano  
<vi57bh$3ip1o$2@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder8.news.weretis.net!news.swapon.de!news.mb-net.net!open-news-network.org!news.gegeweb.eu!gegeweb.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: Re: question about linker
Date: Tue, 26 Nov 2024 19:25:38 +0000
Organization: A noiseless patient Spider
Lines: 71
Message-ID: <vi57bh$3ip1o$2@dont-email.me>
References: <vi54e9$3ie0o$1@dont-email.me> <vi56hi$3ie0o$2@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 26 Nov 2024 20:25:38 +0100 (CET)
Injection-Info: dont-email.me; posting-host="7636fd12420064b14be779e92db2ffba";
	logging-data="3761208"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/pKbzWjsqIDISlgu4ArZ21"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:nw8sjoeHaXIII/Hs074DNKUY2ok=
In-Reply-To: <vi56hi$3ie0o$2@dont-email.me>
Content-Language: en-GB
Bytes: 2926

On 26/11/2024 19:11, Thiago Adams wrote:
> 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:

  void F(double);
  void G(int);

  void H(void) {
      F(0);
      G(0);
  }