write_bit(buffer, 1);
write_bit(buffer, 0);
write_bit(buffer, 1);
write_bit(buffer, 1);
write_bit(buffer, 1);
write_bit(buffer, 0);
write_bit(buffer, 1);
write_bit(buffer, 1);
Каждая из write_bit может вернуть ошибку(-1). Неужели каждый раз нужно проверять? Можно что-то придумать чтобы не надо было проверять?
for loop if( -1) dohandling()
замени на write_byte(buffer, 0xbb); 😁
я в некоторых своих проектах подобный макрос использую: #define PROPAGATE(x) do { Result _result = (x); if (_result != RESULT_SUCCESS) return _result; } while (0)
do while(0) бы заменить на Статик ассерт и норм
во первых static_assert это C11. Во вторых честно говоря не понимаю как его тут применить, и чем оно будет лучше do {} while (0)
#define PROPAGATE(x) { \ Result _result = (x); \ if (_result != RESULT_SUCCESS) \ return _result; \ } _Static_assert(1, "")
и чем оно лучше do {} while (0)?
Оно никак не мешает генерации кода, в отличии от do while(0)
уж компилятор который умеет в C11 то осилит оптимизировать do {} while (0)
Там дело не в том, что компиль не соптимизирует конкретно этот цикл, а в том, что оптимизации окружающего кода могут отработать некорректно. Ну например компиль может инвариант вынести, если инвариант под условием - доп джамп.
у этого макроса ещё следующая небольшая проблема - с ним Result foo(void) PROPAGATE(...); становится валидным кодом.
Этот цикл настолько популярный для обертки, что я думаю в компиляторе есть специальная его обработка. Ну вот в принципе, если не делать const int , то выражение анализируется как полное и появляется предупреждение.
Use return 1 if u want to exit the code 🙂 , like terminate code if user enter a char data type . Let me show u a example of my demonstration what i am saying ☺️ here it is ```` #include <stdio.h> int main() { int number1; printf("Enter your 1st number here: "); // Validate user input by using if :P if (scanf("%d", &number1) != 1) { printf("Error: Invalid input. Please enter an integer.\n"); return 1; // Exit with an error code } else { printf("Valid input received: %d\n", number1); } return 0; } ````
Обсуждают сегодня