- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
#include <stdio.h>
#include <inttypes.h>
typedef struct {uint32_t dummy;} str32;
int main (void)
{
// тут получаются нули
printf("%zu\n", sizeof( struct {uint32_t;} ) );
printf("%zu\n", sizeof( (struct {uint32_t;}){} ) );
// а тут получаются 4 как и планировалось
printf("%zu\n", sizeof( str32 ) );
printf("%zu\n", sizeof(uint32_t) );
return 0;
}
Попытки получить размер анонимной структуры. Компиляторы clang gcc icc под линупсом почему-то возвращают 0. Не может же это быть багом сразу в трех компиляторах?
то все нормально получается. Удивительно!
warning: struct has no members
Вот интересно, почему это всего лишь ворнинг...
http://melpon.org/wandbox/permlink/Bs8OSY7oTtg1spMO нет такого ворнинга у меня
Но вообще и declaration does not declare anything как бы намекает, что произошла какая-то хуйня... Интересно, зачем вообще разрешили пустые декларации без переменных. В крестах это таки ошибка.
А то знаешь, "не все члены структуры инициализируются в конструкторе". Или "вы исползуете стандартную функцию такую-то, используйте вместо неё нашу ни с чем не совместивую функцию" (это из эмэсвэцэ).
Меня больше интересует, почему функция, не возвращающая значение, является только ворнингом, да ещё и не включенным по дефолту.
Ну и сегодня этой ситуации не может быть никогда, а завтра вася добавил новое значение в енум или условие цикла поправил... Никогда не говори никогда :)
Кстати, когда-то ГЦЦ подобным образом реагировал даже на пути с abort или exit. Приходилось писать return huinya; после безусловного аборта.