Я не уверен, что это будет полностью правильно в стандартном C ++, но я протестировал с g++ -pedantic -Wall
и не получил ошибок или предупреждений (обратите внимание, что это не обязательно означает, что он полностью стандартный. G ++, даже с -pedantic , не сталкивается с проблемой предупреждения всех нестандартных кодов.) (Кто-то знает спецификацию c ++ достаточно хорошо, чтобы прокомментировать, является ли она на самом деле стандартной или нет?)
вещь с надписью:
struct person person = {...};
означает, что в C ++ person
относится и к переменной, и к типу. В C это не было проблемой просто потому, что person
не тип (struct person
есть). Хотя из контекста, с несколькими тестами, которые я написал с g ++, у компилятора не было проблем с пониманием, когда я запрашиваю переменную и когда для типа, я думаю, что в какой-то момент это может запутаться. Одна запутанная вещь, которую я обнаружил, заключается в том, что если у вас есть:
struct person *person = ...;
затем sizeof(person)
возвращает размер переменной, в то время как для получения размера типа вы должны написать sizeof(struct person)
, что, я могу вас заверить, ни один кодер c ++ не помнит, чтобы написать stuct
.
Лучше всего избегать всех видов путаницы. Я обычно делаю это для кода, который можно использовать как в C, так и в C ++:
typedef struct person
{
...
} person;
Задание имени для структуры, которая является typedef
ed, позволяет программисту использовать person
или struct person
. Итак, немного гибкости (не говоря уже о том, что вам не нужно менять уже написанный код после typedef
с struct
.