[cdev] Утилита Echo

Grigoriy A. Sitkarev sitkarev на komitex.ru
Пт Мар 19 12:44:55 MSK 2010


Это не Linux Kernel Coding Style. Вы не смотрели LKCS.

Скобки фигурные не так расставляются и пробелов не должно быть после `(' 
и до `)'.

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

if (a) a += b; <-- не правильно

if (a)
	a += b; <-- правильно

Карабанова Елена пишет:
> Здравствуйте
> 
> я не понимаю в чем моя первая ошибка, 

Я в другой исходник смотрел и ошибся. Бывает.

>> Есть глобальная переменная write_newline и локальная переменная в 
>> main с таким же именем. У вас из-за этого неправильно обрабатывается 
>> опция -n.
> 
> моя глобальная переменная была задана один раз, в main я её второй раз не объявляла, опция -n работает

Всё верно у вас.

> подсказку исправила на стандартную

Хорошо.

> в функцию передаются только 2 параметра

Есть ещё нюанс.

И я потребую чтобы вы его тоже поправили. Если значение переменой нас 
интересует как булево (true/false) то в операциях сравнения мы им и 
пользуемся как логическим.

У вас:

if (put_newline == 1)

а по идее надо бы:

if (put_newline)

Конечно, они тогда и с нулём не сравниваются а было бы:

if (!put_newline)

> при компиляции не выдается предупреждений

Это так.

Но в do_echo_with_escapes нет обработки случая, если после `\' 
встретился неподдерживаемый символ, например '\z' не будет обработано. 
Нет также обработки случая, когда после `\' вообще больше ничего нет, и 
в argv[i] был только этот один символ всего. Я вас предупреждал, что 
давал вам только скелет. Подумайте, как просто и красиво сделать 
обработку этих возможных ситуаций.

--
Г.А.





Подробная информация о списке рассылки cdev