Формальный параметр может иметь значение по умолчанию. Все параметры, стоящие справа от него тоже должны иметь значения по умолчанию. Эти значения передаются в функцию, если при вызове данные параметры не указаны.
#include <stdio.h>
void Name1 (float x, int y, char z='b') {
printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);
}
void Name2 (float x, int y=16, char z='a') {
printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);
}
void Name3 (float x=1.3, int y=4, char z='c') {
printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);
}
void main(void) {
Name1(1.0,2);
Name2(100.0);
Name3();
}
Перегрузка функций
Имена функций могут быть перегружены в пределах одной области видимости. Компилятор отличает одну функцию от другой по сигнатуре. Сигнатура задается числом, порядком следования и типами ее параметров.
#include <stdio.h>
#include <string.h>
int Name (int first) {
return first*first;
}
int Name (unsigned first) {
return first*first;
}
char Name (char first) {
return first*first;
}
int Name (int first,char *second) {
return first*strlen(second);
}
float Name (float r) {
return r*r;
}
double Name (double r) {
return r*r;
}
void main(void) {
printf("%d\n", noName(4));
printf("%d\n", noName((unsigned)4));
printf("%c\n", noName('c'));
printf("%d\n", noName(4,"cлово"));
|
|
printf("%0.2f\n", noName((float)1.2));
printf("%0.2lf\n", noName((double)1.2));
}
КЛАССЫ ПАМЯТИ И ОБЛАСТЬ ДЕЙСТВИЯ
До сих пор мы имели дело с локальными переменными, которые доступны только в одной функции. В данном случае переменные a, b в main() и myfunc() являются разными переменными.
void myfunc(int, int);
void main (void){
int a=5, b=10;
printf ("%d %d\n", a, b);
myfun (a, b);
printf ("%d %d\n", a, b);
}
void myfun (int a, int b){
a++; b++;
printf ("%d %d\n", a, b);
}
Каждая существует только в своей функции и доступна только в ней. Физически это разные ячейки памяти. Такие переменные называются "локальными". Но иногда требуются переменные доступные из любой функции и даже модуля программы. Такие переменные называются "глобальными".
Каждая переменная в Си принадлежит некоторому классу памяти. Всего существует 5 классов памяти. Для их описания используются ключевые слова:
extern - внешний,
auto - автоматический,
static - статический
register - регистровые.