(Знатокам Си) Что означает такой синтаксис...

gopnik1994

static bool Callback(const char * srvurl, void * cookie) 
{
(void)cookie; // <-- что это?...
....

Maurog

это чтобы компилятор не ругался, что есть неиспользуемая переменная ?

yolki

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

yolki

на неиспользованный параметр функции вроде давно уже никто не ругается.
всякие #pragma argsused это атавизм имхо

nikita270601

это чтобы компилятор не ругался, что есть неиспользуемая переменная ?
Думаю, так и есть. Либо не компилятор, а какой-нибудь lint.

nikita270601

lint'ы разные ругаются. У нас на работе, например, есть Style Guide, и под него настроен lint, который ругается в т.ч. на unused variable.

Maurog

в fftw видел такой дефайн
#define UNUSED(x) voidx

gopnik1994

это чтобы компилятор не ругался, что есть неиспользуемая переменная ?
видимо да, для этого. А как это компилятор обработает? Он подобную конструкцию просто пропустит или код какой сгенерит?

Maurog

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

Maurog

еще делают вот так, чтобы добиться того же эффекта:
  
static bool Callback(const char * srvurl, void * /*cookie*/)
{
....

vall

или код какой сгенерит
ага xorl %eax,%eax =)
Оставить комментарий
Имя или ник:
Комментарий: