Namakan kekeliruan dan extern 'C' dalam C++

WBOY
Lepaskan: 2023-08-29 10:21:11
ke hadapan
1300 orang telah melayarinya

名称混淆和extern "C"在C++中

Dalam C++ kita boleh menggunakan ciri overloading fungsi. Menggunakan ciri ini, kita boleh mencipta fungsi dengan nama yang sama. Satu-satunya perbezaan ialah jenis parameter dan bilangan parameter. Jenis pemulangan tidak dipertimbangkan di sini. Persoalannya sekarang ialah, bagaimana C++ membezakan antara fungsi terlampau beban dalam kod sasaran?

Dalam kod sasaran, ia menukar nama dengan menambah maklumat tentang parameter. Teknik yang digunakan di sini dipanggil nama mangling. C++ tidak mempunyai teknik penggumpalan nama piawai. Oleh itu penyusun yang berbeza menggunakan teknik yang berbeza.

Di bawah adalah contoh nama mangling. Fungsi terlebih beban dinamakan func(), dan terdapat satu lagi fungsi my_function(). . tukar . Kod C++ berikut akan menghasilkan ralat.

Contoh

int func(int x) {
   return x*x;
}
double func(double x) {
   return x*x;
}
void my_function(void) {
   int x = func(2); //integer
   double y = func(2.58); //double
}
Salin selepas log masuk

Output

int __func_i(int x) {
   return x*x;
}
double __func_d(double x) {
   return x*x;
}
void __my_function_v(void) {
   int x = __func_i(2); //integer
   double y = __func_d(2.58); //double
}
Salin selepas log masuk

Masalah berlaku kerana pengkompil menukar nama printf(). Dan ia tidak menemui definisi fungsi printf() yang dikemas kini. Untuk menyelesaikan masalah ini kita perlu menggunakan extern "C" dalam C++. Apabila beberapa kod digunakan dalam blok ini, pengkompil C++ memastikan bahawa nama fungsi tidak rosak. Jadi nama tidak akan berubah. Jadi kod di atas akan kelihatan seperti ini untuk menyelesaikan masalah ini.

Contoh

int printf(const char *format,...);
main() {
   printf("Hello World");
}
Salin selepas log masuk

Output

undefined reference to `printf(char const*, ...)'
ld returned 1 exit status
Salin selepas log masuk

Nota:

Blok kod ini mungkin menghasilkan hasil yang berbeza dalam penyusun yang berbeza.

Atas ialah kandungan terperinci Namakan kekeliruan dan extern 'C' dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan