Olá, seja bem-vindo de volta.
Nesta palestra, quero apenas examinar alguns compiladores e avisos comuns.
Conversamos sobre alguns dos problemas comuns de c.
Mas às vezes você nem sabe que tem esses erros em seu programa quando o
compilador está tentando lhe dizer isso.
Os erros e avisos do compilador tendem a ser realmente enigmáticos para novos programadores.
Eles podem estar dizendo a você que está faltando um ponto-e-vírgula, mas indica o fim da instrução inalcançável.
E para alguém novo, eles podem nem saber o que isso significa.
Portanto, é preciso muita prática para escrever muitos códigos
e decifrar alguns desses avisos do compilador ao longo do tempo.
Mas eu gostaria de avisar você antes disso.
Portanto, alguns dos problemas comuns que você viu na aula anterior,
na verdade, descreverei alguns dos avisos e erros do compilador e o que eles realmente dirão.
É muito, muito importante lhe dizer para entender o que o compilador está lhe dizendo.
Se o compilador está informando os erros, mas você não entende esse
erro, vai demorar muito mais para corrigir o código.
Mas se você vir o erro e souber exatamente o que ele
está dizendo, poderá corrigi-lo imediatamente.
Eu me lembro, eu estava no laboratório quando
comecei a programar e
faltava um ponto-e-vírgula, algo muito comum. E o compilador estaria me dizendo que estou faltando um ponto-e-vírgula,
mas eu não saberia disso,
ele apenas diria o fim inalcançável da declaração, e eu estaria tipo, o que
isso significa, o que é uma declaração. Eu ficaria muito confuso.
É por isso que eu queria dar algumas dicas sobre o que o compilador está realmente tentando lhe dizer.
Portanto, é muito difícil entender do que o compilador está reclamando.
Decifrar essas mensagens às vezes
é muito confuso.
Então, você precisa entender esses erros do compilador para corrigi-los, muito básico.
E o compilador está fazendo metade do trabalho para você.
É verificar a sintaxe, dizendo exatamente o que está errado, então
você deve usar isso a seu favor.
Mas às vezes é difícil entender exatamente o que está dizendo, especialmente se você
for novo e não entender um pouco da terminologia.
O compilador toma decisões sobre como traduzir seu código que
o programador não escreveu no código.
Isso é conveniente para o programa e o compilador, para que
possa ser escrito de forma mais sucinta.
E apenas programadores experientes tiram proveito desse recurso.
Então, o que estou dizendo é que quando você compila, você sempre
deve usar a opção de painel de controle.
Isso vai ligar tudo.
Então, às vezes, um recurso mais avançado é que você
realmente removerá algumas coisas,
fará com que a tradução seja um pouco mais eficiente.
Mas quando você adiciona isso,
você faz com que o programa seja compilado de forma diferente.
E, como resultado, você pode ter avisos em seu código que você não conhece.
Portanto, digo isso para que você sempre queira compilar com uma determinada opção, que é
a opção de painel de controle.
E você, por padrão, está ativado em blocos de código.
E isso irá notificá-lo de todos os casos em que o
compilador está fazendo coisas que você não conhece.
Ele também ativará todos os avisos,
fornecerá muitas informações, é uma opção de compilador muito útil.
Depois de ativar essa opção, você pode tentar
ajudá-lo a entender melhor o que o compilador está lhe dizendo.
Portanto, o compilador mostrará dois tipos
de problemas. Um é um erro.
Na verdade, isso impedirá a criação do programa.
Você tem um erro de sintaxe e o programa não pode ser compilado.
Nenhum trabalho
executável recriado e. Normalmente, quando você vê erros do compilador, sempre
quer se concentrar naquele primeiro erro.
Esse é o erro
mais confiável porque alguns dos outros erros podem ser resultado do primeiro erro.
Portanto, sempre concentre-se no primeiro erro. Corrija os erros na parte superior primeiro
e, em seguida, compile novamente para ver se os outros erros desaparecem.
Avisos. Avisos são mensagens que o
compilador mostra para situações especiais e nas quais foi detectado algum tipo de anomalia.
Eles são erros não fatais. Portanto, o executável será criado.
Mas ainda é algo que você deve consertar.
Um aviso existe por um motivo. Você está fazendo algo incorreto
ou pode causar um problema no futuro.
Portanto, você deseja sempre corrigir todos os seus avisos.
E ao compilar com a opção de painel de
controle, você não considera o programa correto até que todos os avisos tenham sido eliminados.
Portanto, a compilação não falhará. É por isso que digo
a você para usar esta opção, bem como ver tudo o que está acontecendo pelo compilador.
Portanto, algumas das mensagens mais comuns do compilador que você encontrará, e
isso estará diretamente relacionado a alguns dos problemas de c mais
comuns que mencionamos anteriormente.
Se uma variável não for declarada, você verá esta variável de mensagem não declarada
primeiro usando esta função.
Este é um dos mais comuns e geralmente mais fáceis de detectar.
E então também exibirá o símbolo
antes desta mensagem.
Basicamente, ele dirá que
você está tentando usar essa variável, mas nunca realmente a declarou.
Sabemos que, ao declarar uma variável, você especifica o tipo de dados.
Você não pode simplesmente assinar dados para variáveis que não existem.
Um aviso de declaração implícita de função, isso está relacionado às declarações de função.
É quando você está tentando chamar uma função, mas
se a função não tem nenhuma implementação associada. Você não incluiu o cabeçalho ou
não o declarou. Então ele não sabe onde está,
e não sabe como a função é declarada, não conhece os argumentos, não sabe o valor de retorno.
Não tem informações sobre a função em si?
Para resolver isso, sempre declare um protótipo de função no topo.
Outro aviso é que dirá que o controle de aviso chega ao fim da função não
nula, isso acontecerá quando uma função tiver sido definida como retornando um resultado que não é nulo,
mas não há nenhuma instrução de retorno incluída na função.
Então você se esqueceu de devolver os dados.
Ou a função está definida incorretamente, onde você deve remover o tipo de dados
antes da declaração da função, ou você se esqueceu de
adicionar essa instrução de retorno. Um dos outros deve
ser alterado para corrigir esse aviso.
Mas você vê como isso é um aviso. Você ainda pode compilar lá,
mas isso pode realmente causar problemas de corte em seu programa.
Se você está esperando que uma função retorne algo e ela não retorna, você deseja corrigir seus
avisos, a variável não utilizada é outro aviso comum.
Isso é impresso pelo compilador quando uma variável é declarada, mas nunca é usado.
Você não deve declarar uma variável se não
a usar, então remova essa declaração.
Eu tendo isso um pouco quando faço algumas das minhas demos
porque deixo variáveis que nunca uso.
Ou quando eu estava demonstrando como declarar uma variável e
a compilei para mostrar a você que compilou, recebia um aviso dizendo que ela nunca foi usada.
Então está tudo bem porque eu estava demonstrando algo. Mas remova suas
variáveis se não estiverem sendo usadas. Não há necessidade de declarar.
Referência indefinida. Isso acontece na fase de vinculação.
Portanto, lembre-se do compilador ou da fase de compilação, ele irá compilar.
Primeiro, ele executará o pré-processador, depois gerará os arquivos-objeto e, em seguida, pegará esses
arquivos-objeto e os vinculará para formar um programa completo.
Portanto, durante a fase de
vinculação, ele precisa resolver quaisquer dependências externas.
Ou, especificamente, quaisquer funções que você está chamando, elas precisam
ser implementadas em algum lugar.
Então, se ele não tiver esse arquivo objeto, isso vai lhe dar esse problema.
Você está tentando invocar uma função, mas não temos o código para ela.
Portanto, você deve certificar-se de criar um link
para este arquivo.
Normalmente, o link acontecerá para
você, mas no GCC você pode apenas fazer a opção travessão l
para adicionar o arquivo de link. Portanto, se você estiver usando uma função
no arquivo de cabeçalho matemático, mas não estiver vinculando ao arquivo de objeto matemático, receberá este erro.
E também acontece se você definiu o usuário e não
incluiu um arquivo de origem c.
Portanto, você tem vários arquivos de origem c.
Um dos arquivos de origem c está implementando esta função.
Outro arquivo-fonte c está incluindo o cabeçalho e
chamando-o, mas você
nunca compilou o outro arquivo-fonte c que tem a implementação, você verá
este erro.
Portanto, certifique-se de trazer esse arquivo fonte, certifique-se de trazer
quaisquer arquivos fonte de biblioteca padrão se você precisar explicitamente, geralmente, você não precisa fazer isso.
Outro erro comum é quando há tipos conflitantes para.
Isso é quando você realmente definiu ou declarou um protótipo de função e então quando
foi implementá-lo, não era o mesmo como você o declarou.
Assim, por exemplo, o protótipo tem um tipo de resultado e um nome entre parênteses para os parâmetros
e um ponto e vírgula.
E então, quando você define a implementação,
você tem um cabeçalho de função real diferente.
Você tem um tipo de retorno diferente ou um número diferente de parâmetros.
E isso quer dizer bem, ei, você tem
essa declaração de função única. E então, quando você vai implementá-lo abaixo, é completamente diferente.
Portanto, há uma incompatibilidade.
E isso irá realmente mostrar a você na linha que o conflito
aparece na definição anterior que causou a contradição.
Portanto, na implementação é geralmente onde ele mostra a linha, porque
geralmente você declara suas funções no topo.
Erros de tempo de execução. Erros de tempo de execução são problemas em
seu código que acontecem quando você executa o programa, não quando você o compila.
Portanto, geralmente são
travamentos ou erros não fatais em que o
array está fora dos limites ou algo parecido.
É quando o programa está rodando, você tem algum tipo de erro lógico.
Portanto, a execução de programas c pode terminar abruptamente com uma falha quando um erro de tempo de
execução é detectado, algo que ele não pode controlar. Há uma corrupção de memória,
como mencionei.
Erros fora dos limites geralmente fazem com que os programas travem.
Normalmente, o que você verá é uma falha de segmentação.
E a falha de segmentação realmente não diz nada.
Então, normalmente, o que você deseja fazer para diagnosticar melhor esse problema
é olhar a pilha de chamadas, como
mencionei antes, o programa trava, passo a passo, linha por
linha para ver qual linha está causando o travamento.
Você pode obter a pilha de chamadas se houver um arquivo principal, que mencionei anteriormente.
E então, na pilha de chamadas, você pode ver qual linha está travando.
Ou melhor ainda, execute o depurador, passo a linha, e então ao executar uma
linha, depurador, você verá o programa travar e poderá identificá-lo dessa forma.
Portanto, essas são apenas mais algumas dicas
sobre erros do compilador, avisos e mensagens e como interpretá-los.
Na verdade, existem
links online. Ou se
você fizer google, ele vai lhe dizer cada erro do compilador
e aviso que pode ser produzido e vai realmente dar
uma definição de por que isso foi produzido
e qual era o problema essencialmente.
Porque, novamente, esses erros de compilação podem ser muito enigmáticos.
E até mesmo uma palavra dizia
controle inalcançável. Você sabe a partir dessa descrição,
necessariamente, a menos que tenha experiência, isso significa, oh, você nunca retorna algo de uma função.
Mas se você fizer isso, uma das melhores maneiras de encontrar e
corrigir problemas em seu programa quando você tem erros de compilador e não entende
esse compilador, pesquise no Google. E normalmente o que acontecerá é que você irá acumular o estouro.
E ele vai te dizer ei, este é o seu erro, é assim que
você o resolve. Eu faço isso até hoje.
Eu programo em c há 15 anos, mas ainda há
momentos em que encontro coisas, e fico pensando o que exatamente isso significa.
E vou pesquisar no Google, pegarei o compilador, colocarei entre aspas e ele
me dirá exatamente o que está acontecendo.
Stack Overflow é um site muito, muito bom.
E pode realmente economizar muito tempo no
processo de depuração. Não tente adivinhar quando vir compiladores ou avisos.
Esse compilador está tentando dizer algo a você e identificará exatamente o que está acontecendo.
Portanto, se você entender, será capaz de consertar seu problema muito, muito mais rápido.
E se não for algo com o qual
você está familiarizado, vá para overflow de pilha ou vá para um site que descreve todos
eles e você pode decifrar dessa forma.
Eu espero que isso tenha sido útil. Obrigada.