Đây là một tệp C đơn giản với định nghĩa enum và mainhàm:
enum days {MON, TUE, WED, THU};
int main() {
enum days d;
d = WED;
return 0;
}
Nó chuyển mã sang LLVM IR sau:
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
}
%2hiển nhiên là dbiến, được 2 gán cho nó. Điều gì không %1tương ứng với nếu không được trả lại trực tiếp?
clang-9 -S -emit-llvm simple.c
main( godbolt.org/z/kEtS-s ). Liên kết cho thấy cách lắp ráp được ánh xạ tới nguồn
main, biến phụ bí ẩn sẽ biến mất. Thật thú vị, nó cũng biến mất nếu bạn bỏ qua returncâu lệnh hoàn toàn (đó là hợp pháp cho mainC và tương đương return 0;).
mainnhư int main(int argc, char **argv)bạn thấy argcvà argvsao chép vào ngăn xếp, nhưng biến zero bí ẩn vẫn còn đó ngoài chúng.