Linux 2.6.36.4, GCC 4.7.2, recebendo muitos avisos de “conjunto de variáveis, mas não usados”

2

Eu estou tentando compilar o kernel Linux 2.6.36.4 no Linux Mint 14 rodando um kernel 3.5 por padrão. Usando o gcc versão 4.7.2. Tentei googling isso, mas não deu certo. O aviso é:

warning: variable ‘gfp’ set but not used [-Wunused-but-set-variable]

Eu tenho toneladas desses avisos em toda a compilação. A compilação não falha em lugar algum. E a pior parte é que o kernel compilado não inicializa com sucesso também.

Preciso definir mais opções do gcc? Ou eu deveria simplesmente ignorá-lo?

Nota: Estou trabalhando no VirtualBox. O kernel padrão funciona bem.

    
por Stark07 14.07.2014 / 13:43

2 respostas

1

Os avisos de "conjunto de variáveis, mas não usado" são informativos.

De acordo com a documentação oficial , -Wunused-but-set-variable controla o comportamento de:

Warn[ing] whenever a local variable is assigned to, but otherwise unused (aside from its declaration). This warning is enabled by -Wall.

O objetivo é capturar situações em que o programador atribui um valor a uma variável e, em seguida, nunca faz mais nada com ela. O kernel é bastante especial na medida em que nas profundas trincheiras da programação do sistema operacional de baixo nível, até eu posso imaginar situações em que fazer algo assim pode ser perfeitamente legítimo e até mesmo necessário para alcançar o resultado que você está procurando. .

Se a declaração de atribuição de variável for realmente desnecessária, é provável que o compilador a otimize.

A linha inferior, a menos que você seja o desenvolvedor, deve ser seguro ignorar essa classe de avisos. Se você é o desenvolvedor, você deve considerar se a atribuição é necessária. Se a portabilidade para compiladores não-GCC não for uma prioridade, considere adicionar o __attribute__((unused)) à declaração para suprimir o aviso para essa variável; veja também Atributos Variáveis .

    
por 14.07.2014 / 14:18
1

Or should I simply ignore it?

Variáveis não usadas poderiam ser uma indicação de um erro de codificação. Se você estiver satisfeito, este não é o caso e quer suprimir o aviso para uma variável em particular, você pode usar um (específico do GCC) __attribute__ tag, por exemplo:

/* Unused parameter (in definition, not declaration): */
void somefunc (int x __attribute__ ((unused))) {
    [...]
}

/* Unused variable. */
int x __attribute__ ((unused));
/* But set... */
x = 1;

O primeiro caso não é incomum se você estiver cumprindo uma API - por exemplo, escrevendo um retorno de chamada em que você ignora o parâmetro, mas deve corresponder à assinatura de retorno de chamada. O segundo caso parece um pouco paradoxal, mas pode ser útil temporariamente se você declarou e definiu algo que ainda não usou e não quer se distrair com o aviso, etc.

Isso provavelmente é melhor do que desativar -Wunused-parameter e / ou -Wunused-but-set-variable .

    
por 14.07.2014 / 14:44