Explicação detalhada de arquivos de cabeçalho e arquivos de origem em C ++
1. Modo de compilação C ++
Geralmente, em um programa C ++, existem apenas dois tipos de arquivos - .CPP FILE e .H FILE. Entre eles, o arquivo .cpp é chamado de arquivo de origem C ++, e o código -fonte de C ++ é colocado nele; enquanto o arquivo .h é chamado de arquivo de cabeçalho C ++, e o código -fonte do C ++ é colocado nele.
A linguagem C ++ suporta "compilação separada". Em outras palavras, todo o conteúdo de um programa pode ser dividido em diferentes partes e colocado em diferentes arquivos .cpp. As coisas no arquivo .cpp são relativamente independentes. Ao compilar (compilar), você não precisa se comunicar com outros arquivos. Você só precisa se vincular a outros arquivos de destino após compilá -los no arquivo de destino. Por exemplo, uma função global "void a () {}" é definida no arquivo A.CPP, e essa função precisa ser chamada no arquivo B.CPP. Mesmo assim, os arquivos A.CPP e B.CPP não precisam conhecer a existência um do outro, mas podem compilá -los separadamente. Depois de compilá -los no arquivo de destino, vincule -os e todo o programa pode ser executado.
Como isso é alcançado? Do ponto de vista dos programas de redação, é muito simples. No arquivo B.CPP, antes de chamar a função "void a ()", declare a função "vazio a ();" primeiro. Isso ocorre porque o compilador gerará uma tabela de símbolos ao compilar B.CPP. Símbolos como "void a ()" que não podem ser vistos serão armazenados nesta tabela. Ao vincular novamente, o compilador procurará a definição desse símbolo em outros arquivos de objeto. Uma vez encontrado, o programa pode ser gerado sem problemas.
Observe que existem dois conceitos mencionados aqui, um é "Definição" e o outro é "Declaração". Simplificando, "Definição" significa descrever um símbolo de uma maneira completa e completa: seja uma variável ou uma função, que tipo ele retorna, quais parâmetros ele precisa etc. "Declaração" apenas declara a existência desse símbolo, ou seja, diz ao compilador que esse símbolo é definido em outros arquivos. Vou usá -lo primeiro. Quando você vincular, vá para outro lugar para descobrir o que é. Ao definir, você deve definir um símbolo (variável ou função) completamente de acordo com a sintaxe C ++ e, ao declarar, você só precisa escrever o protótipo deste símbolo. Deve -se notar que um símbolo pode ser declarado várias vezes ao longo do programa, mas deve ser definido apenas uma vez. Imagine, se houver duas definições diferentes de um símbolo, quem o compilador deve ouvir?
Esse mecanismo traz muitos benefícios aos programadores de C ++ e também leva a um método de escrita. Considere que, se houver uma função muito usada "void f () {}" que será chamado em muitos arquivos .cpp em todo o programa, precisamos apenas definir essa função em um arquivo e declarar essa função em outros arquivos. Uma função é fácil de lidar e significa apenas uma frase para declará -la. No entanto, e se houver muitas funções, como um monte de funções matemáticas, existem centenas delas? Todo programador pode escrever com precisão e escrever todas as funções na forma deles?
2. O que é um arquivo de cabeçalho
Obviamente, a resposta é impossível. Mas existe uma maneira muito simples de ajudar os programadores a economizar o problema de lembrar tantos protótipos de função: podemos escrever todas as declarações de declaração de centenas de funções primeiro e colocá -las em um arquivo. Quando o programador precisar deles, copie todas essas coisas em seu código -fonte.