Sida 1 av 1
sizeof() fråga
Postat: 3 mars 2010, 19:26:07
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?
Re: sizeof() fråga
Postat: 3 mars 2010, 19:45:49
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?
Re: sizeof() fråga
Postat: 3 mars 2010, 20:00:16
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

Re: sizeof() fråga
Postat: 3 mars 2010, 20:17:53
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.
Re: sizeof() fråga
Postat: 3 mars 2010, 20:22:09
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.
Re: sizeof() fråga
Postat: 3 mars 2010, 20:23:16
av kimmen
Jag har för mig att man kan göra något liknande detta.

(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];
};
Re: sizeof() fråga
Postat: 3 mars 2010, 20:29:38
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.
Re: sizeof() fråga
Postat: 3 mars 2010, 20:38:50
av dangraf
Det var smidiga lösningar, tack! har testat och det fungerar!
Re: sizeof() fråga
Postat: 3 mars 2010, 21:08:40
av speakman
Ja det var verkligen fiffiga lösningar. Det tackar jag för och lägger på minnet.
