Rumah >pembangunan bahagian belakang >C++ >Mengapakah Penghantaran ke `batal` dalam C Mencegah Amaran Manakala Pelakon Lain Tidak?

Mengapakah Penghantaran ke `batal` dalam C Mencegah Amaran Manakala Pelakon Lain Tidak?

Linda Hamilton
Linda Hamiltonasal
2024-12-07 12:39:15389semak imbas

Why Does Casting to `void` in C   Suppress Warnings While Other Casts Don't?

Kesan Menarik Casting kepada batal

Dalam C , tindakan menyekat amaran tentang pembolehubah yang tidak digunakan menggunakan (kosong)x meluas. Walau bagaimanapun, penghantaran ke batal mempamerkan gelagat pelik jika dibandingkan dengan menghantar kepada jenis lain.

Amaran dan Hantaran Pengkompil

Pertimbangkan coretan kod berikut:

int main()
{
    int x;
    (short)x;
    (void)x;
    (int)x;
}

Menyusun kod ini dengan amaran didayakan menggunakan -Wall -Wextra menghasilkan berikut:

warning: statement has no effect [-Wunused-value]
     (short)x;
warning: statement has no effect [-Wunused-value]
     (int)x;

Ini menunjukkan bahawa hantaran ke batal berkelakuan berbeza daripada hantaran kepada jenis lain.

Penjelasan Kemungkinan

Dua kemungkinan penjelasan untuk ini perbezaan timbul:

  1. (kosong)x hanyalah satu konvensyen untuk menyekat amaran, manakala pelakon lain tidak mempunyai kesan sedemikian, walaupun semua kenyataan adalah sama tidak berkesan.
  2. Tingkah laku ini dikaitkan dengan fakta bahawa void x; adalah pengisytiharan yang tidak sah, tidak seperti x pendek;.

Jawapan yang Betul

Penjelasan yang betul ialah yang pertama. Menghantar kepada batal ialah mekanisme penindasan amaran khusus. Standard menyatakan secara eksplisit dalam §5.2.9/4:


Sebarang ungkapan boleh ditukar secara eksplisit kepada menaip "cv void." Nilai ungkapan
dibuang.

Oleh itu, pemutus ke batal tidak mempunyai kesan praktikal ke atas pelaksanaan program. Ia hanya berfungsi untuk menyenyapkan amaran tentang pembolehubah yang mungkin tidak digunakan.

Atas ialah kandungan terperinci Mengapakah Penghantaran ke `batal` dalam C Mencegah Amaran Manakala Pelakon Lain Tidak?. 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