[LEDE-DEV] [PATCH] umdns: Replace unnecessary memset calls with {}.

Eric Luehrsen ericluehrsen at gmail.com
Sun Nov 12 20:55:01 PST 2017


On 11/12/2017 09:49 PM, rosenp at gmail.com wrote:
> On Wed, 2017-11-08 at 21:17 +0100, Arjen de Korte wrote:
>> Citeren Rosen Penev <rosenp at gmail.com>:
>>
>>> Less verbose.
>> And uses a GCC extension which makes it less portable. ISO C
>> forbids
>> empty initializer braces [1]. See for yourself by adding the
>> -pedantic
>> flag to your CFLAGS. The correct way to initialize to all-zeros is
>> therefore { 0 }.
>>
>> [1] ISO/IEC 9899:201x, paragraph 6.7.9 Initialization, clause 21
>>
>> "If there are fewer initializers in a brace-enclosed list than
>> there
>> are elements or members
>> of an aggregate, or fewer characters in a string literal used to
>> initialize an array of known
>> size  than  there  are  elements  in  the  array,  the  remainder  of
>>     
>> the  aggregate  shall  be
>> initialized implicitly the same as objects that have static storage
>> duration."
> I decided to test this with the following program.
>
>
> #include <stdio.h>
> #include <stdint.h>
> #include <string.h>
>
> int main()
> {
>          struct k {
>                  int h;
>                  int t;
>          };
>
> 	struct k z = {5};
>          printf("%d", z.t);
>
>          return 0;
> }
> ;
> 0 was printed instead of 5.
This is what should happen. It doesn't repeat a pattern. To rephrase 
ISO-C standard. If the implied initialization of COMMON or weak 
definitions is 0, then partial initialization will initialize forgotten 
elements to 0. As a consequence one quality check done in some 
organizations is expect: {0} only, maybe require curls representing 
nested depth, or all elements explicitly initialized, else any other is 
rejected.

- Eric



More information about the Lede-dev mailing list