-
- Очевидно, что если не "#ifdef USE_FULL_ASSERT", то получается
"(void)0;", и это то самое "a non-null statement without any side
effects". Могли бы в этом случае сделать пустой макрос для
assert_param(), и нарушение уйдёт. - SciFi(23.09.2020 08:49)
- "Папа, а что такое пресс-папье?" Я с макросами никогда не работал
(и в ассемблере тоже), ибо никогда не мог (не пытался) разобраться,
как они работают. Пустой макрос как выглядит? - teap0t(23.09.2020 08:51)
- Пустой макрос "#define assert_param(expr)". Он заменяет в коде
assert_param(всякое_разное) на пустоту. Макросы -- это простая
тема. Текстовые подстановки, но с нюансами, конечно. - SciFi(23.09.2020 08:54)
- Добавил такую строку в компилируемый файл получил ошибку Error[Pm050]: a null statement shall only occur on a line by
itself, and shall not have any other text on the same line (MISRA C
2004 rule 14.3). Т.е. имеем файл "*.c" со строками: teap0t(1438 знак., 23.09.2020 09:41 - 10:05)
- Заведите уже себе текстовый редактор с навигацией по коду. Тогда
assert_failed() искать вообще не пришлось бы. В 21 веке жить без
нормального текстового редактора неприлично. - SciFi(23.09.2020 11:02)
- IAR кажет, но надо ещё и не забывать, что такая возможность есть. С этим труднее. - teap0t(23.09.2020 19:40)
- Ну что тут можно сказать? Мисра и ассерт несовместимы. - SciFi(23.09.2020 09:41)
- Не, ну есть же версия, которая удовлетворяет требованиям. Правда ей
нужны файлы из запасов компилятора. Кстати вопрос. Задать USE_FULL_ASSERT на закладке препроцессора я могу. Т.е. после такой записи этот
переключатель как бы в состоянии "ЕСТЬ" А как на этой закладки
задать противоположное состояние "НЕТ"? Просто ничего не писать? teap0t(1 знак., 23.09.2020 09:45 - 09:52, картинка)
- Просто ничего не писать. А как "удовлетворяет требованиям" --
непонятно, потому что требования драконовские. - SciFi(23.09.2020 09:48)
- OK. - teap0t(23.09.2020 09:53)
- Просто ничего не писать. А как "удовлетворяет требованиям" --
непонятно, потому что требования драконовские. - SciFi(23.09.2020 09:48)
- Не, ну есть же версия, которая удовлетворяет требованиям. Правда ей
нужны файлы из запасов компилятора. Кстати вопрос. Задать USE_FULL_ASSERT на закладке препроцессора я могу. Т.е. после такой записи этот
переключатель как бы в состоянии "ЕСТЬ" А как на этой закладки
задать противоположное состояние "НЕТ"? Просто ничего не писать? teap0t(1 знак., 23.09.2020 09:45 - 09:52, картинка)
- Заведите уже себе текстовый редактор с навигацией по коду. Тогда
assert_failed() искать вообще не пришлось бы. В 21 веке жить без
нормального текстового редактора неприлично. - SciFi(23.09.2020 11:02)
- Добавил такую строку в компилируемый файл получил ошибку Error[Pm050]: a null statement shall only occur on a line by
itself, and shall not have any other text on the same line (MISRA C
2004 rule 14.3). Т.е. имеем файл "*.c" со строками: teap0t(1438 знак., 23.09.2020 09:41 - 10:05)
- Пустой макрос "#define assert_param(expr)". Он заменяет в коде
assert_param(всякое_разное) на пустоту. Макросы -- это простая
тема. Текстовые подстановки, но с нюансами, конечно. - SciFi(23.09.2020 08:54)
- "Папа, а что такое пресс-папье?" Я с макросами никогда не работал
(и в ассемблере тоже), ибо никогда не мог (не пытался) разобраться,
как они работают. Пустой макрос как выглядит? - teap0t(23.09.2020 08:51)
- А я не помню, MISRA лезет в некомпилируемый код? USE_FULL_ASSERT
определен? - VLLV(23.09.2020 08:36)
- Я попытался задать #define USE_FULL_ASSERT 0 или 1 непосредственно в компилируемом файле , но реакция нулевая.
Так. Если перенести определение ассерта прямо в компилируемый файл,
то ошибки пропадают. Что-то с заголовочными файлами. - teap0t(23.09.2020 08:42)
- Ты этот #define должен был ставить еще до #include - RxTx(23.09.2020 20:08)
- Само собой. Но я, как американец, сначала попробовал и другой вариант. - teap0t(23.09.2020 20:58)
- #ifdef - проверяет было ли определение вообще с любым значением или
без него, проверяй с помощью #if Дoктyp77(42 знак., 23.09.2020 08:46, )
- Эх. Ладно, почитаю. - teap0t(23.09.2020 08:52)
- И по макросам если упарываешься, полезно будет либо суметь напечатать значение макроса RxTx(479 знак., 24.09.2020 02:19, ссылка)
- Скажем, можно здесь: - RxTx(24.09.2020 02:03, ссылка)
- ОК. - teap0t(24.09.2020 09:50)
- Эх. Ладно, почитаю. - teap0t(23.09.2020 08:52)
- Ты этот #define должен был ставить еще до #include - RxTx(23.09.2020 20:08)
- Я попытался задать #define USE_FULL_ASSERT 0 или 1 непосредственно в компилируемом файле , но реакция нулевая.
Так. Если перенести определение ассерта прямо в компилируемый файл,
то ошибки пропадают. Что-то с заголовочными файлами. - teap0t(23.09.2020 08:42)
- Очевидно, что если не "#ifdef USE_FULL_ASSERT", то получается
"(void)0;", и это то самое "a non-null statement without any side
effects". Могли бы в этом случае сделать пустой макрос для
assert_param(), и нарушение уйдёт. - SciFi(23.09.2020 08:49)