Rumah >pembangunan bahagian belakang >C++ >Mengapa Kod Yang Sama Mencetak 'hello' dalam C dan Tiada apa-apa dalam C ?

Mengapa Kod Yang Sama Mencetak 'hello' dalam C dan Tiada apa-apa dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-09 16:25:03784semak imbas

Why Does the Same Code Print

Perbezaan Tingkah Laku dalam Kod Sah Antara C dan C

Walaupun C dan C berkongsi banyak persamaan, terdapat beberapa keadaan di mana kod sah dalam kedua-duanya bahasa boleh menghasilkan hasil yang berbeza apabila disusun dalam setiap bahasa masing-masing.

Panggilan Fungsi dan Pengisytiharan Objek

Satu senario sedemikian adalah berkaitan dengan perbezaan dalam panggilan fungsi dan pengisytiharan objek. Dalam C90, fungsi boleh dipanggil tanpa diisytiharkan terlebih dahulu. Dalam C, bagaimanapun, fungsi yang tidak diisytiharkan tidak dibenarkan. Perbezaan ini boleh membawa kepada tingkah laku yang berbeza apabila menyusun kod berikut:

#include <stdio.h>

struct f { int x; };

int main() {
    f();
}

int f() {
    return printf("hello");
}

Dalam C, kod ini tidak akan mencetak apa-apa kerana objek sementara jenis f dicipta dan dimusnahkan, mengakibatkan kehilangan ahli x . Dalam C90, bagaimanapun, ia akan mencetak "hello" kerana fungsi boleh dipanggil tanpa diisytiharkan.

Nyahkekaburan Nama

Satu lagi perkara yang perlu diberi perhatian ialah penggunaan nama f dalam kod contoh. Kedua-dua C dan C membenarkan penggunaan nama yang sama untuk fungsi dan struktur. Untuk mencipta objek dalam C , struct f mesti dinyatakan secara eksplisit. Jika kata kunci struct ditinggalkan, kod tersebut akan ditafsirkan sebagai panggilan fungsi. Perbezaan ini, digabungkan dengan perbezaan dalam konvensyen panggilan, menyumbang kepada tingkah laku berbeza yang diperhatikan semasa menyusun kod dalam C dan C .

Atas ialah kandungan terperinci Mengapa Kod Yang Sama Mencetak 'hello' dalam C dan Tiada apa-apa dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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