identifier is undefined warning, para funções que já existem em #include

1

Eu tenho um código-fonte c ++ que compila normalmente no Visual Studio 2017, mas, estranhamente, o VS 2017 mostra em vermelho os nomes de algumas funções que criei e deixei em #include , acusando como identificador indefinido.

Bem, como é "indefinido" se as funções estão lá e o programa compila sem erros ?

O que estou perdendo?

    
por Rogério Dec 30.05.2018 / 17:19

2 respostas

1

O verificador de sintaxe no IDE não é 100% confiável. Eles estão ficando cada vez melhores, mas 100% de precisão não é alcançável, especialmente em linguagens como C e C ++ que permitem macros pré-processador e similares.

Certas combinações de #include, combinadas com namespaces e macro-expansões podem lançar o verificador de sintaxe, mesmo que o código esteja correto.

Um erro (ou apenas um aviso) em algum lugar no código ou em uma inclusão também pode criar avisos falsos de sintaxe mais abaixo no arquivo de origem.

Este não é apenas um problema com o Visual Studio. Isso pode acontecer em qualquer IDE ou editor que faça destaque / verificação de sintaxe. Eu vi isso acontecer no XCode, Eclipse e CodeBlocks também, apenas para citar alguns exemplos.

Em geral: Se você encontrar algo assim, é geralmente uma indicação de que o código-fonte que define a declaração (a inclusão que define explode () no seu caso) é possivelmente escrito de forma não clara, ambígua ou até errada. caminho. Mesmo que ele compila para seu uso específico de explode () na fonte, ele pode não fazer isso para todos os possíveis casos de uso.

Você deve considerar reformular esse código para que ele não mostre mais a linha vermelha. Será confuso para outro programador que precisa trabalhar no código mais tarde. E esse outro programador pode ser você, se você precisar revisitar o código alguns meses depois e esquecer tudo isso.

    
por 30.05.2018 / 17:39
0

É definitivamente um bug no VS 2017. Para testar, eu removi a função include e coloquei no corpo do código fonte: daí a linha vermelha desaparece. E o mais impressionante: depois de reativar a função de volta para incluir e excluí-la do código-fonte (ou seja, tudo exatamente como era antes), o VS não mostrava mais a linha vermelha, seja para essa função ou para as outras funções que apareceram anteriormente a mesma linha vermelha ...

E apenas por curiosidade, aqui está a função:

vector<string> explode(string linha, string delim) {
    vector<string> parte;
    size_t pos = 0,pos2 = 0;
    do {
        pos2 = linha.find(delim, pos);
        parte.push_back(linha.substr(pos, pos2-pos));
        pos = pos2+1;
    } while(pos2 != string::npos);
    return parte;
}

Eu não acho que o problema esteja no meu código ...

    
por 30.05.2018 / 18:53