Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

WiseLord, значительно удобней написать где-нибудь в заголовочном файле, который все включают:

Код: Выделить всё

#define _U_    __attribute__((__unused__))
Тогда [временно] ненужные аргументы обозначаются просто:

Код: Выделить всё

type function(_U_ int arg1, _U_ int arg2, double arg3)...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="jcxz",url="/forum/viewtopic.php?p=3712095#p3712095"][uquote="ПростоНуб",url="/forum/viewtopic.php?p=3711925#p3711925"]jcxz, тут я с Вами не согласен. Простейший пример. Имеем таблицу указателей на функции. Пусть у функции один параметр. Причем части функций этот параметр просто не нужен, хотя остальные функции без него обойтись не могут. Получаем два варианта решения:
1. Игнорируем конкретное предупреждение о неиспольуемом значении параметра:[/uquote]
А в чём несогласны-то и почему? И зачем игнорировать если мы точно знаем что вызываем правильно - значит можно просто привести указатель к нужному типу и избавиться от варнинга.[/uquote]
Вы вообще о чем? О каком указателе и о каком типе речь?
Реклама
Мудрый кот
Сообщения: 1845
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3712109#p3712109"]Вы вообще о чем? О каком указателе и о каком типе речь?[/uquote]А Вы о чём? Я о вашем комменте моего поста. С рассказом про разные указатели на функции. Не вижу там причин почему не нужно избавляться от варнингов.
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3712082#p3712082"]приходится добавлять __attribute__ ((fallthrough)) в нужных местах (а то и макрос определять, если собираться это будет в разных версиях gcc)[/uquote]его комментарием можно подавить

Код: Выделить всё

switch(foo){
    case FOO_VAL1:
        do_something1();
        break;
    case FOO_VAL2:
        do_something2();
        // FALLTHROUGH
    case FOO_VAL3:
        do_something3();
    default:
        do_default_stuff();
}
https://gcc.gnu.org/onlinedocs/gcc/Warn ... allthrough
Спойлер
it is also possible to add a fallthrough comment to silence the warning. The whole body of the C or C++ style comment should match the given regular expressions listed below. The option argument n specifies what kind of comments are accepted:

-Wimplicit-fallthrough=0 disables the warning altogether.
-Wimplicit-fallthrough=1 matches .* regular expression, any comment is used as fallthrough comment.
-Wimplicit-fallthrough=2 case insensitively matches .*falls?[ \t-]*thr(ough|u).* regular expression.
-Wimplicit-fallthrough=3 case sensitively matches one of the following regular expressions:
-fallthrough
@fallthrough@
lint -fallthrough[ \t]*
[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?
[ \t.!]*(Else,? |Intentional(ly)? )?
Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?
[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?
-Wimplicit-fallthrough=4 case sensitively matches one of the following regular expressions:
-fallthrough
@fallthrough@
lint -fallthrough[ \t]*
[ \t]*FALLTHR(OUGH|U)[ \t]*
-Wimplicit-fallthrough=5 doesn’t recognize any comments as fallthrough comments, only attributes disable the warning.

The comment needs to be followed after optional whitespace and other comments by case or default keywords or by a user label that precedes some case or default label.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Eddy_Em, проблема в том, что это исключительно конструкция GCC. В стандарте даже упоминания о таком нет. Тогда как #pragma стандартом специально зарезервирована для подобных применений. Если потребуется, например, на Clang переползать, что делать будете?

Добавлено after 39 seconds:
jcxz, хватит смешить народ и прочитайте, что написал я, а куда понесло Вас )))
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Открываем стандарт С++17. Проблема ПростоНуб рашается [[maybe_unused]], а проблема Eddy_Em через [[fallthrough]]. И если для STM8 я могу понять "страдальцев", то тех кто сидя на GCC жалуется ну никак не понимаю.
Реклама
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

сидя на gcc все равно хорошо бы писать переносимые конструкции.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

С++17 для ARM поддерживает не только GCC.
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

для ARM.
ну и мы вроде как про C говорим, нет?)
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

