2013-06-20 2 views
1

현재 일부 코드를 업데이트하고 있는데 코드가 time_t 변수의 크기에 대한 가정을 signed long과 동일하게 만드는 지점을 만났습니다. 이 코드는 이전 플랫폼에서 작동합니다 (사실 Coldfire에서 보았 듯이).하지만 우리는 새로운 플랫폼으로 이동하고 있습니다. 그 not well defined.입니다하지만 난 정말 일 현재이 가정에 기초 코드의 모든 라인을 다시하고 싶지 않아 이후전처리 조건에서 sizeof를 사용하는 방법이 있습니까?

는 지금은, 우리가 time_t 변수의 크기에 대한 가정을해야하는지 여부 . 한 번

#if sizeof(time_t) != sizeof(LONG) 
#error size assertion failed 
#endif 

과 함께 할 수 :

이상적으로 내가 좋아하는 일을하고 싶습니다. 나는 sizeof()이 그런 조건부 전 처리기에서 사용될 수 없다는 것을 알고 있습니다. 그래서 그것은 의문의 여지가 있습니다.

궁금한데, time_t이 전처리 조건에서 사용할 수있는 바이트 수를 알 수있는 방법이 있습니까? 당신이 컴파일 타임 오류가 발생한 후라면

+4

http://stackoverflow.com/questions/4079243/how-can-i-use-sizeof-in-a-preprocessor-macro 및 http://www.pixelbeat.org/programming/gcc/static_assert를 참조하십시오. html – devnull

+0

[sizeof in define] (http://c-faq.com/cpp/ifsizeof.ct.html) from comp.lang.c faq. – devnull

답변

3

는 단지 크기가 다른 경우 구축 할 수 없게됩니다이

{ 
    char s1[+sizeof(time_t) - sizeof(LONG) + 1]; 
    char s2[-sizeof(time_t) + sizeof(LONG) + 1]; 
} 

그런 짓을.

매크로에 넣을 수는 있지만 오류는 다소 이상합니다.

+0

나를 위해 C11을 사용하십시오. time_t는 sizeof (int) 였지만 sizeof (char) –

+0

"* ...로 컴파일하는 데 실패했습니다. 오류는 다소 이상합니다."hehe, 그래서 정말 좋은 코멘트를 추가해야합니다. – alk

+0

@alk 오류가 발생한 행을 알려주므로 오류를 추가하기 만하면됩니다. –

관련 문제