как использовать макрос для беззнакового длинного числа?

Вот мои коды:

#define MSK 0x0F
#define UNT 1
#define N 3000000000

unsigned char aln[1+N];
unsigned char pileup[1+N];

void set(unsigned long i)
{
    if ((aln[i] & MSK) != MSK ) {
        aln[i] += UNT;
    }
}
int main(void) {}

Когда я пытаюсь его скомпилировать, компилятор ругается вот так:

 tmp/ccJ4IgSa.o: In function `set':
 bitmacs.c:(.text+0xf): relocation truncated to fit: R_X86_64_32S against symbol `aln' defined in COMMON \
 section in /tmp/ccJ4IgSa.o
  bitmacs.c:(.text+0x29): relocation truncated to fit: R_X86_64_32S against symbol `aln' defined in COMMON\
 section in /tmp/ccJ4IgSa.o
 bitmacs.c:(.text+0x32): relocation truncated to fit: R_X86_64_32S against symbol `aln' defined in COMMON\
  section in /tmp/ccJ4IgSa.o

Я думаю, причина может быть в том, что Nслишком большой, потому что он может успешно скомпилироваться, если я изменю N на 2000000000. Но мне нужно 3000000000 в качестве значения N..

Кто-нибудь имеет представление об этом?

5
задан Hanfei Sun 15 August 2012 в 23:39
поделиться