Pertanyaan Perubahan terbaru dalam C11


C1x telah menjadi ISO / IEC 9899: 2011 alias C11.

Apakah ada yang tahu apa perubahan (jika ada) ada dalam Standar dari April 2011 draft n1570?

ETA: Ada risalah Komite dari London (Maret 2011) (yang harus dimasukkan dalam n1570) sini, dan dari Washington, DC (Oktober 2011) sini; Saya kira daftar perubahan yang diterima dalam menit DC harus mencakup banyak hal.


32
2017-12-25 19:44


asal


Jawaban:


Saya baru tahu hari ini bahwa ada satu (agak) perubahan signifikan antara N1570 dan standar C11 akhir (ISO / IEC 9899: 2011 (E)).

Di N1570, 6.3.2p3 mengatakan:

Kecuali ketika operan dari sizeof operator, yang _Alignof   operator, atau unary & operator, atau string literal yang digunakan untuk   menginisialisasi larik, ekspresi yang memiliki tipe "larik mengetik" aku s   dikonversi menjadi ekspresi dengan tipe "penunjuk ke mengetik"Itu poin   ke elemen awal dari objek array dan bukan lvalue.

Dimasukkannya _Alignof adalah kesalahan, karena sintaks a unary-expression izin

_Alignof ( type-name )

tapi tidak

_Alignof unary-expression

Standar C11 yang dirilis mengoreksi kesalahan ini dan kembali ke kata-kata C99:

Kecuali ketika operan dari sizeof operator, atau   unary & operator, atau string literal yang digunakan untuk menginisialisasi array, sebuah   ekspresi yang memiliki tipe "array of mengetik"diubah menjadi   ekspresi dengan tipe "pointer ke mengetik"Itu menunjuk ke awal   elemen objek array dan bukan lvalue.

Informasi lebih lanjut: dalam posting terbaru ke comp.std.c tentang perbedaan antara N1570 dan standar yang dirilis, Larry Jones, anggota komite ISO C, menulis:

Ada beberapa dari mereka, tetapi kebanyakan hanya tweak editorial minor,   perubahan teks boilerplate, dan menyeret hal-hal sekitar untuk menjaga   kekuatan yang bahagia. Perubahan terbesar adalah menghapus _Alignof dari a   banyak tempat seharusnya tidak ditambahkan (berdasarkan keliru   Gagasan yang dibutuhkan baik jenis atau ekspresi seperti sizeof tidak   ketika itu benar-benar hanya membutuhkan sebuah tipe): 6.3.2.1p2, p3, p4, fn. 65; dan   6.7.1 fn. 121.

ID-Pesan: <rfg33a-u0q.ln1@jones.homeip.net>

Ini utas seperti yang terlihat di groups.google.com.


11
2018-04-01 04:04



Dijawab oleh Jens Gustedt di komentar:

Menurut komentar oleh Larry Jones pada comp.std.c tidak ada perubahan signifikan dari N1569 (yang N1570 tanpa penanda perubahan). Satu-satunya hal yang masih belum terpecahkan adalah nilai untuk __STDC_VERSION__, tapi saya rasa paling alami itu akan terjadi 201112L.


5
2018-01-06 17:16



ISO telah diratifikasi dan diterbitkan sebagai ISO / IEC 9899: 2011 standar C11 (C1x) baru untuk bahasa pemrograman C. Perubahan utama dari standar sebelumnya (C99), seperti yang ditulis dalam Artikel Wikipedia C11, adalah sebagai berikut:

