다음은 열거 형 정의와 main
함수 가있는 간단한 C 파일입니다 .
enum days {MON, TUE, WED, THU};
int main() {
enum days d;
d = WED;
return 0;
}
다음 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
0이 직접 반환되면 무엇에 해당합니까?
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
스택에 복사하지만, 신비 제로 변수가 그들에게 추가로 남아 있습니다.