2016-09-06 3 views
0

내 CYGWIN 설치에서 <time.h>clock_gettime()#if defined(_POSIX_TIMERS)으로 정의됩니다. 다음 조건을 충족하는 경우-std = c90으로 컴파일 할 때 CYGWIN의 <time.h>에서 clock_gettime() 선언을 활성화하는 방법은 무엇입니까?

  1. __rtems__ 경우 정의, 또는
  2. - - 지금 _POSIX_TIMERS 만 조건에서 내 <sys/features.h> 파일에 정의되어
    #if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L

을 분명히 조건 2가 수 내 경우에는 만날 수 없다.

내가 __rtems__ 설정할 수 있습니다 (좋은) 방법 또는 내가 _POSIX_TIMERS 내 경우에 사용할 수 있는지 확인하십시오 수있는 다른 방법이 있나요 (즉 -std = C90 -pedantic)?

+1

C99 또는 C11 대신 고대 C90 표준을 사용하는 특별한 이유가 있습니까? 최신 표준은'__STDC_VERSION__'을 통해 두 번째 조건을 충족시킵니다. – sendaran

+0

이식성을 극대화하십시오. –

+1

C90이 필요한 특정 레거시 플랫폼을 가지고 있지 않다면 C99를 사용하지 않는 것이 이식성 측면에서 비생산적인 것이라고 주장 할 것입니다. C99는 C90에 비해 상당히 향상된 표준이며 통신 프로토콜이나 임베디드 시스템을 다루는 사람에게 매우 유용한 고정 너비 정수 유형과 같이 이식성을 향상시키는 간단하면서도 중요한 기능을 가지고 있습니다. 분명히 Cygwin은 C99를 사용하기를 원하므로 분명히 주위를 돌아 다니는 것이 당신을 물게 할 것입니다. '__ANYTHING__'은 C 구현을 위해 유보되어 UB 영토에 접근합니다. – sendaran

답변

-1

clock_gettime이 정의 된 이후에 C90 선언을 제거해야합니다.

다른 모든 것은 실패하는 경향이 있습니다.

+0

아직도 당신을 물 수 있습니다. 절대로 시스템 헤더를 망칠 필요가 없습니다! 영업 담당자는 표준 C를 사용할 수없는 경우 C99를 사용해야합니다. – Olaf

+0

@Olaf 나는 gcc 호출을 언급했다. 시스템 헤더 파일을 건드릴 것을 제안하지 않음 – matzeri

+0

무슨 뜻인지 확실하지 않습니다. 1) 헤더는 정의를 포함하지 않는다 ('inline' 함수 제외). 2) 수정은 헤더를 수정해야한다. 3) 표준 매크로를 변경 ('#define'd, 선언되지 않음)하는 것은 엄격히 금지되어 있습니다. – Olaf