реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Можно ли в keil разбить #define на несколько строк ?
MiklPolikov
сообщение Sep 27 2013, 12:48
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Вопрос : есть ли способ в Keil записать такую строку

#define VOLTAGE_RANGE_1 {PWR->CR &=~ PWR_CR_VOS_1; PWR->CR |= PWR_CR_VOS_0;}

в виде двух

#define VOLTAGE_RANGE_1 {PWR->CR &=~ PWR_CR_VOS_1;
PWR->CR |= PWR_CR_VOS_0;}

?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 27 2013, 12:53
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Код
#define VOLTAGE_RANGE_1    {\
PWR->CR &=~ PWR_CR_VOS_1;\
PWR->CR |= PWR_CR_VOS_0; }



--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 27 2013, 13:23
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



и обязательно в скобках do{}while(0)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Sep 27 2013, 13:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(megajohn @ Sep 27 2013, 16:53) *
Код
#define VOLTAGE_RANGE_1    {\
PWR->CR &=~ PWR_CR_VOS_1;\
PWR->CR |= PWR_CR_VOS_0; }

Спасибо !

Цитата(MrYuran @ Sep 27 2013, 17:23) *
и обязательно в скобках do{}while(0)


Не понимаю о чём речь. Объясните пожалуйста. Что в скобках ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 27 2013, 14:48
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(MiklPolikov @ Sep 27 2013, 17:35) *
Не понимаю о чём речь. Объясните пожалуйста. Что в скобках ?

Речь вот о чём. При использовании VOLTAGE_RANGE_1 в Вашей программе будет подставлено (содержимое скобок опустил): {...}
Обычно, при оформлении программ, после VOLTAGE_RANGE_1 ставит точку с запятой, чтобы было похоже на "настоящий" оператор. Например, так:
Код
if(xxx) VOLTAGE_RANGE_1;

После подстановки значения будет
Код
if(xxx) {...};

В данном примере "лишняя" точка с запятой не помешает, но - что получится при такой конструкции ?
Код
if(xxx) VOLTAGE_RANGE_1;
else ....

Вот тут точка с запятой окажется лишней. Чтобы она лишней не оказалась, то обрамляют фигурные скобки оператором do ... while(0)
Код
#define VOLTAGE_RANGE_1    do {\
PWR->CR &=~ PWR_CR_VOS_1;\
PWR->CR |= PWR_CR_VOS_0; } while(0)
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Sep 27 2013, 14:56
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(Палыч @ Sep 27 2013, 18:48) *
Речь вот о чём. При использовании VOLTAGE_RANGE_1 в Вашей программе будет подставлено (содержимое скобок опустил): {...}
Обычно, при оформлении программ, после VOLTAGE_RANGE_1 ставит точку с запятой, чтобы было похоже на "настоящий" оператор. Например, так:
Код
if(xxx) VOLTAGE_RANGE_1;

После подстановки значения будет
Код
if(xxx) {...};

В данном примере "лишняя" точка с запятой не помешает, но - что получится при такой конструкции ?
Код
if(xxx) VOLTAGE_RANGE_1;
else ....

Вот тут точка с запятой окажется лишней. Чтобы она лишней не оказалась, то обрамляют фигурные скобки оператором do ... while(0)
Код
#define VOLTAGE_RANGE_1    do {\
PWR->CR &=~ PWR_CR_VOS_1;\
PWR->CR |= PWR_CR_VOS_0; } while(0)



Спасибо!


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 27 2013, 16:55
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



А почему не делать так:
Код
__INLINE void VOLTAGE_RANGE_1(void} {
    PWR->CR &=~ PWR_CR_VOS_1;
    PWR->CR |= PWR_CR_VOS_0;
}

?

и вызывать где угодно как VOLTAGE_RANGE_1();

По моему, так понятнее, без do..while.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 27 2013, 17:55
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А я иногда делаю так
Код
#define WDELAY_RESTART();        \
  TIM7->EGR = TIM_EGR_UG;        \
  TIM7->SR = 0;                \
  TIM7->CR1 |= TIM_CR1_CEN;

