นี่คือไฟล์ C อย่างง่ายที่มีนิยาม enum และmainฟังก์ชั่น:
enum days {MON, TUE, WED, THU};
int main() {
enum days d;
d = WED;
return 0;
}
มัน transpiles เพื่อ LLVM IR ต่อไปนี้:
define dso_local i32 @main() #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
store i32 0, i32* %1, align 4
store i32 2, i32* %2, align 4
ret i32 0
}
%2เห็นได้ชัดว่าเป็นdตัวแปรซึ่งได้รับ 2 กำหนดให้กับมัน อะไรคือสิ่งที่%1ตรงกับถ้าศูนย์ส่งคืนโดยตรง?
clang-9 -S -emit-llvm simple.c
main( godbolt.org/z/kEtS-s ) ลิงก์แสดงวิธีการแมปประกอบกับแหล่งที่มา
mainตัวแปรพิเศษลึกลับจะหายไป ที่น่าสนใจก็จะหายไปถ้าคุณไม่ใช้returnคำสั่งทั้งหมด (ซึ่งถูกต้องตามกฎหมายmainใน C และเทียบเท่าreturn 0;)
mainตามที่int main(int argc, char **argv)เห็นargcและargvคัดลอกลงในสแต็ก แต่ตัวแปรศูนย์ลึกลับยังคงมีอยู่นอกเหนือจากพวกเขา