Groups | Search | Server Info | Login | Register
Groups > comp.lang.c > #397322
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: gcc and 'include' |
| Date | 2026-03-31 00:26 -0700 |
| Organization | A noiseless patient Spider |
| Message-ID | <861ph01mum.fsf@linuxsc.com> (permalink) |
| References | (3 earlier) <20260327164757.00001882@yahoo.com> <86jyux2ras.fsf@linuxsc.com> <20260329114618.000039da@yahoo.com> <86a4vp1h0n.fsf@linuxsc.com> <20260330200851.00002b49@yahoo.com> |
Michael S <already5chosen@yahoo.com> writes:
> On Mon, 30 Mar 2026 08:19:52 -0700
> Tim Rentsch <tr.17687@z991.linuxsc.com> wrote:
>
>> Michael S <already5chosen@yahoo.com> writes:
>>
>>> On Fri, 27 Mar 2026 09:03:23 -0700
>>> Tim Rentsch <tr.17687@z991.linuxsc.com> wrote:
>>>
>>>> Michael S <already5chosen@yahoo.com> writes:
>>>>
>>>>> On Thu, 26 Mar 2026 19:08:16 -0700
>>>>> Tim Rentsch <tr.17687@z991.linuxsc.com> wrote:
>>>>>
>>>>>> Michael S <already5chosen@yahoo.com> writes:
>>>>>>
>>>>>>> On Thu, 26 Mar 2026 22:36:59 +0000
>>>>>>> Bart <bc@freeuk.com> wrote:
>>>>>>>
>>>>>>>> Take this program:
>>>>>>>>
>>>>>>>> #include <stdlib.h>
>>>>>>>>
>>>>>>>> inline int F(){return rand();}
>>>>>>>>
>>>>>>>> int main(void) {
>>>>>>>> return F();
>>>>>>>> }
>>>>>>>>
>>>>>>>> This compiles fine with gcc using -O1 -O2 -O3.
>>>>>>>>
>>>>>>>> But compile without optimising, and it fails to link as it
>>>>>>>> can't find a function 'F'.
>>>>>>>>
>>>>>>>> Is it supposed to behave like that? I assume no discrete
>>>>>>>> function F is being generated because of the 'inline'
>>>>>>>> attribute, but you'd think it would ignore that if
>>>>>>>> inlining wasn't enabled.
>>>>>>>>
>>>>>>>> [...]
>>>>>>>
>>>>>>> Sounds like a bug introduced during transition to c99/gnu99
>>>>>>> front end.
>>>>>>> With gcc4.x, which defaults to gnu89 it still works.
>>>>>>> Also works with the latest gcc -std=gnu89
>>>>>>> But there is no hope that gcc maintaines will ever admit that it
>>>>>>> is a bug.
>>>>>>
>>>>>> It isn't a bug. The C standard allows this behavior.
>>>>>
>>>>> So, by C standard, there is no situation in which 'inline'
>>>>> with no addition qualifuers like 'static' or 'extern' can be
>>>>> used with predictabe outcome?
>>>>
>>>> That depends on just how you mean the question. If we have this
>>>> source file
>>>>
>>>> inline int
>>>> F(){
>>>> return 0;
>>>> }
>>>>
>>>> int
>>>> main(void){
>>>> return F();
>>>> }
>>>>
>>>> then we might get an undefined reference for F(). However if we
>>>> expand that source file just slightly, to
>>>>
>>>> inline int
>>>> F(){
>>>> return 0;
>>>> }
>>>>
>>>> int
>>>> main(void){
>>>> return F();
>>>> }
>>>>
>>>> int F();
>>>>
>>>> then the program has well-defined behavior. This result obtains
>>>> because the function F() now has a declaration that is (implicitly)
>>>> external, and without specifying 'inline', in addition to the
>>>> original inline definition.
>>>
>>> It is indeed well-defined. But well-defined behavior does not
>>> match the most probable intention of programmer, which is to
>>> create a body of F() in case that it was not actually inlined and
>>> to *not* create it otherwise.
>>
>> I simply disagree. The behavior you describe is what people expect
>> for static inline functions. It doesn't make sense that they would
>> expect the same thing for non-static inline functions, if they had
>> taken some time to think about it.
>>
>>> For something like MSVC it does not matter, because by default it
>>> does not link unused functions into executive. But something like
>>> gcc by default links everything in.
>>
>> That depends on what you mean by "by default". gcc does not
>> produce an actual function body for any optimization level
>> above -O0. Surely the most common practice these days is to
>> enable some optimization level above -O0.
>
> In the comment above I was talking specifically about that:
> https://godbolt.org/z/4TazP4sq1
I don't know what you were expecting me to learn by looking at
that page. As far as I can tell it adds no information beyond
what has already been presented.
Also I'm surprised that you didn't say anything in reaction to the
first paragraph of my comments. No conclusion, just surprised.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar
gcc and 'include' Bart <bc@freeuk.com> - 2026-03-26 22:36 +0000
Re: gcc and 'include' Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-03-26 16:12 -0700
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-27 10:55 +0000
Re: gcc and 'include' David Brown <david.brown@hesbynett.no> - 2026-03-27 13:49 +0100
Re: gcc and 'include' Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-03-27 10:51 -0700
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-04-25 10:09 -0700
Re: gcc and 'include' Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-04-25 15:58 -0700
Re: gcc and 'include' Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-03-27 21:27 +0000
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-27 22:05 +0000
Re: gcc and 'include' Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-03-27 17:03 -0700
Re: gcc and 'include' Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-03-28 05:10 +0100
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-28 20:37 +0300
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-28 18:33 +0000
Re: gcc and 'include' antispam@fricas.org (Waldek Hebisch) - 2026-03-29 00:53 +0000
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-29 22:37 +0100
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-30 05:33 -0700
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-30 14:42 +0100
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-30 16:53 +0300
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-30 18:11 +0100
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-30 08:27 -0700
Re: gcc and 'include' Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-03-30 11:54 -0700
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-30 21:54 +0100
Re: gcc and 'include' Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-03-30 18:07 -0700
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-31 11:39 +0100
Re: gcc and 'include' Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-03-31 13:56 -0700
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-04-06 20:56 -0700
Re: gcc and 'include' Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-04-06 23:12 -0700
Re: gcc and 'include' James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-03-30 21:06 -0400
Re: gcc and 'include' David Brown <david.brown@hesbynett.no> - 2026-03-29 11:24 +0200
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-29 12:44 +0100
Re: gcc and 'include' David Brown <david.brown@hesbynett.no> - 2026-03-31 15:57 +0200
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-30 07:20 -0700
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-30 05:07 -0700
Re: gcc and 'include' Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-03-27 00:25 +0000
Re: gcc and 'include' Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-03-30 07:13 +0000
Re: gcc and 'include' Andrey Tarasevich <noone@noone.net> - 2026-03-30 07:54 -0700
Re: gcc and 'include' Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-03-31 01:46 +0000
Re: gcc and 'include' antispam@fricas.org (Waldek Hebisch) - 2026-03-31 05:28 +0000
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-27 04:10 +0300
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-26 19:08 -0700
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-27 16:47 +0300
Re: gcc and 'include' David Brown <david.brown@hesbynett.no> - 2026-03-27 16:43 +0100
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-27 09:03 -0700
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-29 11:46 +0300
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-30 08:19 -0700
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-30 20:08 +0300
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-31 00:26 -0700
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-31 11:27 +0300
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-04-07 09:45 -0700
Re: gcc and 'include' Andrey Tarasevich <noone@noone.net> - 2026-03-28 10:25 -0700
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-29 10:37 +0300
Re: gcc and 'include' David Brown <david.brown@hesbynett.no> - 2026-03-29 11:30 +0200
Re: gcc and 'include' Andrey Tarasevich <noone@noone.net> - 2026-03-29 07:22 -0700
Re: gcc and 'include' James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-03-29 13:56 -0400
Re: gcc and 'include' Michael S <already5chosen@yahoo.com> - 2026-03-29 21:39 +0300
Re: gcc and 'include' James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-03-29 20:08 -0400
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-30 01:58 +0100
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-30 07:59 -0700
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-26 19:06 -0700
Re: gcc and 'include' Bart <bc@freeuk.com> - 2026-03-27 16:20 +0000
Re: gcc and 'include' David Brown <david.brown@hesbynett.no> - 2026-03-27 18:07 +0100
Re: gcc and 'include' James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-03-28 18:48 -0400
Re: gcc and 'include' Andrey Tarasevich <noone@noone.net> - 2026-03-27 22:38 -0700
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-28 00:30 -0700
Re: gcc and 'include' Andrey Tarasevich <noone@noone.net> - 2026-03-29 16:15 -0700
Re: gcc and 'include' Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-03-30 00:41 -0700
csiph-web