2017-09-09 1 views
-3

저는 최근에 C++ 용으로 사용할 새로운 IDE를 찾기 시작했습니다. 저는 Dev C++을 사용 했었습니다. 그러나 다른 IDE와 비교해 볼 때 조금 베어 본 것 같습니다.왜 printf는 Dev C++에서 작동하지만 CLion에서는 작동하지 않습니까?

저는 교수님과 이야기하려고 시도한 쟁점에 봉착했습니다. 그는 IDE 자체가 아니라 표준 라이브러리 구현으로 인한 것일 수 있다고 말했습니다. 그것? 요점을 알려 드리겠습니다.

Dev C++에서 printf ("% 14 .2f", 변수)라고 말하면 예상대로 인쇄됩니다. 그러나 CLion에서는 % 기호를 표시하고 "알 수 없음, 불완전 또는 선택적 형식 지정자"라고 말하고 내 변수 대신 14.2f를 인쇄합니다. 나는 이것이 아포스트로피 때문에 일어난다는 것을 알고 있지만, 나는 그것을 고치는 법을 모른다.

누구에게 아이디어가 있습니까? 제 교수는 GCC의 libstd ++가 잘 작동 할 것이라고 말했지만 그 정보로 무엇을 할 지 모르겠습니다 ...

고마워요!

편집 : 나는 그런데 Windows에 있습니다.

+0

'형식 문자열에 무엇이 있습니까? 그것은 C + +, 사용 std :: cout! –

+0

[documentation] (http://en.cppreference.com/w/cpp/io/c/fprintf)에서 설명한대로 : _ 변환 지정이 유효하지 않은 경우 동작은 정의되지 않습니다. 그러므로,'printf' 문에 의해 생성 된 출력은 여러분의 기대에 관계없이 "정확하다". –

+2

음 ... 아포스트로피를 제거 하시겠습니까? 그것은 printf 형식 지정자에서 유효하지 않습니다. 처음에 왜 그곳에 있습니까? –

답변

1

printf 형식 문자열 플래그 문자로 아포스트로피를 사용 POSIX에 의해 정의 된 확장 :

소수점 변환 (%i, %d 결과의 정수 부분, %u, %f , %F, %g 또는 %G)은 수천 개의 그룹으로 구성되어야합니다 ( 자). 다른 변환의 경우 동작이 정의되지 않습니다. 비 화폐 그룹화 문자 이 사용됩니다.

교수님의 의견입니다.이 확장 기능에 대한 지원은 IDE 또는 컴파일러가 아니라 표준 라이브러리 구현에 의해 결정됩니다.

그러나이 : ​​

내 교수는 GCC의 libstd는 ++ 잘 작동합니다 말했지만, 나는 그 정보를 어떻게 해야할지 모르겠어요.

libstdC++는 C++ 라이브러리입니다. printf 함수의 구현은 제공하지 않습니다. 이는 C 라이브러리의 일부입니다. (C++ 라이브러리에는 대부분의 C 라이브러리가 포함되어 있습니다.)

IDE에서 사용중인 C++ 구현 (컴파일러 및 라이브러리)을 조사해야합니다. Dev C++에서 사용되는 것과 동일한 C++ 구현을 사용하도록 CLion을 동축시킬 수 있습니다.

+0

"이 확장에 대한 지원은 IDE 또는 컴파일러가 아니라 표준 라이브러리 구현에 의해 결정됩니다." - 뭐라고? 이 기능에 대한 지원은 컴파일러가 결정할 수 있습니다. 예를 들어, GCC 컴파일러는 형식 문자열을보고 표준 C 나 C++ 컴파일러가이 기능을 지원할 필요가 없습니다. –

+0

@NeilButterworth : gcc 컴파일러는 형식 문자열, 경고를 발행하거나 발행하지 않은 후에는 전달한 인수를 사용하여'printf' 함수에 대한 호출을 생성합니다. gcc 나 clang도'printf'의 구현을 제공하지 않습니다. 예를 들어, 내 시스템에서'printf' 구현은 gcc와는 별도의 프로젝트 인 glibc에 의해 제공됩니다. –

+0

@KeithThompson 그런 일을 할 때 내가 어디에서 시작해야하는지 알고 있습니까? 이런 IDE를 변경하는 데 많은 경험이 없습니다. – Andersma

관련 문제