Для чего используются операторные скобки { } вне блоков?

Тема в разделе "LANGS.C", создана пользователем Magnum, 20 янв 2012.

  1. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    В чужом коде встречаю вот такие вещи:

    txr = BuildTexture();
    {
    // ... тут произвольный код
    };

    Часто встречаю операторные скобки там, где по дефолту они не нужны. Т.е. после обычного кода, а не блоков if, while, switch и т.д.
    Для чего нужны скобки в таком случае?
     
  2. zxcv

    zxcv New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2011
    Сообщения:
    257
    lokalinaia oblasti vidimosti i gruppirovka

    int a = 2;

    {
    int a = 3;

    printf("1) %d\n", a);
    }

    printf("2) %d\n", a);


    dast

    1) 3
    2) 2
     
  3. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    zxcv
    Понял, оно самое!
    Огромное спасибо! Тема закрыта!
     
  4. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Мне например интересно накой нужна ;, если есть CRLF ? :lol:
    По мойму мерзкое наследие паскаля =)
     
  5. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
    Мне вот тоже интересно про ;
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Magnum
    Еще время жизни объектов.

    Malfoy, Honorary_BoT
    Использование эндлайна вместо ; было бы таким же бредом, как использование табуляции для обозночения вложенности в питоне. Табуляция и эндлайны - это декорирование, предназначенное для введения кодинг-стайла, чтобы код был более понятен человеку. Насильственно делать их к тому же и лексемами - совершенно противоестественное занятие.

    Malfoy, ты просто привык к примитивному синтаксису ассемблера ;)
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Malfoy

    А, ну и алсо. Как бы ты записал с твоей заменой

    Код (Text):
    1. for(...) // тут надо ; ?
    2. { // а тут?
    3.     foo() // а тут?
    4. } // а тут?
     
  8. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    _DEN_
    Нет, я привык к обычному тексту, без не непечатаемых символов.

    Совершенно не нужно, перенос строки ведь лол.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Malfoy
    Дело в том, что в ассемблере синтаксис очень прост - любое выражение (expression) - это команда плюс опциональные мотификаторы команды (rep, lock) и операндов (сегменты). Поэтому достаточно правила "1 строка = 1 expression". А в C++ expression может быть хоть в три страницы. Например:

    Код (Text):
    1. module(L)
    2. [
    3.     def("f", &f),
    4.     def("g", &g),
    5.     class_<A>("A")
    6.         .def(constructor<int, int>),
    7.     def("h", &h)
    8. ];
    Поэтому простые правила типа endline = конец expression тут не канают.
     
  10. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    _DEN_
    В вашем примере символ "," переносит строку без её завершения. В масме это символ "_". О чём вы говорите я так и не понял. Зачем ";" ??
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Malfoy
    Нет, склейка строк делается через \ а в примере это operator ,
    ; нужен чтобы показать завершение expression, т.к. оно (expression), может быть очень большим. Более убедительный пример:

    Код (Text):
    1. sregex date =
    2. (
    3.         (month= _d >> !_d) [ check(as<int>(_) >= 1 && as<int>(_) <= 12) ]
    4.     >>  '/'
    5.     >>  (day=   _d >> !_d) [ check(as<int>(_) >= 1 && as<int>(_) <= 31) ]
    6.     >>  '/'
    7.     >>  (_d >> _d >> _d >> _d) [ check(as<int>(_) >= 1970 && as<int>(_) <= 2038) ]
    8. )
    9. [ check( ref(days_per_month)[as<int>(month)-1] >= as<int>(day) ) ];
    Алсо позырь ПМ.
     
  12. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    _DEN_
    Обычно для этих целей вводят символы переноса. Этот ваш паскаль какойто изврат. Блевать от него не хочется =))
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Malfoy
    Вообще-то это C++ :lol:
     
  14. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    _DEN_
    А си это не паскаль, это васик :lol:
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Malfoy
    Не совсем. Есть два варианта: делать символ переноса (тогда 1 строка = 1 expression), и делать символ окончания expression (тогда endline = whitespace). Первый случай удобен, когда чаще всего 1 строка = 1 expression (как в асме), второй случай удобен, когда 1 строка < 1 expression, (как в C++, хоть и не чаще всего, но все же достаточно часто).
     
  16. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    _DEN_
    Как эти дефолты помогают всем тем, кто пишет в одну строку ?
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Это нужно тем, кто пишет мегаоднострочники.
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Malfoy
    Ну C++ это как бы такой язык, в котором, при его правильном использовании, в одну строку писать неудобно :) Посмотри личку.
     
  19. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    _DEN_
    Вы просто юзаете то, что вам дано и у вас выбора нет. По мойму си как и паскаль, такой же кривой синтаксис. Хотя описание структур и прототипов годное.
     
  20. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Malfoy
    Как раз в васике то и юзается асмовский стайл с завершением выражения по CLRF и переносом по спецсимволу "_"

    Угу, вот только по скорости компиляции и ребилда с паскалем\дельфи мало кто может сравниться - разве что релятивисткое замедление\ускорение времени :lol:
    PS: Ах, да, я же забыл, что по твоей "релятивисткой" теории в многозадачной ОС все нивелируется и любые оптимизации, включая строгости ЯП, должны выполняться с постоянной скоростью Сх: шутка - смех, да вней намек и вирмейкерам урок :lol: