ID Artikel: 000073768 Jenis Konten: Pemecahan Masalah Terakhir Ditinjau: 14/09/2011

Hasil yang salah dari Operasi Logis atau Kondisional dengan Efek Samping

Lingkungan

  • Intel® Quartus® II Edisi Berlangganan
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    Masalah Kritis

    Deskripsi

    Compiler C2H selalu mengevaluasi kedua operan logis (&&, ||) dan kondisif (?:) Operator. Hal ini berbeda dari Standar Nasional Amerika yang diharapkan Perilaku Institute (ANSI) C, di mana operan dievaluasi dari kiri ke kanan, dan operan yang tidak perlu dilewati.

    Misalnya, dalam ekspresi (i-- && j--), jika nilainya i nol, ANSI C tidak mengevaluasi ekspresi sisi kanan (RHS), dan j tidak dinyatakan. Sebaliknya, Compiler C2H mengevaluasi kedua belah pihak, dekrementasi j.

    Ekspresi berikut adalah contoh lain yang mungkin dipengaruhi oleh masalah ini:

    if (i-- || j ) ...; a = ((cond == 1)? i : j );
    Resolusi

    Gunakan operasi logis dan kondisional yang operatornya memiliki tanpa efek samping. Operasi dengan efek samping termasuk pra-dan pasca- peningkatan dan operasi dekreasi ( , --), operasi memori (*, [], ., ->), dan panggilan fungsi.

    Produk Terkait

    Artikel ini berlaku untuk 1 produk

    Perangkat yang Dapat Diprogram Intel®

    Isi halaman ini adalah kombinasi terjemahan manusia dan komputer dari konten berbahasa Inggris. Konten ini diberikan hanya untuk kenyamanan Anda serta sebagai informasi umum dan tidak bisa dianggap sebagai lengkap atau akurat. Jika terdapat kontradiksi antara versi bahasa Inggris halaman ini dan terjemahannya, versi bahasa Inggris akan didahulukan. Lihat versi bahasa Inggris halaman ini.