180 __ ____________Часть II. Программирование на C++

! Предупреждение

Применение спецификатора inline к функциям, содержащим циклы for, ведет к появлению предупреждения. В готовых программах не должно содержаться предупреждений. На крайний случай от них можно отделаться, задав директиву препроцессора:

ftpragma warn -inl

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

Листинг 8.1 представляет собой пример небольшой программы, иллюстрирующей как прояснить слишком заумный код. В данном примере цикл for был немного причесан и получил более осмысленное имя.

h01801.jpg

1 // JUMANJI.CPP — Упрощение кода *

2 #include <ctype.h>

3 #include <iostream.h>

4 char *UpperCase(char *str)

5 (

6 // Присвоить аргументу str указатель 1 II Пока то, на что указьюает р

8 // (то есть *р) не равно '\0'

9 // преобразовать каждый p[i] в верхний регистр;

10 // Здесь не нужен оператор if, поскольку

11 // проверка осуществляется прямо в цикле.

12 for( char *p = str; *p; *p =(char) toupper(*p), p++);

13 return str;

14 )

15 #pragma argsused

16 void main( int argc, char *argv[])

17 (

18 cout « "Имя программы: " « Uppercase(argv[0])

19 «endl;

20 }

Польза от переделки:

• Поместив объявление функции в заголовочный файл, получим возможность повторно использовать функцию.

• Прибавилось места для понятных комментариев. '

• Использование функциональности этого цикла стало проще и понятнее (см. строку 18).

Имя функции делает функциональность, да и саму реализацию задачи, прозрачнее. Уже не встает* вопрос, что предпочесть — оба объекта должны быть