Wie in diesem Beispiel (in C):Mit sizeof auf einem typedef statt einer lokalen Variablen
typedef int type;
int main()
{
char type;
printf("sizeof(type) == %zu\n", sizeof(type)); // Outputs 1
}
Der Ausgang ist immer die Größe der lokalen Variablen type
.
Wenn C++ die Notwendigkeit entfernt struct
vor jedem Gebrauch einer Struktur zu schreiben, es immer noch die erhaltenen struct {type}
Syntax und stellte einen Alias (class {type}
) explizit auf eine Struktur oder eine Klasse zu beziehen.
Beispiel (in C++):
struct type {
int m;
};
int main()
{
char type;
printf("sizeof(type) == %u\n", sizeof(type)); // Outputs 1
printf("sizeof(struct type) == %u\n", sizeof(struct type)); // Outputs 4
printf("sizeof(class type) == %u\n", sizeof(class type)); // Outputs 4
}
Meine Frage ist, ob es einen Weg gibt, um explizit auf eine typedef
in C oder C++ zu beziehen. Etwas wie sizeof(typedef type)
vielleicht (aber das funktioniert nicht).
Ich weiß, dass es üblich ist, verschiedene Namenskonventionen für Variablen und Typen zu verwenden, um diese Art von Situationen zu vermeiden, aber ich würde gerne wissen, ob es einen Weg in der Sprache gibt, oder nicht. :)
Ihr Dateibereich typedef und Ihr block-scope 'char' Objekt haben denselben Namen. Die Lösung besteht darin, einen von ihnen umzubenennen, damit Sie eindeutig auf sie verweisen können. ("type" ist sowieso ein schlechter Name für einen Typ, es sei denn, es stellt tatsächlich einen Typ dar, z. B. im Code, der einen Compiler oder Interpreter implementiert.) –
Dies wird aufgrund dieser Zeile nicht sauber kompiliert: char type; was wird char int; Dies wird entweder eine Alias- oder eine Maskierungswarnung auslösen.In jedem Fall wird der printf immer die lokale Variable 'type' verwenden. – user3629249