4.9 질문 있습니다.
312
작성한 질문수 4
printf("%hhd %f", i, f); int i = 300; f=21.753241f라 했을 때 인자가 stack에 복사될 때 %f 부분은 왜 정상적으로 출력이 될까요? stack에 복사될 때 애초에 1바이트로 짤려서 복사가 되는 건가요?
답변 1
1
안녕하세요, 답변 도우미 Soobak 입니다.
앞의 %hhd 형식지정자는 signed char 자료형의 인자를 기대합니다.
하지만, 실제로 전달되는 인자는 int i = 300 의 int 자료형입니다.
이 때, printf() 함수는 int 값을 signed char 자료형으로 해석하려고 하며, 이는 UB, 정의되지 않은 동작 입니다.
일반적으로 int 의 하위 1바이트만을 사용하여 signed char 으로 해석하려고 시도하지만, 이는 컴파일러나 환경에 따라 달라질 수도 있습니다.
만약, 이 부분에 대해서 "짤려서 복사되는 것" 으로 표현하신 것이라면 일부 맞게 이해하신 내용입니다.
추가적으로,
정의되지 않은 동작에 대한 해석은 컴파일러와 환경에 따라서 달라질 수 있다는 점
정의되지 않은 동작을 피하기 위해 자료형에 맞는 올바른 형식 지정자를 사용해야 한다는 점
스택 자료구조와
printf()함수가 인자를 읽어들이는 과정
위 내용들에 초점을 맞추고 주의하시면서 이해하시는 것이 보다 더 적절할 것 같습니다.
1
"짤려서 복사되는 것"이라 말한 이유는 4.9 강의 내용대로라면 printf에 인자가 stack에 복사될 때 4바이트로 복사된다면 %hhd를 해석하는 과정에서 밀려서 %f 값까지 잘못 해석할 거라고 생각했는데 %f가 잘 나오는 것으로 보아 애초에 스택에 1바이트만 짤려서 복사된 건가라고 유추해 봤기 때문입니다. 초점에 어긋나는 것은 압니다만 궁금해서 여쭤봅니다.
0
안녕하세요, 답변 도우미 Soobak 입니다.
제가 답변을 전달하는 데에 있어서 잘 전달 못드린 것 같아요! 죄송합니다...
단순화해서 정리하여 말씀을 전달드린다는 것이, 답변을 하는 말투에 오해를 불러일으키지 않았나 생각이 듭니다... 🥲
개인적으로, 전혀 초점에 어긋나지 않는 좋은 질문이셨다고 생각했어요!!
질문자님께서 어느 것을 유추하시며 질문하시는지 이해를 하였었고,
저 또한 앞의 %hhd형식지정자와 int 로인해 뒤의 %f 해석이 잘못 될 줄 알았는데요...!
질문자님 덕분에 저도 직접 실험하고, 자료를 찾으며 공부해보면서 답변을 드린 것이라, 재미있다고 생각한 답변이었습니다.
제가 오해를 하게 말씀드려서 다시 한번 진심으로 죄송합니다...!
궁금한 점이 있으실 때마다 언제든지 편하게 질문해주세요!
저도 앞으로 더욱 신경써서 답변드리도록 하겠습니다...!!!
Export template 안됨
1
26
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
56
3
main 함수에서 왜 int만 선언이 되는걸까요
1
57
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
55
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
49
1
프로토타입과 함수간의 인자 불일치
1
73
2
12.12 헤더 관련 질문
1
60
2
Visual Studio Community 2026 사용 문의
1
138
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
61
2
getchar(), putchar()
1
94
3
강의자리ㅛ
1
80
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
114
2
소스파일안에 여러 파일
1
76
2
F5와 F7의 차이
1
78
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
70
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
76
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
61
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
65
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
54
2





