Как работать с данными, передаваемыми в функцию, но без явного имени в её в параметрах в си?
Есть объявление функции в языке Си.
int foo(int, int) {
// код функции.
}
Как мне обращаться к параметру функции, указан только тип параметра (без имени).
Ответы (2 шт):
Итак, вам нужно имя аргумента, чтобы к нему обратиться, Но при этом вы можете можете создать "скелет" функции без имен аргументов (где "скелет" - объявление функции без тела этой самой функции). Объявление скелета без тела функции часто используется в заголовочных файлах .h/.hpp and etc.
For example:
// func.h
int foo(int, int); // можно и `int foo(int a, int b);`
// func.c
#include "func.h"
int foo(int a, int b) {
return a+b; // к примеру
}
// main.c
#include "func.h"
#include "stdio.h"
int main() {
printf("%d", foo(3, 4)); // 7
return 0;
}
Если вы попытаетесь воспользоваться функцией без объявления тела, будет ошибка линковщика.
Как мне обращаться к параметру функции, указан только тип параметра (без имени).
Никак, Вы сами себе запретили такое обращение (это нововведение С23, по мотивам C++), для этого нет простых стандартных средств.
В принципе, пользуясь интерфейсами отладчика и/или ОС это возможно, но... Если Вам аргументы бывают нужны, только в некоторых ветках условной трансляции, C23 так же поддерживает альтернативный вариант не используемых (не реализованных) аргументов:
int foo([[maybe_unused]] int i, [[maybe_unused]] int j) {
// в зависимости от условной трансляции используем i и j
}
Собственно, так же доступна и старая добрая метода:
int foo(int i, int j) {
(void)i, (void)j;
// в зависимости от условной трансляции используем i и j
}