Rumah > pembangunan bahagian belakang > C++ > Bolehkah Panggilan Fungsi Berperilaku Berbeza dalam C dan C Walaupun Kod Sah?

Bolehkah Panggilan Fungsi Berperilaku Berbeza dalam C dan C Walaupun Kod Sah?

Susan Sarandon
Lepaskan: 2024-11-08 14:27:02
asal
789 orang telah melayarinya

Can Function Calls Behave Differently in C and C   Despite Valid Code?

Bolehkah Kod Sah dalam Kedua-dua C dan C Berkelakuan Berbeza Apabila Disusun dalam Setiap Bahasa?

C dan C berkongsi banyak persamaan, tetapi kod tertentu binaan boleh menghasilkan hasil yang berbeza apabila disusun dalam bahasa ini, walaupun jika kod itu sah dari segi sintaksis dalam kedua-duanya.

Panggilan Fungsi lwn. Pengisytiharan Objek

Satu senario sedemikian melibatkan fungsi panggilan. Dalam C90, fungsi boleh dipanggil tanpa pengisytiharan terlebih dahulu. Walau bagaimanapun, dalam C , objek jenis f dicipta apabila f() dipanggil tanpa pengisytiharan.

Contoh Kod:

Pertimbangkan kod berikut:

#include <stdio.h>

struct f { int x; };

int main() {
    f();
}

int f() {
    return printf("hello");
}
Salin selepas log masuk

Perbezaan Tingkah Laku:

  • C90: Dalam C90, kod berjaya menyusun dan memanggil fungsi f(), yang belum telah diisytiharkan tetapi boleh dipanggil. Ia mencetak "hello."
  • C : Dalam C , kod itu menyusun tetapi tidak mencetak "hello." Sebaliknya, ia mencipta objek sementara jenis f. Sebaik sahaja panggilan f() selesai, objek dimusnahkan, jadi "hello" tidak dicetak.

Pertimbangan Versi:

Tingkah laku ini perbezaan adalah khusus untuk C90. Dalam versi piawai C yang lebih baru (cth., C99), ia tidak lagi sah untuk memanggil fungsi tanpa pengisytiharan. Akibatnya, kod akan berkelakuan sama dalam kedua-dua C dan C .

Atas ialah kandungan terperinci Bolehkah Panggilan Fungsi Berperilaku Berbeza dalam C dan C Walaupun Kod Sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan