sizeof() fråga

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

sizeof() fråga

Inlägg av dangraf »

Jag vill kontrollera storleken på en strukt när jag kompilerat min kod och har tidigare skrivit

Kod: Markera allt


#if sizeof(CanDivePacket) != sizeof(CanPacket)
    #error CanPacket has wrong size
#endif

Tyvär kompilerar inte koden och kompilatorn och ger felmeddelandet:
G:\embeded\trunk\Programming\com\CanDiveHelper.h:283:Error [1029] malformed expression in '#if'

finns det något annat sätt att kontrollera storleken på en strukt t.ex utan "sizeof" kommandot?
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Re: sizeof() fråga

Inlägg av speakman »

Det vore lite märkligt om preprocessorn kände till struct-storlekar. Hur vore att köra lite tester i början av programmet och blinka frenetiskt med lysdioder el dyl om något felar?
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Re: sizeof() fråga

Inlägg av dangraf »

Det är en lösning men känns ganska klumpig eftersom man behöver prorgrammera kretsen för att få reda på svaret. sizeof( nån strukt) är en konstant så jag hoppades på att det gick att lösa på något sätt innan under eller efter kompileringen. Men går det inte så får det givetvis bli den slutliga lösningen ;-)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: sizeof() fråga

Inlägg av TomasL »

finns det något annat sätt att kontrollera storleken på en strukt t.ex utan "sizeof" kommandot?
Räkna manuellt, det borde väl genereras nån form av statistikfil att kika på.
Och nej sizeof kan inte fungera i preprocessorn då variablerna och konstanterna varken är skapade eller initierade.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Re: sizeof() fråga

Inlägg av dangraf »

Jag räknar mauellt men vill vara säker på att jag gjort rätt eftersom jag gör en union med en massa variabler och vill kontrollera att man inte av misstag överskridit max-storlek. Jag vet att det inte går att använda sizeof och frågar efter en alternativ lösning.
Användarvisningsbild
kimmen
Inlägg: 2042
Blev medlem: 25 augusti 2007, 16:53:51
Ort: Stockholm (Kista)

Re: sizeof() fråga

Inlägg av kimmen »

Jag har för mig att man kan göra något liknande detta. :P (det går inte att skapa fält med negativ längd i en struct så då får man felmeddelande...)

Kod: Markera allt

typedef struct
{
	char FEL_STORLEK[(sizeof(CanDivePacket) != sizeof(CanPacket)) ? -1 : 1];
} FULING;

eller bara 

struct FULING
{
	char FEL_STORLEK[(sizeof(CanDivePacket) != sizeof(CanPacket)) ? -1 : 1];
};
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: sizeof() fråga

Inlägg av SvenW »

Pröva t.ex.

Kod: Markera allt

const char dummy = 9999*( sizeof(CanDivePacket))/sizeof(CanPacket)-1);
Kompilatorn bör då varna om overflow vid fel. I alla fall om rätt varnigsflagga är satt.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Re: sizeof() fråga

Inlägg av dangraf »

Det var smidiga lösningar, tack! har testat och det fungerar!
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Re: sizeof() fråga

Inlägg av speakman »

Ja det var verkligen fiffiga lösningar. Det tackar jag för och lägger på minnet. :)
Skriv svar