Rumah >pembangunan bahagian belakang >C++ >Mengapa Kemasukan Berbilang Fail Pengepala Menyebabkan Ralat 'Definisi Berbilang' dalam C ?

Mengapa Kemasukan Berbilang Fail Pengepala Menyebabkan Ralat 'Definisi Berbilang' dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-12-27 17:00:11852semak imbas

Why Does Multiple Inclusion of a Header File Cause

Berbilang Takrifan Pembolehubah dalam C

Dalam C , mentakrifkan pembolehubah berbilang kali boleh membawa kepada ralat penyusunan. Isu ini boleh timbul apabila berbilang fail menyertakan fail pengepala, menghasilkan berbilang takrifan pembolehubah yang sama.

Pertimbangkan senario berikut:

// FileA.cpp
#include "FileA.h"

int main()
{
    hello();
    return 0;
}
// FileA.h
#ifndef FILEA_H_
#define FILEA_H_
void hello();
#endif
// FileB.cpp
#include "FileB.h"
// FileB.h
#ifndef FILEB_H_
#define FILEB_H_

int wat;
void world();
#endif

Semasa menyusun kod ini, anda mungkin menghadapi ralat "takrifan berbilang wat'" kerana kedua-dua FileA.h dan FileB.h mentakrifkan pembolehubah wat`.

Penyelesaian:

Untuk menyelesaikan isu ini, kita boleh menggunakan kata kunci luaran. Kata kunci ini mengisytiharkan pembolehubah sebagai wujud di tempat lain dalam program dan menghalangnya daripada ditakrifkan beberapa kali.

// FileB.h
extern int wat;
// FileB.cpp
int wat = 0;

Dengan mengisytiharkan wat sebagai extern dalam FileB.h, kami pada dasarnya memberitahu pengkompil bahawa takrifan wat wujud dalam fail lain (FileB.cpp dalam kes ini). Ini memastikan bahawa tidak akan terdapat berbilang takrifan pembolehubah dan membolehkan kompilasi diteruskan tanpa ralat.

Atas ialah kandungan terperinci Mengapa Kemasukan Berbilang Fail Pengepala Menyebabkan Ralat 'Definisi Berbilang' dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn