:: Re: [DNG] What is the meaning of th…
Page principale
Supprimer ce message
Répondre à ce message
Auteur: Didier Kryn
Date:  
À: dng
Sujet: Re: [DNG] What is the meaning of this gcc warning?
Le 19/10/2015 16:09, Rainer Weikusat a écrit :
> Edward Bartolo <edbarx@???> writes:
>> Could someone explain to me what is the meaning of this error and what
>> I should do to avoid having this warning?
>>
>> edbarx@edbarx-pc:~/netman/backend_src/src$ gcc -Wall -Wfatal-errors -g
>> -lm -I../include core_functions.c file_functions.c backend.c
>> essid_encoder.c automated_scanner.c -o backend
>> automated_scanner.c: In function ‘autoWirelessScanPlus_RN’:
>> automated_scanner.c:521:2: warning: suggest parentheses around
>> assignment used as truth value [-Wparentheses]
>>    if ( dir = opendir(IFACES_PATH) ) {
>>    ^
> The warning really only communicates that - ca 42 years ago - some
> ... American (!!1) dared to do something Nikolaus Wirth strongly
> disapproved of, namely, make assignment an expression instead of a
> statement (something Mr Wirth already strongly(!!2) disapproved of the
> the context of Algo 68) and then didn't use the assignment operator Mr
> Wirth had approved of (!!3), namely, :=.

>
> I don't know if this is the oldest, entirely pointless "programming
> language syntax war" in existance but it's surely one of the most
> persistently annoying ones[*].
>
> [*] Sometimes, when noticing that everyone else is driving in the
>      opposite direction on a motorway, you're actually wrong yourself ...

>


     Writing  "if (a = b)" when meaning "if (a == b)" is a very easy 
mistake. Yes it is dangerous, because difficult to notice and it changes 
dramatically the behaviour of the program. Any C programmer pretending 
to never have made this mistake is a liar. Gcc authors have aknowledged 
the fact by introducing this parenthesis feature which is supposed to 
mean "yes I do mean an assignment".


     You are right, C cumulates these two features:


     1) the assignment operator is '='
     2) the assignment is an expression.


     Sure both are motivated; but the motivations are mostly aesthetical 
while the combination is an unextinguishable source of bugs. I don't 
think you can accuse the authors of gcc to make the war against the C 
language because they warn you against this possible mistake, or do you 
mean this Mr Wirth you seem to disaprove is (one of) the authors of gcc?


     Didier