Bolehkah Kod Sah dalam Kedua-dua C dan C Berkelakuan Berbeza dengan Penyusun Khusus Bahasa?
C dan C berkongsi banyak persamaan, tetapi perbezaan ketara wujud. Ini menimbulkan persoalan sama ada kod yang sah dalam kedua-dua bahasa mungkin mempamerkan gelagat yang berbeza apabila disusun menggunakan pengkompil khusus untuk setiap bahasa.
Mengabaikan penggodaman berkaitan prapemproses dan menganggap keseragaman dalam aspek yang ditentukan pelaksanaan, satu senario di mana percanggahan tingkah laku sedemikian timbul ialah pengendalian panggilan fungsi dan pengisytiharan objek.
Dalam konteks ini, contoh di bawah menunjukkan perbezaan antara C dan C :
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
Dalam C , kod ini mencetuskan penciptaan objek f sementara yang segera dimusnahkan. Oleh itu, ia tidak menghasilkan output.
Sebaliknya, C90 membenarkan fungsi yang tidak diisytiharkan dipanggil. Akibatnya, kod akan mengeluarkan "hello" apabila disusun dengan pengkompil C90.
Perbezaan ini berakar umbi dalam fakta bahawa C90 menganggap perisytiharan f() sebagai panggilan fungsi, manakala C mentafsirkannya sebagai pengisytiharan objek f. Perbezaan ini menyerlahkan nuansa halus yang boleh membawa kepada kelakuan yang berbeza-beza merentas bahasa pengaturcaraan yang berbeza.
Atas ialah kandungan terperinci Bolehkah Kod Sah dalam Kedua-dua C dan C Berkelakuan Berbeza Apabila Disusun dengan Penyusun Khusus Bahasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!