Не буду оппонировать "монстрам от программирования", но случаи "а если..." мне кажутся надуманными.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 19:14
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Sep 27 2013, 21:55) *
А я иногда делаю так
Код
#define WDELAY_RESTART();        \
  TIM7->EGR = TIM_EGR_UG;        \
  TIM7->SR = 0;                \
  TIM7->CR1 |= TIM_CR1_CEN;

Не буду оппонировать "монстрам от программирования", но случаи "а если..." мне кажутся надуманными.

Чудовищно. В этом случае if(xxx) WDELAY_RESTART(); просто молча породит неправильный код.
Вам кажется надуманным использование оператора "if"?



Цитата(Allregia @ Sep 27 2013, 20:55) *
По моему, так понятнее, без do..while.

do {} while(0) - стандартная конструкция, она не должна быть непонятна в принципе.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 27 2013, 19:21
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(aaarrr @ Sep 27 2013, 21:14) *
do {} while(0) - стандартная конструкция, она не должна быть непонятна в принципе.


Да, но не в этом случае, и чем хуже инлайн?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 19:28
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Allregia @ Sep 27 2013, 23:21) *
Да, но не в этом случае, и чем хуже инлайн?

Почему не в этом случае?

Инлайн ничем не хуже, кроме того, что собственно встраивание не гарантируется. А если, например, нужно вернуть из блока значение, то без инлайна никак.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 27 2013, 19:34
Сообщение #12


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Sep 27 2013, 22:14) *
Чудовищно. В этом случае if(xxx) WDELAY_RESTART(); просто молча породит неправильный код.
Вам кажется надуманным использование оператора "if"?

В данном случае - да.
Тем более, я всегда могу написать
Код
if (xxx) {
  WDELAY_RESTART();
}
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 19:39
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Sep 27 2013, 23:34) *
В данном случае - да.

Тогда рекомендую убрать (); в конце макроса, дабы сразу было видно, что это лажа, а не нормальная языковая конструкция.

Цитата(ViKo @ Sep 27 2013, 23:34) *
Тем более, я всегда могу написать

Вы - возможно, если вспомните. А кто-то другой получит сюрприз.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 27 2013, 19:41
Сообщение #14


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Sep 27 2013, 22:39) *
Тогда рекомендую убрать (); в конце макроса, дабы сразу было видно, что это лажа, а не нормальная языковая конструкция.
Вы - возможно, если вспомните. А кто-то другой получит сюрприз.

На то даны БОЛЬШИЕ_БУКВЫ.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 19:44
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Sep 27 2013, 23:41) *
На то даны БОЛЬШИЕ_БУКВЫ.

Т.е. теперь БОЛЬШИЕ_БУКВЫ всегда оборачивать в {} безопасности для?

Зачем писать нарочито плохо, если можно без каких бы то ни было усилий написать хорошо и правильно?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 27 2013, 19:54
Сообщение #16


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Sep 27 2013, 22:44) *
Т.е. теперь БОЛЬШИЕ_БУКВЫ всегда оборачивать в {} безопасности для?

Зачем писать нарочито плохо, если можно без каких бы то ни было усилий написать хорошо и правильно?

На мой взгляд, макрос в виде функции выглядит логичнее, чем конструкция с довеском do ... while(0)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 20:01
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



"Логичнее"? А что ведет себя совсем иначе - это ничего?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 27 2013, 20:04
Сообщение #18


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Sep 27 2013, 22:44) *
Т.е. теперь БОЛЬШИЕ_БУКВЫ всегда оборачивать в {} безопасности для?

Не всегда. Только функции БОЛЬШИЕ_БУКВЫ();
КОНСТАНТЫ - не нужно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 20:09
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Sep 28 2013, 00:04) *
Не всегда. Только функции БОЛЬШИЕ_БУКВЫ();
КОНСТАНТЫ - не нужно.

