Forum: Mikrocontroller und Digitale Elektronik Keil: Fehlende Initialisierer werden nicht erkannt


von StinkyWinky (Gast)


Lesenswert?

Hallo Gemeinde

Der Keil-Compiler merkt nicht, wenn Initialisierer fehlen:
1
typedef struct
2
{
3
  uint16_t Var1;
4
  uint16_t Var2;
5
  uint32_t Var3;
6
} T_Struktur;
7
8
static T_Struktur MyStruct[3] = {{1,2},{4,5},{7,8}};

Geht ohne Murren durch. Gibt es da noch eine Option, die ich übersehen 
habe, damit ich eine Warnung bekomme?

Folgender Compiler Control String:
1
-c --device DLM -g -O1 --apcs=interwork -I..\source\inc
2
-IC:\StellarisWare\inc -IC:\StellarisWare -IC:\StellarisWare\driverlib
3
-I "C:\Keil\ARM\INC\Luminary" -o "..\obj\*.o" --omf_browse "..\obj\*.crf"

Toolchain:
1
µVision3 V3.76
2
3
Tool Version Numbers:
4
Toolchain:        RealView MDK BASIC (256K)  Version: 3.42a
5
Toolchain Path:    BIN40\
6
C Compiler:         Armcc.Exe       V4.0.0.484
7
Assembler:          Armasm.Exe       V4.0.0.484
8
Linker/Locator:     ArmLink.Exe       V4.0.0.484
9
Librarian:             ArmAr.Exe       V4.0.0.484
10
Hex Converter:      FromElf.Exe       V4.0.0.484
11
CPU DLL:               SARMCM3.DLL       V3.42a
12
Dialog DLL:         DLM.DLL       V1.15
13
Target DLL:             BIN\lmidk-agdi.dll       V???
14
Dialog DLL:         TLM.DLL       V1.16

von Peter D. (peda)


Lesenswert?

StinkyWinky schrieb:
> Geht ohne Murren durch.

Muß es auch lt. C-Standard.
Fehlende Elemente werden automatisch mit 0 belegt.

Bei einem lokalen Array reicht es, nur eine 0 zu schreiben, dann wird 
das komplette Array genullt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Muß es auch lt. C-Standard.

Wobei Warnungen durch den Standard nicht genormt sind.  Siehe
-Wmissing-field-initializers beim GCC.
1
% gcc -Wall -Wextra -c foo.c
2
foo.c:10:1: warning: missing initializer [-Wmissing-field-initializers]
3
foo.c:10:1: warning: (near initialization for 'MyStruct[0].Var3') [-Wmissing-field-initializers]
4
foo.c:10:1: warning: missing initializer [-Wmissing-field-initializers]
5
foo.c:10:1: warning: (near initialization for 'MyStruct[1].Var3') [-Wmissing-field-initializers]
6
foo.c:10:1: warning: missing initializer [-Wmissing-field-initializers]
7
foo.c:10:1: warning: (near initialization for 'MyStruct[2].Var3') [-Wmissing-field-initializers]
8
foo.c:10:19: warning: 'MyStruct' defined but not used [-Wunused-variable]

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.