fileno, f_lock 및 f_ulock은 std = c99 플래그를 GCC에 추가 할 때 선언되지 않고 사용할 수 없습니다.

StackOverflow https://stackoverflow.com/questions/1423185

  •  07-07-2019
  •  | 
  •  

문제

AC 코드 에이 헤더가 있습니다

#include <stdio.h>
#include <unistd.h>

gcc 명령에 -std = c99 플래그를 추가 할 때까지 모든 것이 정상적으로 컴파일되었습니다 (활성화 얽매다). 그리고 이것은 다음과 같은 오류를 일으켰습니다.

경고 : 암시 적 기능 선언 fileno

오류: F_LOCK 선언되지 않은 (이 기능의 첫 번째 사용)
오류 : (각 명단 식별자는 한 번만보고됩니다. 오류 : 각 함수에 대해 나타납니다.)
오류: F_ULOCK 선언되지 않은 (이 기능에서 먼저 사용하십시오

이러한 오류/경고를 해결할 아이디어가 있습니까?

도움이 되었습니까?

해결책

POSIX 확장을 원하는 헤더에게 알려야합니다. 요즘 나는 다음을 사용합니다.

#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */

내가 컴파일하는 경우 -std=c89, 올바른 posix 버전을 제공합니다. 당신이 컴파일하는 경우 -std=c89, 올바른 POSIX 버전을 제공합니다. 나는 이것을 Solaris 9 및 10, MacOS X (10.4.x, 10.5.x), HP -ux 11.x, Linux (RHEL4 및 5, SUSE 9 및 10) 및 AIX 5.X 및 6.X -AFAICR에서 사용합니다. , 지금까지 문제없이.

이 stanza는 시스템 헤더가 포함되기 전에 (자신의 헤더 또는 각 소스 파일에) 표시되거나 동일한 효과를 달성해야합니다. -D_XOPEN_SOURCE=600 컴파일러 명령 줄 또는 다른 유사한 메커니즘에서.

다른 팁

노력하다

-std=gnu99

모든 확장을 가능하게하고 여전히 C99 언어 향상을 사용합니다.

BSD -ISMS 또는 -D_SVID_SOURCE를 활성화하여 시스템 -V ISMS를 활성화하려면 -d_bsd_source를 시도 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top