jak w tym przykładzie (w C)Stosując sizeof na typedef zamiast zmiennej lokalnej
typedef int type;
int main()
{
char type;
printf("sizeof(type) == %zu\n", sizeof(type)); // Outputs 1
}
wyjście jest zawsze wielkość zmiennej lokalnej type
.
Kiedy C++ usuwa potrzebę napisania struct
przed każdym użyciem struktury nadal zachowane składnię struct {type}
i wprowadzono alias (class {type}
) jednoznacznie odnoszą się do struktury lub klasy.
Przykład (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
}
pytanie jest, jeśli jest to sposób wyraźnie odnosi się do typedef
w języku C i C++. Coś jak może sizeof(typedef type)
(ale to nie działa).
Wiem, że powszechną praktyką jest używanie różnych konwencji nazewnictwa dla zmiennych i typów w celu uniknięcia tego rodzaju sytuacji, ale chciałbym się dowiedzieć, czy istnieje sposób wewnątrz języka, aby to zrobić, lub jeśli nie ma takiej możliwości. :)
Twój typ-plik-zakres oraz obiekt "char" z blokiem mają tę samą nazwę. Poprawka polega na zmianie nazwy jednego z nich, aby można było się do nich odnieść jednoznacznie. ("typ" to i tak niewłaściwa nazwa dla typu, chyba że faktycznie reprezentuje typ, np. w kodzie implementującym kompilator lub interpreter). –
to nie będzie czysto kompilować z powodu tego wiersza: char type; który staje się char int; który podniesie alias lub ostrzeżenie o maskowaniu.W każdym przypadku printf zawsze używa zmiennej lokalnej "type" – user3629249