강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Lucas님의 프로필 이미지
Lucas

작성한 질문수

홍정모의 따라하며 배우는 C언어

3.7 다양한 정수형들

3.7 다양한 정수형들 중간 실습에서 long long 타입 printf() 질문입니다.

작성

·

17

1

안녕하세요.

따라해 보며 진행 중 질문 드립니다.

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)로 주어진 %ldlong이 아닌 long long 타입 변수를 전달해서 그렇습니다.

빌드 이전 에디터에서 보이는 초록 밑줄 또는 빨간 밑줄은 Intellisense에서 감지하는 구문 오류이며, 빌드 이후 output 창에서 보이는 warning이나 error는 컴파일 결과로 인해 나타납니다.

Visual Studio 버전이 같다고 하셨으니 강의에서는 없던 경고가 질문자님께 보이는 이유는 아마 두 가지중 하나일 것 같네요.

  1. 경고들은 경고 수준 설정에 따라 보일 수도, 보이지 않을 수도 있습니다.

  2. 강의에서도 Visual Studio 2019를 사용하지만, 사용하는 컴파일러는 같지 않을 수 있습니다. VS 2019도 계속해서 업데이트가 진행되고 있으며, 컴파일러가 구문 검사를 엄격하게 진행하도록 수정되었을 수도 있습니다.

강의에선 각 자료형의 표현 범위를 맞춰야한다고 강조하고 있는데요, 그걸 나타내는 경고라고 보시면 됩니다.

0

안녕하세요, 인프런 AI 인턴입니다. Lucas님.

질문 주신 내용에 대해 설명드리겠습니다. printf 함수 형식 지정자와 관련된 문제는 종종 C프로그램에서 발생할 수 있는 경고 중 하나입니다. 이 오류와 경고는 주로 불일치하는 데이터 유형과 형식 지정자 때문에 발생합니다.

문제의 원인 및 해결:

printf("long long = %lld, %ld\n", ll, ll); 여기서 %lldlong long 데이터 유형을 출력할 때 사용해야 하는 형식 지정자입니다. 그러나 %ldlong 타입에 맞는 형식 지정자로, long long 타입의 변수인 ll과 잘 맞지 않습니다. 이를 통해 경고가 발생하는 것을 볼 수 있습니다.

해결 방법:

C 프로그램에서 printf의 형식 지정자가 데이터 타입과 맞지 않을 경우, VS와 같은 컴파일러에서 경고를 표시합니다. 장기적으로 봤을 때, 이를 무시하기보다는 형식 지정자를 맞춰주는 것이 좋습니다. 따라서, 두 번째 인수에도 %lld을 사용해보세요.

printf("long long = %lld, %lld\n", ll, ll);

이렇게 하면 경고가 없을 것입니다. long long 데이터 유형에 적합한 형식 지정자를 사용하게 되므로 올바른 출력 형식으로 확인할 수 있습니다.

더불어 다음 링크들을 통해 관련된 내용을 더 이해하실 수 있습니다:
- 형식 지정자 크기 및 자료형에 대한 질문입니다.: 해당 문제에 대한 비슷한 상황 및 추가 설명이 있습니다.

이와 같은 작은 실수는 가끔 발생할 수 있으니, 항상 데이터 타입과 형식 지정자를 잘 맞춰주는 습관을 가지면 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Lucas님의 프로필 이미지
Lucas

작성한 질문수

질문하기