Правильно, константы я бы в таком коде превинтивно заворачивал в (). Во избежание.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 27 2013, 20:09
Сообщение #20


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Sep 27 2013, 23:01) *
"Логичнее"? А что ведет себя совсем иначе - это ничего?

Ведет себя, именно, как функция. Набор выражений.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 20:19
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Этот "набор выражений" и ведет себя как набор не связанных друг с другом выражений, а не как функция.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 27 2013, 20:29
Сообщение #22


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Sep 27 2013, 23:19) *
Этот "набор выражений" и ведет себя как набор не связанных друг с другом выражений, а не как функция.

Да ну? Отличие только в том, что ничего не возвращает (всегда). Тот пример, что я показал, запросто можно оформить в виде функции.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2013, 20:50
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Sep 28 2013, 00:29) *
Да ну? Отличие только в том, что ничего не возвращает (всегда). Тот пример, что я показал, запросто можно оформить в виде функции.

Понятно, в виде функции - это "#define MACRO {}"? Немного получше, но все равно не то.

А уж этому -
Код
#define WDELAY_RESTART();        \
  TIM7->EGR = TIM_EGR_UG;        \
  TIM7->SR = 0;                \
  TIM7->CR1 |= TIM_CR1_CEN;

- точно не место в ветке для начинающих. Разве что как пример того, как делать не следует никогда.
Примерно такой же "полезности" макрос:
Код
#define  10   5 + 5
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Sep 28 2013, 02:14
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(MrYuran @ Sep 27 2013, 09:23) *
и обязательно в скобках do{}while(0)

Это уже "на все случаи жизни".
И так хорошо.
ИМХО.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Raven
сообщение Sep 28 2013, 05:41
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 491
Регистрация: 16-01-05
Из: Санкт-Петербург
Пользователь №: 1 987



Цитата(MrYuran @ Sep 27 2013, 17:23) *
и обязательно в скобках do{}while(0)

Спасибо за интересный прием. Действительно полезно для макросов. Возьму на вооружение.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 28 2013, 07:47
Сообщение #26


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Sep 27 2013, 23:50) *
Понятно, в виде функции - это "#define MACRO {}"? Немного получше, но все равно не то.

Хорошо, добавим фигурные скобки. Можете привести пример, когда такая конструкция будет работать неправильно?
Код
#define WDELAY_RESTART(); {     \
  TIM7->EGR = TIM_EGR_UG;        \
  TIM7->SR = 0;             \
  TIM7->CR1 |= TIM_CR1_CEN;     \
}
Go to the top of the page
 
+Quote Post
igorle
сообщение Sep 28 2013, 08:44
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(ViKo @ Sep 28 2013, 10:47) *
Хорошо, добавим фигурные скобки. Можете привести пример, когда такая конструкция будет работать неправильно?
Код
#define WDELAY_RESTART(); {     \
  TIM7->EGR = TIM_EGR_UG;        \
  TIM7->SR = 0;             \
  TIM7->CR1 |= TIM_CR1_CEN;     \
}

Элементарно. Я исхожу из предположения, что точка с запятой здесь (WDELAY_RESTART(); ) поставлена умышленно:
Код
#define aaa(); { printf("Good style saves you\n"); }

int main()
{
    int i = 0;
    if (0)
        if (1)
            aaa();

    return 0;
}

Будет напечаттано сообщение? Проверьте здесь

Теперь предположим, что точка с запятой стоят ошибочно (а это скорее всего так и есть)
Попытайтесь скомпилировать этот код:

Код
#define aaa() { printf("XXX\n"); }

int main()
{
    if (0)
        if (1)
            aaa();
        else
            printf("Yo are so wrong\n");

    return 0;
}


Сообщение отредактировал igorle - Sep 28 2013, 08:34
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 28 2013, 08:58
Сообщение #28


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(igorle @ Sep 28 2013, 11:44) *
Будет напечатано сообщение? Проверьте

