2011-11-23 2 views
5

C에서 배열은 동적으로 크기가 지정되지 않는다는 것을 알고 있습니다.sizeof()를 사용하여 배열 길이를 정의 할 수 있습니까?

염두에두고 다음 코드가 허용됩니까?

char bytes[sizeof(double)]; 

내 생각은 sizeof 프로그램 실행시 인수에서 작동 등이 허용되지 않을 것입니다. (이중 같은 길이 문자의 배열을 선언하려고),하지만 난 모르겠어요 .

또한 C 대신 C++를 사용하면 차이가 있습니까?

답변

7

sizeof 표현식은 컴파일 타임에 (컴파일러가 전처리 기가 아닌) 계산하여 표현식이 적합합니다.

동적 배열이 허용되는 C99에서이 규칙의 예외가 있습니다. 이 경우 sizeof는 컨텍스트에 따라 런타임에 평가됩니다 (http://en.wikipedia.org/wiki/Sizeof). 이 질문에서 표현의 적법성은 변하지 않습니다.

1

네, 그렇게해도 좋습니다. sizeof()의 값은 컴파일 타임에 결정됩니다.

6

그렇습니다. sizeof(double)은 컴파일 타임 상수이기 때문에 동적 크기가 될 수는 없습니다.

1

피연산자가 VLA가 아닌 경우 sizeof을 실제 연결 문자열로 사용할 수 있습니다. http://ideone.com/95bwM

에서 "실행"

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    double x; 
    unsigned char dbl[sizeof x];        /* real constant */ 

    /* make x's format have a 1 bit on the "correct" place */ 
    x = 32.000000000000004; 
    memcpy(dbl, &x, sizeof x); 
    switch (dbl[0]) { 
    case sizeof *dbl: puts("1"); break;     /* real constant */ 
    case 0: puts("0"); break; 
    default: puts("other"); 
    } 
    return 0; 
} 

참조 코드