,하지만 당신은 그렇게 주어진, 당신은 다음과 같이 몇 가지 방식을 사용하여 관리 할 수 있습니다
#define A 384
#define B_SIZE (A <= 16 ? 3 : A <= 32 ? 4 : A <= 64 ? 5 : A <= 128 ? 6 : \
A <= 256 ? 7 : A <= 512 ? 8 : A <= 1024 ? 9 : -1)
extern int B[B_SIZE];
꼬리 값으로 -1
을 사용하는 것은 우연한 일이 아닙니다. 음수 크기의 배열을 가질 수 없기 때문에 컴파일 오류가 발생하므로 A
이 너무 크면 코드가 컴파일되지 않습니다. 너는 너무 작은 크기를 배제하기 위해 같은 트릭을 사용할 수있다. 정의하고 배열을 초기화하는 코드에서
, 당신은 사용
int B[B_SIZE] =
{
2, 4,
#if A > 16
8,
#endif
#if A > 32
16,
#endif
#if A > 64
32,
#endif
#if A > 128
64,
#endif
#if A > 256
128,
#endif
#if A > 512
256,
#endif
A/2
};
이 우아한 아니지만, 내가 할 수있는 깔끔한 방법이 확실하지 않다. A
값이 범위를 벗어날 경우 다시 컴파일 오류를 확인하기 위해 B_SIZE
을 다시 명시 적으로 사용합니다. 그렇지 않으면 B_SIZE
을 배열 사양에서 벗어나게 할 수 있습니다.
주어진 크기까지 코드를 생성하기 위해 쉘 (Awk, Perl, Python, ...) 스크립트를 쉽게 작성할 수 있습니다.
왜 정적으로 배열을 선언해야합니까?이것은 계산과 동적 할당이 필요한 것과 같습니다. – eyalm
헤더에 선언 된 배열을 원한다. becuse를 여러 개의 c 파일에 걸쳐 사용할 것이다. – gforce89
하나의 모듈에서 정의하고 'extern'을 사용하여 내보낼 수 있습니다. –