นี่คือไฟล์ 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
คัดลอกลงในสแต็ก แต่ตัวแปรศูนย์ลึกลับยังคงมีอยู่นอกเหนือจากพวกเขา