2013-03-25 2 views
2

아래 코드에 문제가 있습니다. 그것은 나에게 아무것도 알려주지 않는 오류를 던졌습니다.컴파일러가 볼 수없는 상수

#ifndef BLOCK_SIZE 
#define BLOCK_SIZE 8 
#endif 

나는 다음과 같이 단편 configuration.ac 파일도 있습니다 :

AC_ARG_WITH([block-size], 
    [AS_HELP_STRING([--with-block-size],["Define blocksize to initialize with. Default value: 8]")], 
     [bsize="$withval"], 
     []) 

if test ! -z "${bsize}"; then 
     if test "${bsize}" > 0 ; then 
       AC_DEFINE_UNQUOTED([BLOCK_SIZE], [$b_size], [Defining block size in bytes]) 
     else 
       AC_DEFINE_UNQUOTED([BLOCK_SIZE], [8], [Default block size : 8B]) 
     fi 
fi 

나중에 내가 메이크을 마무리 명령 ./configure --with-block-size=16 --with-allocator=STR_MIN을 사용

나는 내가 가진 파일 memory.h이 . 오류는 다음과 같습니다과

memory.c: In function 'initialize': 
memory.c:15:59: error: expected expression before ')' token 
memory.c: In function 'allocate': 
memory.c:26:41: error: expected expression before ')' token 
memory.c:53:56: error: expected expression before ';' token 
memory.c: In function 'defragment': 
memory.c:140:73: error: expected expression before ')' token 
memory.c: In function 'diagnoze': 
memory.c:174:183: error: expected expression before ',' token 

모든 라인 : 그것은 컴파일러처럼 보이는

mem -> unused_list -> address = malloc(count * BLOCK_SIZE); 
new -> address = space -> address + size * BLOCK_SIZE; 

전혀 BLOCK_SIZE 표시되지 않습니다하지만 지금 ehen 나는 오류의 책을 얻을 make 명령을 사용합니다. 이제는 왜 그럴까요? 이 코드에서 후자를 아마도 먹었을 것입니다. 그러나 나는 그것을 발견 할 수 없어 더 많은 문제가 발생할 수있는 단서가 없습니다. 이전에 사용한 automake의 다른 모든 명령 (./con .. 포함)은 오류를 발생시키지 않았습니다.

+0

@Dcortez .. 헤더 파일에 재 지정이 적용되지 않도록 보호되어 있습니까? – Ganesh

+0

'#ifndef _MEMORY_H #define _MEMORY_H some code # endif' – Dcortez

+0

@Dcortez ..'memory.c'는'memory.h'를 포함하고'make'를 통해'make' 파일 구조의 일부로 사용할 수 있습니다. -I' 옵션. 이 경우인지 확인할 수 있습니까? – Ganesh

답변

0

나는 어리석은 실수로 생각했다. 방금 라인을 변경해야했습니다 :

AC_DEFINE_UNQUOTED([BLOCK_SIZE], [$bsize], [Defining block size in bytes]) 

제안 된 사람이 누락 된 따옴표가 없었습니다. 어쨌든 도움에 감사드립니다.

+0

이 마법 같은 부분이 무엇인지 알아 내려고 노력하는 사람은 : 변수는 원래' $ b_size' – lxop

관련 문제