ฉันคิดว่ามาตรฐาน C11 ครอบคลุมพฤติกรรมนี้และบอกว่าผลลัพธ์นั้นไม่ได้ระบุไว้และฉันไม่คิดว่า C18 ทำการเปลี่ยนแปลงใด ๆ ที่เกี่ยวข้องในพื้นที่นี้
ภาษามาตรฐานไม่ใช่เรื่องง่ายที่จะแยกวิเคราะห์ ส่วนที่เกี่ยวข้องของมาตรฐานคือ
 §6.7.9การเริ่มต้น ไวยากรณ์จัดทำเป็นเอกสาร:
  initializer:
                  assignment-expression
                  { initializer-list }
                  { initializer-list , }
  initializer-list:
                  designationopt initializer
                  initializer-list , designationopt initializer
  designation:
                  designator-list =
  designator-list:
                  designator
                  designator-list designator
  designator:
                  [ constant-expression ]
                  . identifier
โปรดทราบว่าหนึ่งในเงื่อนไขคือนิพจน์การกำหนดและเนื่องจากa[2] = 1เป็นนิพจน์การกำหนดโดยไม่ต้องสงสัยจึงอนุญาตให้อยู่ในตัวเริ่มต้นสำหรับอาร์เรย์ที่มีระยะเวลาไม่คงที่:
  §4นิพจน์ทั้งหมดในตัวเริ่มต้นสำหรับอ็อบเจ็กต์ที่มีระยะเวลาการจัดเก็บแบบคงที่หรือเธรดต้องเป็นนิพจน์คงที่หรือตัวอักษรสตริง
หนึ่งในย่อหน้าสำคัญคือ:
  §19การกำหนดค่าเริ่มต้นจะต้องเกิดขึ้นตามลำดับรายการตัวเริ่มต้นโดยตัวเริ่มต้นแต่ละตัวจัดเตรียมไว้สำหรับวัตถุย่อยเฉพาะที่แทนที่ค่าเริ่มต้นที่ระบุไว้ก่อนหน้านี้สำหรับวัตถุย่อยเดียวกัน 151) 
  วัตถุย่อยทั้งหมดที่ไม่ได้เริ่มต้นอย่างชัดเจนจะถูกเตรียมใช้งานโดยปริยายเช่นเดียวกับวัตถุที่มีระยะเวลาการจัดเก็บแบบคงที่
  
  151) ตัวเริ่มต้นใด ๆ สำหรับวัตถุย่อยที่ถูกแทนที่และไม่ได้ใช้เพื่อเริ่มต้นวัตถุย่อยนั้นอาจไม่ได้รับการประเมินเลย
และอีกย่อหน้าสำคัญคือ:
  §23การประเมินนิพจน์รายการการเริ่มต้นจะถูกจัดลำดับอย่างไม่แน่นอนซึ่งเกี่ยวเนื่องกันดังนั้นจึงไม่ระบุลำดับที่ผลข้างเคียงใด ๆ เกิดขึ้น 152)
  
  152)โดยเฉพาะอย่างยิ่งลำดับการประเมินไม่จำเป็นต้องเหมือนกับลำดับของการเริ่มต้นวัตถุย่อย
ฉันค่อนข้างแน่ใจว่าย่อหน้า§23ระบุว่าสัญกรณ์ในคำถาม:
int a[5] = { a[2] = 1 };
นำไปสู่พฤติกรรมที่ไม่ระบุรายละเอียด การมอบหมายให้a[2]เป็นผลข้างเคียงและลำดับการประเมินของนิพจน์จะเรียงตามลำดับอย่างไม่แน่นอนซึ่งเกี่ยวเนื่องกัน ดังนั้นฉันไม่คิดว่าจะมีวิธีอุทธรณ์มาตรฐานและอ้างว่าคอมไพเลอร์เฉพาะจัดการสิ่งนี้อย่างถูกต้องหรือไม่ถูกต้อง
               
              
a[2]=11