Точка с запятой стоит намеренно. Но я, хоть убей не понимаю поведения codepad! Подставляю ту же строку из макро - и не печатает! (первый пример)
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Sep 28 2013, 09:03
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Прочитал все написанное но так и не понял почему так все сложно.
И я совершенно не представляю ситуацию когда не будет работать конструкция
Код
#define MacroName(параметры_если_есть) \
{ /*комментарий0 если нужен */ \
оператор1; /*комментарий1 если нужен */ \
оператор2; /*комментарий2 если нужен */ \
}

Будьте добры, приведите мне любой пример кода, где определенный так макрос будет работать некорректно. Неужто кто-то знает такая комбинацию компилятора, параметров и операторов, когда это будет работать иначе чем задумано программистом при написании этого макроса?
Пока что я пребываю в дремучем незнании и полной уверенности что оно работает, буду рад любому кто раскроет мне глаза на подлую сущность вещей.
Как говориться, "thanks in advance".
Go to the top of the page
 
+Quote Post
igorle
сообщение Sep 28 2013, 09:22
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(ViKo @ Sep 28 2013, 11:58) *
Точка с запятой стоит намеренно. Но я, хоть убей не понимаю поведения codepad! Подставляю ту же строку из макро - и не печатает! (первый пример)

Такой результат получится с любым исправным компилятором. Если есть под рукой GCC - посмотрите результат препроцессора. У меня под рукой нет. Поэтому сделаем препроцессинг вручную.

Код
if (0)
    if (1)
        aaa();

превращается в
Код
if (0)
    if (1)
       ; { printf("Good style saves you\n"); };

Или, после причесывания
Код
if (0)
    if (1)
           ;
{
    printf("Good style saves you\n");
};


А вывод один - обрамляйте любую макрофункцию, состоящую более чем из вызова одной функции, do {} while(0), и будет вам счастье.

Цитата(Ruslan1 @ Sep 28 2013, 12:03) *
я совершенно не представляю ситуацию когда не будет работать конструкция
Код
#define MacroName(параметры_если_есть) \
{ /*комментарий0 если нужен */ \
оператор1; /*комментарий1 если нужен */ \
оператор2; /*комментарий2 если нужен */ \
}

Будьте добры, приведите мне любой пример кода, где определенный так макрос будет работать некорректно.

Ruslan1, выше был пример. Но я повторю его, так как выше смешал два случая:
Код
#define aaa() { printf("XXX\n"); }
if (1)
    aaa();
else
    printf("Yo are so wrong\n");

просто не скомпилируется.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 28 2013, 09:34
Сообщение #31


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(igorle @ Sep 28 2013, 12:08) *
Такой результат получится с любым исправным компилятором. Если есть под рукой GCC - посмотрите результат препроцессора. У меня под рукой нет. Поэтому сделаем препроцессинг вручную.
Код
if (0)
    if (1)
      ; { printf("Good style saves you\n"); };

Насчет GCC не скажу, но в Keil C-99 точка с запятой не отрывается от имени макрофункции.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Sep 28 2013, 11:08
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(igorle @ Sep 28 2013, 12:22) *
Ruslan1, выше был пример. Но я повторю его, так как выше смешал два случая:
Код
#define aaa() { printf("XXX\n"); }
if (1)
    aaa();
else
    printf("Yo are so wrong\n");

просто не скомпилируется.

Это не интересно. Я спросил пример кода, где определенный так макрос будет работать некорректно.
То есть когда оно работает, но некорректно. То есть компилятор молча пережевал и сгенерировал код, но код работает не так как задумывал программист.
Варианты, которые детектируются любым компилятором как варнинги или ошибки не интересны, так как очевидно, что любой даже варнинг требует внимания программиста и документирования как допустимый или модификации кода для его устранения.

Вот если Вы укажете компилятор, в котором приведенный Вами пример не сгенерирует варнинг или ошибку (и, само собой, работать будет некорректно)- я с Вами соглашусь.
Go to the top of the page
 
