Siro
27.07.2010, 16:14
ich habe eine Merkwürdigkeit mit meinem C-COMPILER von IAR
Ein void pointer ist meiner Meinung nach zu allen Typen kompatibel.
deshalb wird der folgende code auch einwandfrei compiliert.
int x;
void write(void* address)
{
}
void main(void)
{
write(&x);
}
wenn ich aber
int volatile x;
schreibe, bekomme ich vom Compiler eine Fehlermeldung:
argument of type "int volatile *" is incompatible with parameter of type "void"
wie kommt das denn ?, Ich übergebe doch nur die Adresse der Variablen.
Das "volatile" soll doch nur den Compiler vor Optimierungen zurück halten.
wenn ich dann eine explizite Typenwandlung vornehme, ist die Welt wieder in Ordnung. Dabei scheint es egal zu sein, wie ich den pointer "caste"
write((int*) &x);
ich kann auch
write((char*) &x);
schreiben.
aber wozu brauche ich denn dieses "Casting" überhaupt, wenn eine Variable volatile definiert ist ?
mfg. Siro
vielleicht kann mal jemand die paar Zeilen mit einem GNU Compiler testen, ob dort auch eine Fehlermeldung ausgegeben wird. Vielen Dank für Eure Mühe im voraus.
Ein void pointer ist meiner Meinung nach zu allen Typen kompatibel.
deshalb wird der folgende code auch einwandfrei compiliert.
int x;
void write(void* address)
{
}
void main(void)
{
write(&x);
}
wenn ich aber
int volatile x;
schreibe, bekomme ich vom Compiler eine Fehlermeldung:
argument of type "int volatile *" is incompatible with parameter of type "void"
wie kommt das denn ?, Ich übergebe doch nur die Adresse der Variablen.
Das "volatile" soll doch nur den Compiler vor Optimierungen zurück halten.
wenn ich dann eine explizite Typenwandlung vornehme, ist die Welt wieder in Ordnung. Dabei scheint es egal zu sein, wie ich den pointer "caste"
write((int*) &x);
ich kann auch
write((char*) &x);
schreiben.
aber wozu brauche ich denn dieses "Casting" überhaupt, wenn eine Variable volatile definiert ist ?
mfg. Siro
vielleicht kann mal jemand die paar Zeilen mit einem GNU Compiler testen, ob dort auch eine Fehlermeldung ausgegeben wird. Vielen Dank für Eure Mühe im voraus.