The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проверка с помощью If"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проверка с помощью If"  
Сообщение от new_for_coding email on 29-Мрт-07, 15:53 
Доброго всем дня!

Есть вот такая конструкция:

abl_args *args;
if (args = malloc(sizeof(abl_args)), NULL == args) {..}

Я правильно понимаю, что в ней выделяется память для структуры abl_args и проверяется выделена ли она? Первую часть условия для читабельности можно было вынести отдельно? Прокомментируйте пожалуйста с точки зрения правильности и красивости.


Заранее большое спасибо.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Проверка с помощью If"  
Сообщение от rmf on 29-Мрт-07, 16:27 
>Доброго всем дня!
>
>Есть вот такая конструкция:
>
>abl_args *args;
>if (args = malloc(sizeof(abl_args)), NULL == args) {..}


может я отстал дико,
но это пипец какой-то


if ( NULL == ( args = malloc(sizeof(abl_args)) )){ нету больше памяти }

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Проверка с помощью If"  
Сообщение от Michelnok (ok) on 29-Мрт-07, 16:27 
>
>Я правильно понимаю, что в ней выделяется память для структуры abl_args и
>проверяется выделена ли она?

Да. Только это настолько неочевидно, что для понимания требуется на порядок больше времени чем можно было бы.

>Первую часть условия для читабельности можно было вынести отдельно?

Для читабельности - обязательно.

>Прокомментируйте пожалуйста с точки зрения правильности и красивости.

Правильно. Но непонятно на первый взгляд.
Красиво будет так:

abl_args *args;

args = malloc(sizeof(abl_args));
if (args == NULL) {
    ..
}

Можно, конечно, написать и if (NULL == args), но это уже вопрос религии. Лично я считаю что так как мы проверяем значение переменной, а не константы, то переменная в if должна идти первой, для читабельности.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Проверка с помощью If"  
Сообщение от new_for_coding email on 29-Мрт-07, 16:57 
Большое спасибо.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Проверка с помощью If"  
Сообщение от rmf on 30-Мрт-07, 12:18 
>Красиво будет так:
>
>abl_args *args;
>
>args = malloc(sizeof(abl_args));
>if (args == NULL) {
>    ..
>}
>
>Можно, конечно, написать и if (NULL == args), но это уже вопрос
>религии. Лично я считаю что так как мы проверяем значение переменной,
>а не константы, то переменная в if должна идти первой, для
>читабельности.

Точно, именно такой способ более надежный,
так как в выражении
if (NULL == (args = malloc(..)) )
более вероятно очепятаться и написать
if (NULL = (args = malloc(..)) )

и если в ключах компилятора забыт -Wall,
то можно долго искать ошибку - почему-же malloc возвращает NULL

так что компилируйте всегда с -Wall


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Проверка с помощью If"  
Сообщение от vic (??) on 30-Мрт-07, 12:49 
То же впервые вижу столь оригинальный подход.

>Красиво будет так:
>
>abl_args *args;
>
//если в этом месте появится какой-то код и что хуже код юзающий args, то могут быть неприятности.
>
>args = malloc(sizeof(abl_args));
>if (args == NULL) {
>    ..
>}
>
в общем +1
но добавлю 5 коп., на K&R уже почти давно никто не пишет, поэтому:
abl_args *args = malloc(sizeof(abl_args));  // объявлять и сразу инициализировать
if (!args) // третий вариант для code style war :)
{
   // ..
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Проверка с помощью If"  
Сообщение от new_for_coding email on 30-Мрт-07, 14:03 

>но добавлю 5 коп., на K&R уже почти давно никто не пишет,
Проcтите, а что такое K&R?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Проверка с помощью If"  
Сообщение от phpcoder (??) on 30-Мрт-07, 14:08 
>>но добавлю 5 коп., на K&R уже почти давно никто не пишет,
>Проcтите, а что такое K&R?

K&R == Kernigan & Ritchie, авторы известной книжки "Язык Си". В данном случае имеется ввиду стиль оформления кода, который они использовали в своей книге и который именуется в их честь.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Проверка с помощью If"  
Сообщение от new_for_coding email on 30-Мрт-07, 14:22 
>K&R == Kernigan & Ritchie, авторы известной книжки "Язык Си". В данном
>случае имеется ввиду стиль оформления кода, который они использовали в своей
>книге и который именуется в их честь.
А можете порекомендовать какие-то книги, в которых описана именно современная стилистика? Или все обычно доходят до этого сами после многочисленных воин на форумах? :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Проверка с помощью If"  
Сообщение от phpcoder (??) on 30-Мрт-07, 14:25 
>А можете порекомендовать какие-то книги, в которых описана именно современная стилистика? Или
>все обычно доходят до этого сами после многочисленных воин на форумах?
>:)

Каждый выбирает и решает сам как ему оформлять.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Проверка с помощью If"  
Сообщение от Michelnok (ok) on 30-Мрт-07, 15:49 
>А можете порекомендовать какие-то книги, в которых описана именно современная стилистика?

Если имеется в виду современное состояние языка C, то лучше самого стандарта C99 и не придумать. Посмотрите на http://www.open-std.org/JTC1/SC22/WG14/www/standards

Если имеется в виду только оформление кода, то крупные проекты (такие как Linux и FreeBSD) имеют свои правила. Выяснение "какие правила лучше?" глупы по определению, так как правила разрабатывались исключительно с целью иметь код одинакового стиля по всему проекту, чтобы привыкшие к этому стилю разработчики могли легко читать код друг друга. Т.е. цель - не сделать лучше ("лучше" и "хуже" - это понятия субьективные), цель - сделать единообразно.
О Linux kernel coding style можно почитать, например, тут - http://www.linuxjournal.com/article/5780
По-русски и в бумажном виде - в книге http://www.williamspublishing.com/Books/5-8459-1085-4.html
О FreeBSD coding style - в статье style(9) - http://www.freebsd.org/cgi/man.cgi?query=style&sektion=9

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Проверка с помощью If"  
Сообщение от vic (??) on 30-Мрт-07, 14:25 
>>>но добавлю 5 коп., на K&R уже почти давно никто не пишет,
>>Проcтите, а что такое K&R?
>
>K&R == Kernigan & Ritchie, авторы известной книжки "Язык Си". В данном
>случае имеется ввиду стиль оформления кода, который они использовали в своей
>книге и который именуется в их честь.

Они _авторы_ языка С :) Ну и конечно авторы и книжки и стиля.

Уточню, что имел ввиду что раньше в С было принято (и компилятор иначе не позволял) размещать объявления переменных в начале функции до первого оператора, позже ограничение было снято и переменные объявлять можно в любом месте.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Проверка с помощью If"  
Сообщение от Michelnok (ok) on 30-Мрт-07, 15:30 
>
> В данном случае имеется ввиду стиль оформления кода, ...

Скорее имеется в виду возможность определения переменных по всему коду, а не только в начале блоков.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру