C, C++: Parâmetro não utilizado

Palavras-chave: warning, unused parameter, variable

Em alguns casos temos que implementar uma função (na maioria dos casos uma callback) cujo o protótipo já é definido pela API utilizada. Alguns parâmetros podem ser desnecessários, mas geram warnings de compilação caso não forem utilizados. O exemplo a seguir gera um warning quando compilado com o gcc:

void my_callback(char *data, int size)
{
        printf("Size is %d\n", size);
        return;
}

foo.c:2: warning: unused parameter 'data'

Podemos contornar esta situação de duas formas. A primeira e mais portável é fazer um cast para o tipo void:

void my_callback(char *data, int size)
{
        (void) data;
        printf("Size is %d\n", size);
        return;
}

A segunda forma é usar uma extensão do gcc:

void my_callback(char *data __attribute__((unused)), int size)
{
        printf("Size is %d\n", size);
        return;
}
This entry was posted in C, CPP. Bookmark the permalink.

4 Responses to C, C++: Parâmetro não utilizado

  1. O cast pode ser feito utilizando uma macro. Algo do tipo:

    #define UNUSED(x) ((void) (x))

    void my_callback(char *data, int size)
    {
    UNUSED (data);
    printf(“Size is %dn”, size);
    return;
    }

    []’s

  2. Marcus says:

    Um acréscimo:
    Em C++ (mas não em C), é possível simplesmente omitir o nome do parâmetro que não vai ser usado:

    void my_callback(char *, int size)
    {
    printf(“Size is %d\n”, size);
    }

  3. Ademar Reis says:

    Marcus: mas omitindo o parâmetro, sua callback não casa mais com a declaração original e não será chamada quando devia. Ou seja: não é porque dá pra ter vários métodos com o mesmo nome mas com um número diferente de parâmetros que eles sejam o mesmo… é justamente o contrário: embora tenham os mesmos nomes, são métodos diferentes.

    A sua callback só será executada se o programa principal tiver conhecimento e chamar explicitamente essa versão com apenas um parâmetro, o que não é o objetivo do examplo uma vez que estamos falando de callbacks.

  4. Ademar, ele não removeu o parâmetro, ele só omitiu o nome do parâmetro na declaração. A dica dele é válida, para quem está usando C++.

Comments are closed.