В теме запрещены разговоры про С++? Я просто смотрю на проблему с другой стороны.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3712178#p3712178"]Открываем стандарт С++17.[/uquote]
При чем здесь кресты? Эмбеддеры на крестах не пишут! Кресты нужны исключительно для создания GUI на ненужной Qt!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

VladislavS, я же Вам уже писал, что C++17 для продуктива пока не готов. Не надо бежать впереди паровоза. И мои проблемы не надо решать, так как я их давно решил при помощи pragma, что совместимо даже с C89/90.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3712224#p3712224"][uquote="VladislavS",url="/forum/viewtopic.php?p=3712178#p3712178"]Открываем стандарт С++17.[/uquote]
При чем здесь кресты? Эмбеддеры на крестах не пишут! Кресты нужны исключительно для создания GUI на ненужной Qt![/uquote]
Тебя забыли спросить :)

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3712230#p3712230"]VladislavS, я же Вам уже писал, что C++17 для продуктива пока не готов. Не надо бежать впереди паровоза. И мои проблемы не надо решать, так как я их давно решил при помощи pragma, что совместимо даже с C89/90.[/uquote]
Как язык может быть не готов? С++17 и через 10 лет останется С++17. Это вы к нему не готовы.
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

VladislavS, нет ни одного компилятора, способного со включенным режимом C++17 скомпилировать проекты, успешно компилируемые в режиме C++11
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Во-первых, стандарт языка то тут причём? Во-вторых, я, например, пользуюсь компилятором у которого нет выбора стандарта - либо С, либо С++ все до 17-го.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Стандарт языка хотя бы при том, что, скажем, констркукции из С99 будут неправильными в С89. А конструкции С77 неверны в С11.
Я как-то убил неделю и вылизал все ошибки, связанные с компилированием девятым g++ древнего крестового кода (можешь посмотреть на гитхабе RTS2). Заодно несколько грубых ошибок исправил. А Кубанек - основной автор RTS2 - отказался пулриквест принять, мотивируя это тем, что у него на половине железок четвертый g++ ! После этого я понял, что RTS2 нельзя использовать, и нужно писать свой велосипед. Заодно он будет на кошерной сишечке, а не дебильных крестах!
Так вот, по теме: с опциями -Wall -Werror -Wextra код, который вроде как нормально просвистывал по стандарту крестов 99 года, по стандарту 11 выдавал дикое количество ошибок! А по стандарту 17 это вообще было нечто...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Ну всё верно, язык совершенствуется. Он ловит больше гадостей в коде - надо только радоваться.

Тот же fallthrough, о котором вы сами сегодня заговорили. Ну разве плохо, что компилятор спросит не забыл ли я там break?
Последний раз редактировалось VladislavS Чт окт 03, 2019 20:52:56, всего редактировалось 1 раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

VladislavS, я без понятия каким компилятором Вы пользуетесь, но, например, GCC реализовал полную поддержку C++17 только в 8-ой версии, тогда как многие проекты до сих пор с 5.4 выбраться не могут, а редкие прешли на 7.x только в прошлом или этом годах. На 8.x я вообще ни одного крупного проекта не видел.
Red Hat до сих пор на 5.4, Ubuntu сумели в прошлом году переползти на 7.3, MinGW тоже стабильно работает только на 7.4 максимум.
Можете назвать хотя бы один крупный проект на GCC 8.X, не говоря уже о 9.X?
Или хотите на примере другого компилятора рассмотреть масштаб бедствия?
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Вы темой не ошиблись случайно? "Список форумов » Микроконтроллеры и ПЛИС » Разные вопросы по МК » Вопросы по С/С++ (СИ)". Я когда Ubuntu на кортексе соберусь запустить в следующий раз обязательно обращусь.
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3712252#p3712252"]основной автор RTS2 - отказался пулриквест принять, мотивируя это тем, что у него на половине железок четвертый g++ ! После этого я понял, что RTS2 нельзя использовать, и нужно писать свой велосипед[/uquote]берешь и форкаешь, лицензия позволяет. Чо сразу велосипедить-то?)
Ответить

Вернуться в «Разные вопросы по МК»