История изменений
Исправление hateyoufeel, (текущая версия) :
А ты точно C знаешь?
typedef int (*fptr)();
int f1(void) { return 1; }
int f2(int a) { return 2 + a; }
int main(void) {
fptr f;
int r = 0;
f = f1;
r += f();
f = f2;
r += f(1);
return r;
}
Вот этот код больше не соберётся. Типа несовместимы.
$ gcc void-arg.c -o void-arg -std=c23
void-arg.c: In function ‘main’:
void-arg.c:11:5: error: assignment to ‘fptr’ {aka ‘int (*)(void)’} from incompatible pointer type ‘int (*)(int)’ [-Wincompatible-pointer-types]
11 | f = f2;
| ^
void-arg.c:12:8: error: too many arguments to function ‘f’
12 | r += f(1);
|
В общем, из сишечки удалили возможность делать указатель на функцию с неопределёнными аргументами.
Исходная версия hateyoufeel, :
А ты точно C знаешь?
typedef int (*fptr)();
int f1(void) { return 1; }
int f2(int a) { return 2 + a; }
int main(void) {
fptr f;
int r = 0;
f = f1;
r += f();
f = f2;
r += f(1);
return r;
}
Вот этот код больше не соберётся. Типа несовместимы.
$ gcc void-arg.c -o void-arg -std=c23
void-arg.c: In function ‘main’:
void-arg.c:11:5: error: assignment to ‘fptr’ {aka ‘int (*)(void)’} from incompatible pointer type ‘int (*)(int)’ [-Wincompatible-pointer-types]
11 | f = f2;
| ^
void-arg.c:12:8: error: too many arguments to function ‘f’
12 | r += f(1);
|