2016-06-08 10 views
-1

в SDCC Compiler Руководство пользователя я прочитал следующее:Почему это предложение устраняет «предупреждение о несоответствии функций»?

void to_buffer(unsigned char c) 
{ 
c; // to avoid warning: unreferenced function argument 
__asm 
; save used registers here. 
; If we were still using r2,r3 we would have to push them here. 
; if(head != (unsigned char)(tail-1)) 
mov a,_tail 
dec a 
xrl a,_head 
; we could do an ANL a,#0x0f here to use a smaller buffer (see below) 
jz t_b_end$ 
; 
; buf[ head++ ] = c; 
mov a,dpl ; dpl holds lower byte of function argument 
mov dpl,_head ; buf is 0x100 byte aligned so head can be used directly 
mov dph,#(_buf>>8) 
movx @dptr,a 
inc _head 
; we could do an ANL _head,#0x0f here to use a smaller buffer (see above) 
t_b_end$: 
; restore used registers here 
__endasm; 
} 

Я не понимаю, что это предложение "c; // to avoid warning: unreferenced function argument" значит, это специальное использование SDCC? Или специальное использование языка C?

+0

Вы искали предупреждающее сообщение в комментарии? Что вы не поняли в expalanation? (Btw, он должен быть '(void) c;', иначе другие компиляторы, такие как gcc, могут жаловаться на «результат выражения, который не используется» или аналогичный.) Дополнение: самый первый результат поиска указывает на форум поддержки sdcc. – Olaf

ответ

0

Составители, как правило, предупреждают вас, если у вас есть параметр входящей функции, который вы не используете. В вашем случае c; является операцией void, чтобы получить доступ к переменной и избежать предупреждения. Он похож на

int func(char c) 
{ 
    (void)c; 
    //c is never used in the function 
} 

FWIW, в gcc, чтобы включить предупреждение, используется -Wunused-parameter вариант. (включено в -Wextra)

+0

Спасибо. И это специальное использование SDCC? Может ли это использоваться в других случаях? – Qiang

+0

@Qiang Это не _специальное использование, просто обходной путь для чистой компиляции. Однако всегда лучше менять код, чтобы избавиться от предупреждений, а не подавлять их. :) –