За то, что откровенно барыжить подобными данными среди проектов сообщества не принято. Вы же не хотите, чтобы, скажем, корневая зона домен .ru продала кому-то информацию, за какими доменами Вы ходите к ним?
А может осилите отдельную крутую статью по расширениям? :) Дабы такая чудная магия не прозябала! Ведь задача тут одна — описать как можно лучше то, что в машинном коде реализуется нэтивно. И когда смотришь решения — тот же мультикейс напрашивается сам собой…
Да, согласен, увидь я что-то такое в чужом коде — удивился бы довольно сильно. Explicit better than implicit :) Спасибо, хорошая штука, приведу свой код в соотвествии с этим подходом.
cat anonumous_struct.cpp
#include <iostream>
struct outer {
struct {
int a;
};
};
int main() {
return 0;
}
Стандартный компилятор из ubutnu 14.04:
g++ -v 2>&1|grep "gcc version"
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)
g++ anonumous_struct.cpp -pedantic
anonumous_struct.cpp:6:5: warning: ISO C++ prohibits anonymous structs [-Wpedantic]
};
^
Самый новый gcc 5.3.0:
/opt/fastnetmon/libraries/gcc530/bin/g++ -v 2>&1|grep version
gcc version 5.3.0 (GCC)
Результат:
/opt/fastnetmon/libraries/gcc530/bin/g++ anonumous_struct.cpp -pedantic
anonumous_struct.cpp:6:5: warning: ISO C++ prohibits anonymous structs [-Wpedantic]
};
^
Clang:
clang++ --version
Ubuntu clang version 3.4-1ubuntu3 (tags/RELEASE_34/final) (based on LLVM 3.4)
Target: x86_64-pc-linux-gnu
Thread model: posix
Итог:
clang++ anonumous_struct.cpp -pedantic
anonumous_struct.cpp:4:5: warning: anonymous structs are a GNU extension [-Wgnu-anonymous-struct]
struct {
^
1 warning generated.
Я не верю в ошибку двух топовых С++ компиляторах одновременно. А в то, что Вы не правы — верю больше :) Если есть аргументы — прошу ссылку на стандарты, я в них плохо ориентируюсь и не могу сходу найти абзац описывающий данное поведение.
Для С++ — это экстеншен и -peadntic будет ругаться на это (вот так: «warning: ISO C++ prohibits anonymous structs [-Wpedantic]), для С99 — это дозволенная фича и он ругаться, соотвественно не будет :) Вообще я набил несколько шишек в попытках сделать то, что хочу без оверхеда по памяти: www.stableit.ru/2016/02/union-bit-fields-c.html
Ну кому нужен сахар — пишут на С++, при прочих равных и более высоком удобстве он генерирует ровно такой же по эффективности машинный код. Лично я предпочитаю С++.
Многие вещи нельзя понять, когда только начинаешь писать на С. Ну не пишут в книгах, а примеры кода на С — обычно поганейшие, потому что обычно там С 89 со всеми вытекающими. А Вот 99й стандарт просто прелесть :)
Ага, штука хорошая, самому набивать такое — тяжко. Я тут недавно озаботился обратной стороной стандартов — открыл для себя классные GNU extensions — anonymous union и struct. Жалко нет хорошего каталога расширений. Конечно, использовать вещи не из стандарта — плохо, но без указанных выше фич код становится крайне некрасивым…
Прогнал код с pedantic и получилось занятное:
То есть экстеншенов у меня аж два. Один — сам по себе анонимный struct, второй — анонимный struct внутри анонимного union (стандартного).
Хех. Столько фич на пустом месте :)
Но сама пометка __extension__ — разве в стандарте? Вообще, довольно удобная фича, надо весь свой код переписать под pedantic :)
Стандартный компилятор из ubutnu 14.04:
Самый новый gcc 5.3.0:
Результат:
Clang:
Итог:
Я не верю в ошибку двух топовых С++ компиляторах одновременно. А в то, что Вы не правы — верю больше :) Если есть аргументы — прошу ссылку на стандарты, я в них плохо ориентируюсь и не могу сходу найти абзац описывающий данное поведение.
Но главная рекомендация для поддержки крупного проекта на Perl — никогда в жизни не писать на Perl что-либо длиннее сотни строк.