คำถามติดแท็ก c11

7
เหตุใด“ sizeof (a? true: false)” จึงให้เอาต์พุตสี่ไบต์
ฉันมีโค้ดเล็ก ๆ เกี่ยวกับตัวsizeofดำเนินการกับตัวดำเนินการที่เกี่ยวข้อง: #include <stdio.h> #include <stdbool.h> int main() { bool a = true; printf("%zu\n", sizeof(bool)); // Ok printf("%zu\n", sizeof(a)); // Ok printf("%zu\n", sizeof(a ? true : false)); // Why 4? return 0; } เอาท์พุท ( GCC ): 1 1 4 // Why 4? แต่ที่นี่, printf("%zu\n", sizeof(a ? true : …

7
ทำไม auto a = 1; รวบรวมใน C?
รหัส: int main(void) { auto a=1; return 0; } รวบรวมโดยไม่มีข้อผิดพลาดโดยคอมไพเลอร์ MS Visual Studio 2012 เมื่อไฟล์มีนามสกุล. c ฉันคิดมาตลอดว่าเมื่อคุณใช้นามสกุล. c การคอมไพล์ควรเป็นไปตามไวยากรณ์ C ไม่ใช่ C ++ ยิ่งไปกว่านั้นเท่าที่ฉันรู้ว่าอัตโนมัติที่ไม่มีประเภทนั้นอนุญาตให้ใช้เฉพาะใน C ++ ตั้งแต่ C ++ 11 ซึ่งหมายความว่าประเภทนั้นอนุมานจากตัวเริ่มต้น นั่นหมายความว่าคอมไพเลอร์ของฉันไม่ยึดติดกับ C หรือรหัสถูกต้องในภาษาซีจริงหรือไม่?
125 c  auto  c11 

3
การพิมพ์พอยน์เตอร์ว่างด้วย% p เป็นพฤติกรรมที่ไม่ได้กำหนด?
เป็นพฤติกรรมที่ไม่ได้กำหนดไว้ในการพิมพ์พอยน์เตอร์ว่างด้วยตัว%pระบุการแปลงหรือไม่ #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } คำถามนี้ใช้กับมาตรฐาน C ไม่ใช่กับการใช้งาน C

1
ความหมายของวัตถุที่ทับซ้อนกันใน C คืออะไร?
พิจารณาโครงสร้างต่อไปนี้: struct s { int a, b; }; โดยทั่วไป1 โครงสร้างนี้จะมีขนาด 8 และการจัดตำแหน่ง 4 จะเกิดอะไรขึ้นถ้าเราสร้างstruct sวัตถุสองชิ้น (แม่นยำยิ่งกว่านั้นเราเขียนลงในวัตถุสองหน่วยดังกล่าวที่จัดสรรแล้ว) โดยที่วัตถุที่สองซ้อนทับวัตถุแรก char *storage = malloc(3 * sizeof(struct s)); struct s *o1 = (struct s *)storage; // offset 0 struct s *o2 = (struct s *)(storage + alignof(struct s)); // offset 4 // now, o2 …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.