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); }