Bolehkah Kod Nampaknya Inert Berlaku Berbeza dalam C dan C ?
Dalam C dan C , manakala pertindihan sintaksis adalah ketara, nuansa antara bahasa boleh membawa kepada hasil yang tidak dijangka. Walaupun kod yang mematuhi kedua-dua piawaian mungkin kelihatan tidak berbahaya, memang terdapat senario di mana ia boleh menghasilkan tingkah laku yang berbeza apabila disusun di bawah setiap bahasa.
Satu contoh yang menarik adalah berkisar tentang percanggahan halus antara panggilan fungsi dan pengisytiharan objek dalam C dan C . Dalam C90, fungsi boleh digunakan tanpa pengisytiharan terlebih dahulu. Walau bagaimanapun, dalam C , amalan ini dilarang.
Pertimbangkan coretan berikut:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
Dalam C , kod ini kekal senyap kerana objek f sementara dicipta dan kemudiannya dimusnahkan, tanpa meninggalkan jejak. Walau bagaimanapun, dalam C90, fungsi f boleh digunakan kerana pengisytiharan tersiratnya. Akibatnya, "hello" dicetak ke konsol.
Peristiwa ini menyerlahkan kepentingan memahami perbezaan halus antara C dan C , walaupun apabila kod itu kelihatan mematuhi kedua-dua bahasa. Dengan menyedari nuansa sedemikian, pengaturcara boleh mengelakkan tingkah laku yang tidak dijangka dan menulis kod yang berfungsi dengan lancar merentas persekitaran kompilasi yang berbeza.
Atas ialah kandungan terperinci Bolehkah Kod C/C yang Nampak Lengai Berkelakuan Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!