LINUX.ORG.RU

Как в C красиво заменить NULL-pointer

 


1

2

Я написал вот такой код:

printf("My string is %s", get_my_string() || "unknown");
подразумевая что get_my_string возвращает строку или NULL. Компилятор такое не съел. Можно ли как-то красиво получить нужную мне функциональность?

★★★★★
Ответ на: комментарий от emulek

Та я ж не против, пишите как нравится. Когда-то тернарный оператор удобнее, когда-то явная проверка. По моему личному мнению ясное выражение намерений в коде имеет большую ценность, нежели компактность. И если во всех остальных местах ошибки обрабатываются явно if-ами, то я бы и здесь сделал также. Такой код легче на автомате глазами пробегать.

anonymous
()
Ответ на: комментарий от anonymous

Я там Голуба цитировал, если кто не понял.

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

дык я его могу порезать как угодно, смотрите

if(xxxxxxxxxxxxxxxxx)
  yyyyyyyyyyyyyyyy;
else
  zzzzzzzzzzzzzzzz;
vs
xxxxxxxxxxxxxxxxxxx?
  yyyyyyyyyyyyyyyyyyy:
  zzzzzzzzzzzzzzzzzzz;
else мне не нравится, строку занимает, а пользы не приносит. Работает как пустая строка, а это плохо, ибо пустые строки я тоже использую.

И если во всех остальных местах ошибки обрабатываются явно if-ами, то я бы и здесь сделал также. Такой код легче на автомате глазами пробегать.

вопрос привычки. Я больше про ==NULL говорил, который абсолютно не нужен, как и ==TRUE и ==FALSE. Тут я полностью согласен с Голубом. Вот если-бы x==y, то да.

и да, if иногда рождает лишнюю сущность, т.к. не отдаёт значение

if(a)
  x = b;// тут я могу поменять x→y
else
  x = c;// а тут — забуду

x = a? b: c;// тут точно не забуду.

emulek
()

можно забить на изврат. "(null)" тоже вполне информативно

«if you accidentally pass a null pointer as the argument for a ‘%s’ conversion, the GNU C Library prints it as ‘(null)’.»

MKuznetsov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.