Neden bu geçerli C
reddit Bu kod ile karşılaştım. Tip dönüşümleri bu neden olmuş geçersiz sanırdım.
int a[3] = { { {1, 2}, {3, 4}, 5, 6 }, {7, 8}, {9}, 10 };
Çınlama, skaler bir başlatıcı aşırı unsurları ve diş teli hakkında bazı uyarılar alıyorum. Ama a
içeriğini [1, 7, 9]
.
Bu aslında meşru olduğunu, ve eğer varsa, biri neler olduğunu açıklayabilir mi?
CEVAP
Aşırı unsurlar sadece göz ardı edilir. İki bölümü vardır6.7.8 Başlatmadeğer verdiğin. İlk paragraf 17:
Brace-kapalı her başlatıcı listesi ilişkili geçerli bir nesne var. Hiçbir belirtme vardır, subobjects geçerli nesne başlatıldı amacıyla göre türünün geçerli nesne: dizi öğelerini artan indis amacıyla, yapı üyeleri beyanname düzeni, ve ilk adlı üye bir sendika.
Bu bir 1, 7 ve 9 - O teller tarafından belirlenen alır geçerli nesne olsun açıklıyor. Daha sonra, paragraf 20: ekstralar hakkında hiçbir şey umurunda değil neden
... sadece yeterince başlatıcılar listeden önünde hesap için öğeleri veya üyelerinin subaggregate veya ilk üyesi bulunan birlik; kalan başlatıcılar kaldı başlatmak için bir sonraki öğe veya üye toplamak olan mevcut subaggregate veya içerdiği Birliği'nin bir parçası.
C ve C her ikisi içinde geçerli bir ko...
Neden bu program geçerli mi? Bir sözdi...
Neden Boş Dizeleri Bitiştirmek için Ge...
Neden 0[0] sözdizimsel olarak geçerli ...
Neden Google ana kaldırılmış HTML (ıe....