Standar ini mencakup beberapa perubahan pada spesifikasi bahasa dan perpustakaan C99, seperti:

  • Spesifikasi keselarasan (_Alignas penspesifikasi, _Alignof operator, aligned_allocfungsi, <stdalign.h> file header)
  • Itu _Noreturn penspesifikasi fungsi
  • Ekspresi tipe-generik menggunakan _Generic kata kunci. Misalnya, makro berikut cbrt(x) diterjemahkan menjadi cbrtl(x), cbrt(x) atau cbrtf(x) tergantung pada jenis x:

        #define cbrt(X) _Generic((X), long double: cbrtl, \
                                      default: cbrt, \
                                      float: cbrtf)(X)
    
  • Dukungan multithreading (_Thread_local specifier kelas penyimpanan, <threads.h> header termasuk fungsi pembuatan / manajemen thread, mutex, variabel kondisi dan fungsi penyimpanan khusus thread, serta _Atomic ketik kualifikasi dan <stdatomic.h> untuk akses objek tak terputus).
  • Dukungan Unicode yang ditingkatkan berdasarkan pada Laporan Teknis C Unicode ISO / IEC TR 19769: 2004 (char16_t dan char32_t jenis untuk menyimpan data yang dikodekan UTF-16 / UTF-32, termasuk fungsi konversi di <uchar.h> dan yang sesuai u dan U string awalan literal, serta u8 awalan untuk UTF-8 encoded literals).
  • Penghapusan gets fungsi, ditinggalkan dalam revisi standar bahasa C sebelumnya, ISO / IEC 9899: 1999 / Cor.3: 2007 (E), mendukung alternatif baru yang aman, gets_s.
  • Antarmuka pemeriksaan batas (Lampiran K).
  • Fitur analisis (Lampiran L).
  • Lebih banyak makro untuk query karakteristik tipe floating point, mengenai angka floating point subnormal dan jumlah digit desimal yang bisa disimpan.
  • Anonim struktur dan serikat pekerjaberguna ketika serikat dan struktur disarangkan, mis. di struct T { int tag; union { float x; int n; }; };.
  • Pernyataan statis, yang dievaluasi selama penerjemahan pada fase selanjutnya #if dan #error, ketika jenisnya dipahami oleh penerjemah.
  • Mode eksklusif buat-dan-buka ("…x" akhiran) untuk fopen. Ini berperilaku seperti O_CREAT|O_EXCL di POSIX, yang biasanya digunakan untuk mengunci file.
  • Itu quick_exit berfungsi sebagai cara ketiga untuk mengakhiri program, yang dimaksudkan untuk melakukan setidaknya deinitializition minimal jika penghentian dengan exit gagal.
  • Makro untuk pembangunan nilai-nilai kompleks (sebagian karena real + imaginary*I mungkin tidak menghasilkan nilai yang diharapkan jika imaginary tidak terbatas atau NaN).

Dari situs ISO Anda dapat membeli standar penuh yang diterbitkan. Berikut ini adalah abstrak yang diambil dari situs ISO:

ISO / IEC 9899: 2011 menetapkan formulir dan menetapkan interpretasi program yang ditulis dalam bahasa pemrograman C. Ini menentukan

  • representasi program C;
  • sintaks dan kendala bahasa C;
  • aturan semantik untuk menafsirkan program C;
  • representasi data input untuk diproses oleh program C;
  • representasi data output yang dihasilkan oleh program C;
  • pembatasan dan batas yang diberlakukan oleh implementasi yang sesuai dari C.

ISO / IEC 9899: 2011 tidak menentukan

  • mekanisme di mana program C ditransformasikan untuk digunakan oleh sistem pemrosesan data;
  • mekanisme dimana program C dipanggil untuk digunakan oleh sistem pemrosesan data;
  • mekanisme dimana data input diubah untuk digunakan oleh program C;
  • mekanisme dimana data output diubah setelah diproduksi oleh program C;
  • ukuran atau kompleksitas program dan datanya yang akan melebihi kapasitas sistem pemrosesan data spesifik atau kapasitas prosesor tertentu;
  • semua persyaratan minimal dari sistem pemrosesan data yang mampu mendukung implementasi yang sesuai.   ISO / IEC 9899: 2011 dirancang untuk mempromosikan portabilitas program C di antara berbagai sistem pemrosesan data. Ini dimaksudkan untuk digunakan oleh pelaksana dan pemrogram.

2
2018-01-07 00:20