Неназванные параметры в C

В C, в отличие от C ++, все параметры определения функции должны иметь имя .

Вместо удаления ошибок «неиспользуемый параметр» с помощью (void) a или открытого использования __ attribute __ ((unused)) я создал следующий макрос:

#define UNUSED2(var, uniq) UNUSED_ ## line ## var __attribute((unused))
// squash unused variable warnings, can it be done without var?
#define UNUSED(var) UNUSED2(var, __func__)

Используется следующим образом

void blah(char const *UNUSED(path)) {}

Есть ли способ гарантировать уникальное "фиктивное" имя переменной (очевидно, LINE и __ func __ не могут его сократить) или пренебречь указанием неиспользуемых переменные вообще?

Update0

Последний использованный код доступен здесь .

#ifdef __cplusplus
    // C++ allows you to omit parameter names if they're unused
#   define OMIT_PARAM
#else
    // A variable name must be provided in C, so make one up and mark it unused
#   define OMIT_PARAM3(uniq) const omitted_parameter_##uniq VARATTR_UNUSED
#   define OMIT_PARAM2(uniq) OMIT_PARAM3(uniq)
#   define OMIT_PARAM OMIT_PARAM2(__COUNTER__)
#endif

#ifdef _MSC_VER
#   define VARATTR_UNUSED
#else
#   define VARATTR_UNUSED __attribute__((unused))
#endif

Он используется следующим образом:

void blah(char const *OMIT_PARAM) {}

И позволяет избежать предупреждений о неиспользуемых параметрах и безымянных параметрах, а также гарантирует, что они не будут уничтожать имя какой-либо другой переменной.

5
задан John Kugelman supports Monica 4 March 2014 в 19:39
поделиться