[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f6cb47a6-45c9-ad8f-6657-90958a86c3e1@csgroup.eu>
Date: Thu, 18 Mar 2021 06:53:34 +0100
From: Christophe Leroy <christophe.leroy@...roup.eu>
To: Peter Zijlstra <peterz@...radead.org>
Cc: Ingo Molnar <mingo@...nel.org>, He Ying <heying24@...wei.com>,
frederic@...nel.org, paulmck@...nel.org, clg@...d.org,
qais.yousef@....com, johnny.chenyi@...wei.com,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] smp: kernel/panic.c - silence warnings
Le 17/03/2021 à 18:37, Peter Zijlstra a écrit :
> On Wed, Mar 17, 2021 at 06:17:26PM +0100, Christophe Leroy wrote:
>>
>>
>> Le 17/03/2021 à 13:23, Peter Zijlstra a écrit :
>>> On Wed, Mar 17, 2021 at 12:00:29PM +0100, Christophe Leroy wrote:
>>>> What do you mean ? 'extern' prototype is pointless for function prototypes
>>>> and deprecated, no new function prototypes should be added with the 'extern'
>>>> keyword.
>>>>
>>>> checkpatch.pl tells you: "extern prototypes should be avoided in .h files"
>>>
>>> I have a very strong preference for extern on function decls, to match
>>> the extern on variable decl.
>>
>> You mean you also do 'static inline' variable declarations ?
>
> That's a func definition, not a declaration. And you _can_ do static
> variable definitions in a header file just fine, although that's
> typically not what you'd want. Although sometimes I've seen people do:
>
> static const int my_var = 10;
>
> inline is an attribute that obviously doesn't work on variables.
>
>> Using the extern keyword on function prototypes is superfluous visual
>> noise so suggest removing it.
>
> I don't agree; and I think the C spec is actually wrong there (too).
>
> The thing is that it distinguishes between a forward declaration of a
> function in the same TU and an external declaration for a function in
> another TU.
>
> That is; if I see:
>
> void ponies(int legs);
>
> I expect that function to be defined later in the same TU. IOW it's a
> forward declaration. OTOH if I see:
>
> extern void ponies(int legs);
>
> I know I won't find it in this TU and the linker will end up involved.
Yes I can understand that for a .c file where you want to distinguish between forward declaration of
functions defined in the file and functions declared outside. There, it is definitely an added value.
But in .h, all functions must be defined somewhere else, otherwise you have another problem. So all
functions would have the 'extern' keyword according to your reasoning. Therefore that's just useless
and I fully agree with Checkpatch's commit that in that case that's "superfluous visual noise"
impeding readability and making it more difficult to fit the prototype on a single line.
>
> Now, the C people figured that distinction was useless and allowed
> sloppiness. But I still think there's merrit to that. And as mentioned
> earlier, it is consistent with variable declarations.
>
Powered by blists - more mailing lists