Estranha reclamação do compilador C ou C++ [RESOLVIDO]

1. Estranha reclamação do compilador C ou C++ [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 10/05/2020 - 23:40h

Não entendo o porque o compilador está reclamando de variável não usada, quando ela é usada e inclusive está recebendo um valor no Loop!
O que me parece um erro do compilador g++ v.9.2.0

Olha esse pedaço do código:
for(int Caracter, Line_Number = 0; (Caracter = getc(MyFile)) != EOF;) {
Qty_Char_per_line++;
if(Caracter == '\n') {
Qty_Char_per_line--; // Tiro 1 Caracter pq é o caracter invisível (\n) de final de linha
if(Qty_Char_per_line > Qty_Char_Largest_Line) {
Qty_Char_Largest_Line = Qty_Char_per_line;
Line_Number = Current_Line;
}
Qty_Char_per_line = 0;
Current_Line++;
}
}

O Compilador reclama que não estou usando a variável Line_Number.
1) Eu uso ela qdo eu dou um valor 0 para ela
2) Eu uso ela qdo eu passo o valor de Current_Line para ela!

Veja a reclamação do compilador:

g++ Contacts.cpp -o Contacts `wx-config --libs --cxxflags` -O3 -Wall -pedantic -pedantic-errors -Werror

Contacts.cpp: In member function ‘void MyProgram::BtSaveGroupsClick(wxCommandEvent&)’:
Contacts.cpp:1539:22: error: variable ‘Line_Number’ set but not used [-Werror=unused-but-set-variable]
1539 | for(int Caracter, Line_Number = 0; (Caracter = getc(MyFile)) != EOF;) {
| ^~~~~~~~~~~
cc1plus: all warnings being treated as errors

Isso para mim não faz sentido nenhum! Porque neste caso específico ele diz que não uso a variável???

Acresentando, compilando em C com gcc Test.c -o Test -O3 -Wall -pedantic -pedantic-errors -Werror
Dá no mesmo, ele também diz que não uso a variável, ou seja tanto em C qto C++ ele reclama da mesma coisa


  


2. MELHOR RESPOSTA

Mauricio Ferrari
mauricio123

(usa Slackware)

Enviado em 10/05/2020 - 23:51h

Tem que ver a aplicação dessa variável ao longo do código. Só com esse pedaço não dá pra dizer o porque desse erro, pois nesse trecho a variável fica sem uma utilidade de fato. Preciso entender melhor esse trecho.

___________________________________
Conhecimento não se Leva para o Túmulo.

3. Re: Estranha reclamação do compilador C ou C++

Nick Us
Nick-us

(usa Slackware)

Enviado em 10/05/2020 - 23:53h

Bom, vou colocar aqui um exemplo que não faz nada, mas dá pra reproduzir o problema, ainda falando da variável Line_Number que é usada 2 vezes! no código.
Compila usando:
gcc Test.c -o Test -O3 -Wall -pedantic -pedantic-errors -Werror 

#include <stdio.h>
int main(void) {
for(int Caracter, Line_Number = 0, x = 10, Current_Line = 1, Qty_Char_per_line = 0, Qty_Char_Largest_Line = 0; x < 10; x++) {
Qty_Char_per_line++;

if(Caracter == '\n') {
Qty_Char_per_line--;
if(Qty_Char_per_line > Qty_Char_Largest_Line) {
Qty_Char_Largest_Line = Qty_Char_per_line;
Line_Number = Current_Line;
}
Qty_Char_per_line = 0;
Current_Line++;
}
}
}



4. Re: Estranha reclamação do compilador C ou C++ [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 11/05/2020 - 00:04h

mauricio123 escreveu:

Tem que ver a aplicação dessa variável ao longo do código. Só com esse pedaço não dá pra dizer o porque desse erro, pois nesse trecho a variável fica sem uma utilidade de fato. Preciso entender melhor esse trecho.

___________________________________
Conhecimento não se Leva para o Túmulo.

No trecho que falo, a utilidade da variável é guardar o número da linha informada!
Line_Number = Current_Line; 

Ou seja eu estou varrendo um arquivo então eu pego a Linha Atual do arquivo exemplo: Linha 3 e Guardo 3 na variável Line_Number
Ou seja, ela tem uma utilidade sim! Eu penso que guardar uma informação é uma utilidade!
Por exemplo se eu colocar logo abaixo do for um Incremento dela, tipo Line_Number++; o compilador para de reclamar.
Logo fazendo isso não muda em nada o resultado, ou seja, esse incremento é inútil sem utilidade nem resultado no código em si já que dou um valor a ela logo depois. E isso ele aceita com sendo usado! Enquanto o que de verdade está sendo usado, ele não entende!






5. Re: Estranha reclamação do compilador C ou C++ [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/05/2020 - 03:59h

Você não está usando a variável para nada mesmo.

Do mesmo modo como guardar jornais velhos é inútil se você nunca mais for ler esses jornais, também é inútil gravar valores numa variável que nunca é consultada.

Como você pediu ao compilador que otimize seu código (-O3), e também pediu que ele emita alertas sobre qualquer atividade suspeita (-Wall), o compilador está corretamente falando com você que tem uma coisa esquisita ali, que pode ser melhorada e que, portanto, requer sua atenção.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


6. Re: Estranha reclamação do compilador C ou C++

Nick Us
Nick-us

(usa Slackware)

Enviado em 11/05/2020 - 18:46h

paulo1205 escreveu:Você não está usando a variável para nada mesmo.
Do mesmo modo como guardar jornais velhos é inútil se você nunca mais for ler esses jornais, também é inútil gravar valores numa variável que nunca é consultada.
Como você pediu ao compilador que otimize seu código (-O3), e também pediu que ele emita alertas sobre qualquer atividade suspeita (-Wall), o compilador está corretamente falando com você que tem uma coisa esquisita ali, que pode ser melhorada e que, portanto, requer sua atenção.

Poxa, inicialmente não entendi sua resposta, mas compreendi o que você disse, então mais uma vez revisei o processo inteiro desse código não acreditando nisso!
Foi quando eu descobri que SIM o processo dela parou qdo ela recebeu o valor e nada mais! Ficando como vc falou um Lixo inútil.

O que aconteceu é que ela era usada! Porém com muitas mudanças que fiz, apagando e modificando código HOJE ao reanalisar percebi que o código que usava essa variável não existe mais! E eu não havia percebido isso porque se eu estava pegando o valor da Linha é porque era importante! E de fato ela FOI importante ANTES mas não agora.

Então o Compilador estava tentando me mostrar isso, e eu não consegui enxergar como um Todo o uso da variável!
Bom eu removi ela completamente, pq ela estava sendo mesmo inútil.




7. Re: Estranha reclamação do compilador C ou C++ [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 11/05/2020 - 18:50h

mauricio123 escreveu:

Tem que ver a aplicação dessa variável ao longo do código. Só com esse pedaço não dá pra dizer o porque desse erro, pois nesse trecho a variável fica sem uma utilidade de fato. Preciso entender melhor esse trecho.
___________________________________
Conhecimento não se Leva para o Túmulo.

É incrível como eu li sua resposta com atenção, e não entendi! Vc comenta que eu deveria ver a variável ao longo do código, não sei como eu não prestei atenção a isso para ter feito exatamente isso! Pois somente na resposta do Paulo que é praticamente a mesma coisa que vc cita, consegui compreender


8. Re: Estranha reclamação do compilador C ou C++ [RESOLVIDO]

José
DeuRuimDotCom

(usa Linux Mint)

Enviado em 18/05/2020 - 01:31h

Nick-us escreveu:

mauricio123 escreveu:

Tem que ver a aplicação dessa variável ao longo do código. Só com esse pedaço não dá pra dizer o porque desse erro, pois nesse trecho a variável fica sem uma utilidade de fato. Preciso entender melhor esse trecho.
___________________________________
Conhecimento não se Leva para o Túmulo.

É incrível como eu li sua resposta com atenção, e não entendi! Vc comenta que eu deveria ver a variável ao longo do código, não sei como eu não prestei atenção a isso para ter feito exatamente isso! Pois somente na resposta do Paulo que é praticamente a mesma coisa que vc cita, consegui compreender


Pedindo vênia aos foristas para uma questão de ordem, smj, não se necessita conhecer o restante do código para emitir um juízo a respeito da inutilidade da variável Line_Number, uma vez que seu escopo se limita ao loop-for.