180 __ ____________Часть II. Программирование на C++
! Предупреждение
Применение спецификатора inline к функциям, содержащим циклы for, ведет к появлению предупреждения. В готовых программах не должно содержаться предупреждений. На крайний случай от них можно отделаться, задав директиву препроцессора:
ftpragma warn -inl
которая отключает предупреждения о встраиваемых функциях. Хотя, возможно, гораздо лучше будет искоренять не предупреждения, а причину, вызывающую их появление.
Листинг 8.1 представляет собой пример небольшой программы, иллюстрирующей как прояснить слишком заумный код. В данном примере цикл for был немного причесан и получил более осмысленное имя.
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).
Имя функции делает функциональность, да и саму реализацию задачи, прозрачнее. Уже не встает* вопрос, что предпочесть — оба объекта должны быть