Rumah >pembangunan bahagian belakang >C++ >Namakan kekeliruan dan extern 'C' dalam 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.
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 }
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 }
Contoh
int printf(const char *format,...); main() { printf("Hello World"); }
undefined reference to `printf(char const*, ...)' ld returned 1 exit statusNota:
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!