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
747 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!

sumber:php.cn
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