3.7 다양한 정수형들 중간 실습에서 long long 타입 printf() 질문입니다.
안녕하세요.
따라해 보며 진행 중 질문 드립니다.
printf("long long = %lld, %ld\n", ll, ll);VS에서 위 라인에 초록색 물결 밑줄이 생깁니다. 마우스를 올려다 보면 다음과 같은 메시지가 나옵니다.
C6328: Size mismatch: '__int64' passed as _Param(3)_ when 'int'is required in call to 'printf'.
또한 빌드를 해보면 output 창에 다음과 같은 메시지가 함께 뜹니다.
warning C4477: 'printf' : format string '%ld' requres an argument of type 'long', but variadic argument 2 has type '__int64'
message: consider using '%lld' in the format string
message: consider using '%l64d' in the format string
solution Configureration과 solution platform은 수업처럼 Debug x86입니다.
vS2019사용 중입니다.
수업 화면과 달리 이런 메시지들은 왜 뜨는걸까요?
답변 2
1
안녕하세요? 질문&답변 도우미 durams입니다.
에러 문구가 잘 설명을 해 주고 있네요. printf의 세 번째 format specifier (conversion specifier)로 주어진 %ld에 long이 아닌 long long 타입 변수를 전달해서 그렇습니다.
빌드 이전 에디터에서 보이는 초록 밑줄 또는 빨간 밑줄은 Intellisense에서 감지하는 구문 오류이며, 빌드 이후 output 창에서 보이는 warning이나 error는 컴파일 결과로 인해 나타납니다.
Visual Studio 버전이 같다고 하셨으니 강의에서는 없던 경고가 질문자님께 보이는 이유는 아마 두 가지중 하나일 것 같네요.
경고들은 경고 수준 설정에 따라 보일 수도, 보이지 않을 수도 있습니다.
강의에서도 Visual Studio 2019를 사용하지만, 사용하는 컴파일러는 같지 않을 수 있습니다. VS 2019도 계속해서 업데이트가 진행되고 있으며, 컴파일러가 구문 검사를 엄격하게 진행하도록 수정되었을 수도 있습니다.
강의에선 각 자료형의 표현 범위를 맞춰야한다고 강조하고 있는데요, 그걸 나타내는 경고라고 보시면 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. Lucas님.
질문 주신 내용에 대해 설명드리겠습니다. printf 함수 형식 지정자와 관련된 문제는 종종 C프로그램에서 발생할 수 있는 경고 중 하나입니다. 이 오류와 경고는 주로 불일치하는 데이터 유형과 형식 지정자 때문에 발생합니다.
문제의 원인 및 해결:
printf("long long = %lld, %ld\n", ll, ll); 여기서 %lld는 long long 데이터 유형을 출력할 때 사용해야 하는 형식 지정자입니다. 그러나 %ld는 long 타입에 맞는 형식 지정자로, long long 타입의 변수인 ll과 잘 맞지 않습니다. 이를 통해 경고가 발생하는 것을 볼 수 있습니다.
해결 방법:
C 프로그램에서 printf의 형식 지정자가 데이터 타입과 맞지 않을 경우, VS와 같은 컴파일러에서 경고를 표시합니다. 장기적으로 봤을 때, 이를 무시하기보다는 형식 지정자를 맞춰주는 것이 좋습니다. 따라서, 두 번째 인수에도 %lld을 사용해보세요.
printf("long long = %lld, %lld\n", ll, ll);
이렇게 하면 경고가 없을 것입니다. long long 데이터 유형에 적합한 형식 지정자를 사용하게 되므로 올바른 출력 형식으로 확인할 수 있습니다.
더불어 다음 링크들을 통해 관련된 내용을 더 이해하실 수 있습니다:
- 형식 지정자 크기 및 자료형에 대한 질문입니다.: 해당 문제에 대한 비슷한 상황 및 추가 설명이 있습니다.
이와 같은 작은 실수는 가끔 발생할 수 있으니, 항상 데이터 타입과 형식 지정자를 잘 맞춰주는 습관을 가지면 좋습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Export template 안됨
1
49
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
73
3
main 함수에서 왜 int만 선언이 되는걸까요
1
63
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
62
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
60
1
프로토타입과 함수간의 인자 불일치
1
81
2
12.12 헤더 관련 질문
1
66
2
Visual Studio Community 2026 사용 문의
1
152
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
65
2
getchar(), putchar()
1
97
3
강의자리ㅛ
1
87
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
120
2
소스파일안에 여러 파일
1
81
2
F5와 F7의 차이
1
83
2
c = TWO * (a+b); 에서 a와 b는?
1
64
2
; 세미콜론을 붙이는 기준에 문의
1
73
1
Step over 기능 문의
1
57
2
2.6 강의 따옴표 출력 규칙 문의
1
82
2
int main 함수 관련 오류 문의
1
72
2
13.4 words[0]
0
65
2
11.7 함수를 구현해 봤습니다.
1
66
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
69
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
59
2
11.6 fit_str함수를 구현해 봤습니다.
1
56
2





