İşte bir enum tanımı ve main
işlevi olan basit bir C dosyası :
enum days {MON, TUE, WED, THU};
int main() {
enum days d;
d = WED;
return 0;
}
Aşağıdaki LLVM IR'ye aktarılır:
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" nin atanmış olduğu değişken. %1
Sıfır doğrudan döndürülürse neye karşılık gelir?
clang-9 -S -emit-llvm simple.c
main
( godbolt.org/z/kEtS-s ). Bağlantı, montajın kaynağa nasıl eşlendiğini gösterir
main
, gizemli ekstra değişken kaybolur. İlginç bir şekilde, return
ifadeyi tamamen atlarsanız da kaybolur ( main
C için yasal ve eşdeğerdir return 0;
).
main
olarak int main(int argc, char **argv)
görmek argc
ve argv
yığını üzerine kopyalanan ancak gizemli sıfır değişken onlara ek olarak hala var.