GNU/Linux >> Belajar Linux >  >> Linux

Mengapa penginisialisasi yang ditunjuk tidak diterapkan di g ++

Seperti yang saya catat dalam komentar, G++ tidak mendukung penginisialisasi yang ditunjuk standar C99, tetapi mendukung ekstensi GNU ke C90 yang memungkinkan penginisialisasi yang ditunjuk. Jadi ini tidak berhasil:

union value_t {
    char * v_cp;
    float v_f;
};
union value_t my_val = { .v_f = 3.5f };

Tapi ini tidak:

union value_t my_val = { v_f: 3.5f };

Ini tampaknya merupakan interaksi koordinasi yang buruk antara komite standar C dan C++ (tidak ada alasan yang sangat bagus mengapa C++ tidak mendukung sintaks C99, mereka hanya belum mempertimbangkannya) dan politik GCC (C++ seharusnya ' t mendukung sintaks C99 hanya karena ada di C99, tetapi harus mendukung sintaks ekstensi GNU yang mencapai hal yang persis sama karena itu adalah ekstensi GNU yang dapat diterapkan ke salah satu bahasa).


Saya mengalami masalah yang sama hari ini. g++ dengan -std=c++11 dan c++14 mendukung penginisialisasi yang ditunjuk, tetapi Anda masih bisa mendapatkan kesalahan kompilasi "test.cxx:78:9:maaf, tidak diterapkan:penginisialisasi yang ditunjuk non-sepele tidak didukung" jika Anda jangan menginisialisasi struct dalam urutan anggotanya telah ditentukan. Sebagai contoh

struct x
{
    int a;
    int b;
};

// This is correct
struct x x_1 = {.a = 1, .b = 2};
// This will fail to compile with error non-trivial designated initializer
struct x x_2 = {.b = 1, .a = 2};

Linux
  1. Mengapa Tautan Keras Ke Direktori Tidak Diizinkan Di Unix/linux?

  2. Mengapa Find Tidak Menerima '-exec Cp {} Dir +'?

  3. Mengapa Penundaan Lama Setelah Perintah Tidak Ditemukan?

  1. Mengapa Antarmuka Jaringan Tidak Di /dev Seperti Perangkat Lain?

  2. Mengapa Beberapa Port Dilaporkan Oleh Nmap Difilter Dan Bukan Yang Lain?

  3. Mengapa Rm -rf Dan Bukan Rmdir -rf?

  1. Mengapa file .so dapat dieksekusi?

  2. Apakah utas diimplementasikan sebagai proses di Linux?

  3. mengapa menghapus sejarah bash tidak cukup?