Как работать с данными, передаваемыми в функцию, но без явного имени в её в параметрах в си?

Есть объявление функции в языке Си.

int foo(int, int) { 
  // код функции.
}

Как мне обращаться к параметру функции, указан только тип параметра (без имени).


Ответы (2 шт):

Автор решения: Damir Hakimof

Итак, вам нужно имя аргумента, чтобы к нему обратиться, Но при этом вы можете можете создать "скелет" функции без имен аргументов (где "скелет" - объявление функции без тела этой самой функции). Объявление скелета без тела функции часто используется в заголовочных файлах .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;
}

Если вы попытаетесь воспользоваться функцией без объявления тела, будет ошибка линковщика.

→ Ссылка
Автор решения: Serge3leo

Как мне обращаться к параметру функции, указан только тип параметра (без имени).

Никак, Вы сами себе запретили такое обращение (это нововведение С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
}
→ Ссылка