+Quote Post
Flood
сообщение Sep 28 2013, 11:50
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Цитата(Ruslan1 @ Sep 28 2013, 15:08) *
Это не интересно. Я спросил пример кода, где определенный так макрос будет работать некорректно.
То есть когда оно работает, но некорректно.


К чему такие придирки? Или если написано "чуть-чуть неправильно" - то так делать можно, а вот если "совсем неправильно" - уже нельзя?

Очевидно, что простой блок в макросах способен вызвать проблемы, знать об этом и осознанно писать проблемные макросы - как минимум странно. С точки зрения повторного использования будет не важно, код не компилируется, или компилируется, но работает некорректно. Это влияет только на скорость выявления проблем. Все равно придется лезть в чужой (или в свой старый) макрос и его исправлять, или переписывать код так, чтобы после макроса не было точки с запятой.
И зачем это нужно, если есть старый как сам C способ написания корректного кода?
http://c-faq.com/cpp/multistmt.html

О нем можно не знать, это нормально. Но знать и не использовать - в чем выгода?
Go to the top of the page
 
+Quote Post
igorle
сообщение Sep 28 2013, 15:38
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Поддерживаю предыдущего оратора.

И еще.
"функции" без точки с запятой в конце, сбивают механизм автоматической индентации. Например, я сейчас напечатал в виме код, и он выровнял мне его так:
Код
if (1)
    aaa()
        bbb();

А это некрасиво. И это уже достаточный повод не делать этого.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 29 2013, 19:01
Сообщение #35


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(igorle @ Sep 28 2013, 18:38) *
Например, я сейчас напечатал в виме код, и он выровнял мне его так:

Что такое "вим"?
Go to the top of the page
 
+Quote Post
Flood
сообщение Sep 29 2013, 20:03
Сообщение #36


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Цитата(ViKo @ Sep 29 2013, 23:01) *
Что такое "вим"?

Адский текстовый редактор. (Самый?) мощный, но по-настоящему красноглазый.
http://ru.wikipedia.org/wiki/Vim
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Sep 29 2013, 20:22
Сообщение #37


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(igorle @ Sep 28 2013, 05:22) *
А вывод один - обрамляйте любую макрофункцию, состоящую более чем из вызова одной функции, do {} while(0), и будет вам счастье.


Не согласен.
После if всегда надо пользовать фигурные скобки.
Назвисимо от использования всяких define.
Это улучшает читаемость и предсказуемость кода.
Чем больше напихано в #define, тем сложнее их читать.

То, что компилятор не скомпилирует не проблема.
поправим. Проблема если скомпилирует не так как надо.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 29 2013, 20:56
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(A. Fig Lee @ Sep 30 2013, 00:22) *
После if всегда надо пользовать фигурные скобки.
...
Это улучшает читаемость и предсказуемость кода.

Код
if(x) zzz();

По-моему, в подобном выражении фигурные скобки не улучшат читаемость. Скорее, наоборот.

Цитата(A. Fig Lee @ Sep 30 2013, 00:22) *
То, что компилятор не скомпилирует не проблема.
поправим. Проблема если скомпилирует не так как надо.

Если что-то надо править, то это все равно проблема. Она, конечно, меркнет на фоне второго варианта развития событий, но все же.
Go to the top of the page
 
+Quote Post
ig_z
сообщение Sep 29 2013, 21:16
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



QUOTE (A. Fig Lee @ Sep 29 2013, 23:22) *
Не согласен.
После if всегда надо пользовать фигурные скобки.
Назвисимо от использования всяких define.
Это улучшает читаемость и предсказуемость кода.
Чем больше напихано в #define, тем сложнее их читать.

То, что компилятор не скомпилирует не проблема.
поправим. Проблема если скомпилирует не так как надо.

Маладец! Герой! Аплодирую стоя, один прет против всех! Прям как макаревич в своих нетленках.
Теперь нужно срочно наставить на путь истинный девелоперов линукс ядра, lwip, contiki и т.д. Залезть в их репозитории и поубивать ненавистные дувайлы sm.gif
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 20:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01811 секунд с 7
ELECTRONIX ©2004-2016