Читайте также: |
|
Если для некоторых аргументов функции можно указать наиболее часто
используемые значения, то С++ позволяет это сделать, избавляя программиста от
Необходимости указывать их каждый раз при обращении. При описании функции
параметры, имеющие значения по умолчанию, должны располагаться в конце списка параметров. Эти значения будут использованы при вызове функции, если соответствующие параметры окажутся опущенными. Для этого после имени параметра через символ '=' указывается его значение "по умолчанию". Например, у нас есть следующее описание функции:
void print(MATRIX A, char * format = "%9.4f", char * title = NULL);
После этого возможны следующие обращения к функции print:
Print(C);
print(C,"%12.7e");
print(C,"%12.7e","__Матрица С__);
Неопределенное число параметров
Существуют функции, в описании которых невозможно указать число и типы
Всех допустимых параметров. Тогда список формальных параметров завершается
многоточием..., что означает: "и, возможно, еще несколько аргументов". Например:
int printf(const char*,...);
При вызове printf обязательно должен быть указан параметр типа char*,
однако могут быть (а могут и не быть) еще другие параметры. Например:
printf("Hello, world\n");
printf("My name is %s %s\n", first_name, second_name);
printf("%d + %d = %d\n", 2,3,5);
Такие функции пользуются для распознавания своих фактических параметров недоступной транслятору информацией. В случае функции printf, первый параметр обязателен и является форматной строкой. Она может содержать спецификаторы вывода, которые позволяют функции правильно снимать значения аргументов со стека, которые были туда загружены при обращении к ней. Например, %s означает -"будет фактический параметр типа char*", %d означает -"будет фактический параметр типа int". Но транслятор этого не знает, и поэтому он не может убедиться, что объявленные параметры действительно присутствуют в вызове и имеют соответствующие типы. Например, следующий вызов
char Name[]="Sasha";
printf("My name is %s%d",Name);
Нормально транслируется, но приведет (в лучшем случае) к неверному результату при печати.
Очевидно, что раз параметр не описан, то транслятор не имеет сведений для контроля и стандартных преобразований типа этого параметра.
Другой пример. Первый параметр функции определяет количество последующих аргументов, значения которых должны быть просуммированы.
Int sum(int n,...)
{
int *p=&n+1,s=0,i;
for(i=1;i<=n;i++,p++)
s+=*p;
Return s;
}
Дата добавления: 2015-07-07; просмотров: 141 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Данная функция может печатать содержимое двухмерных массивов с любой первой размерностью. | | | Указатель на функцию |