2016-09-23 16 views
1

dprintf()을 사용할 때 경고 메시지 "dprintf의 암시 적 선언"이 표시됩니다. 그것은 필요한 파일이 포함되지 않았 음을 의미하는 경향이 있지만, 필요한 모든 것으로되어있는 stdio.h가 이미 포함되어 있습니다. dprintf에 필요한 다른 것이 있습니까?dprintf 암시 적 선언 경고

답변

3

의은 "feature_test_macros"절을 man 페이지는 stdio.h가 dprintf()를 선언하도록하기 위해 #include <stdio.h> 전에 먼저 #define _POSIX_C_SOURCE 200809L (이상)을 사용해야 함을 설명합니다. 그 이유는 POSIX.1-2008까지는 dprintf()가 표준화되지 않았지만 <stdio.h>은 그 코드가 "dprintf"라는 자체 식별자를 사용 했더라도 그 전에 작성된 코드로 작업해야합니다. (_GNU_SOURCE를 정의 또는 _XOPEN_SOURCE 또한 리눅스에서 작동,하지만 _POSIX_C_SOURCE 일반 휴대 성을위한 최고의 선택입니다.)

2

일부 매크로를 설정해야 할 수도 있습니다. 어떤 include의 전에 파일의 상단에 넣어

#define _POSIX_C_SOURCE 200809L 
#define _GNU_SOURCE 

(그 중 하나는 충분하다하지만 난 당신이 사용하는 GLIBC 버전 모르는) 다음

+0

또는'#define _XOPEN_SOURCE 700'. 또는'-std = gnu11'. –

+0

@JonathanLeffler :'-std = gnu11'의 주석에 덧붙여 GCC가 파일의 맨 위에 놓이지 않는 옵션입니다. – deamentiaemundi

0

당신은 fprintf()here을 위해 찾아 볼 수 있습니다.

동일한 문제가 발생하여 POSIX 기반 컴퓨터에서 실행해야하므로 내 코드가 변경되어야합니다. 따라서 fprintf()은 여러 가지 옵션 중 하나입니다. 예 :

fprintf(stderr,"file not found"); 
관련 문제