Еще одна веская причина, чтобы всегда определять типы и структуры, вытекает из этой проблемы:
enum EnumDef
{
FIRST_ITEM,
SECOND_ITEM
};
struct StructDef
{
enum EnuumDef MyEnum;
unsigned int MyVar;
} MyStruct;
Обратите внимание на опечатку в EnumDef в структуре (Enu u mDef)? Он компилируется без ошибок (или предупреждений) и является (в зависимости от буквальной интерпретации стандарта C) правильным. Проблема в том, что я только что создал новое (пустое) определение перечисления в моей структуре. Я не использую (как предполагалось) предыдущее определение EnumDef.
При использовании typedef аналогичные типы опечаток привели бы к ошибкам компилятора при использовании неизвестного типа:
typedef
{
FIRST_ITEM,
SECOND_ITEM
} EnumDef;
typedef struct
{
EnuumDef MyEnum; /* compiler error (unknown type) */
unsigned int MyVar;
} StructDef;
StrructDef MyStruct; /* compiler error (unknown type) */
Я бы поддерживал ВСЕГДА структуры определения типов и перечисления.
Не только для сохранения некоторого набора текста (без каламбура;)), но и потому, что это безопаснее.
Ни один из ответов сверху на самом деле не работал для удаления конечных пробелов в строках utf-8.
Это решение нашло здесь работы отлично и является самым коротким:
trim($str, "\t\n\r\0\x0B\xC2\xA0");