2010-01-07 5 views
3

저는 매우 이상한 문제에 직면하고 있습니다.매크로가 선언되지 않았지만 헤더에 정의되었습니다.

#define MAP_WIDTH 256 
#define MAP_HEIGHT 256 

typedef struct { 
    char exit_n; 
    char exit_s; 
    char exit_w; 
    char exit_e; 
} room; 

room map[MAP_WIDTH][MAP_HEIGHT]; 

void generate_map(); 

그리고이 map.c :

#include "map.h" 

void generate_map() 
{ 
    char room_x, room_y; 

    room_x = MAX_WIDTH/2; 
    room_y = MAX_HEIGHT/2; 

    // first room 
    map[room_x][room_y].exit_n = 1; 
} 

그래서, 아무것도 정말 이국적인

은 map.h입니다. 내가 잘못을

map.c: In function ‘generate_map’: 
map.c:18: error: ‘MAX_WIDTH’ undeclared (first use in this function) 
map.c:18: error: (Each undeclared identifier is reported only once 
map.c:18: error: for each function it appears in.) 
map.c:19: error: ‘MAX_HEIGHT’ undeclared (first use in this function) 

를하고있는 중이 야 무엇 : 문제는 컴파일러는 두 개의 정의 된 상수 MAX_WIDTH 및 MAX_HEIGHT에 대해 불평? 당신이 _height 상수에 대한 동일 (X 표시) MA X _width 두 경우에 MA (A P와) P _width를 사용하는 것처럼

+1

부끄러워하지 마십시오. 당신이 사심없는 파티에 그들을 보여주기 전까지는, 이런 것들은 매우 불쾌 할 수 있습니다. 우리 모두가 이런 종류의 경험을했을 것입니다. –

+1

삭제할 이유가 없습니다. 시간 낭비 할 가치가있었습니다. 맞습니까? 가장 좋은 대답을 수락하십시오. (그리고 누구는 downvoted : 왜?) –

+0

나는 그것을 사용하지 않는 년 후에 다시 C에서 프로그램을 시작, 그래서 나는 그것에 대해 매우 불안하고 문제를 찾고 잠시 후에 나는 그것이 교활하고 무언가가 아니라고 생각했다. :) – pistacchio

답변

12

는 것 같습니다.

5

머리글에 #define MAP_HEIGHT을 말하고 map.c에 MAX_HEIGHT을 사용하려고합니다. 그들은 동일하지 않습니다.

3

내가 아는 모든 C 컴파일러에는 전처리 단계 이후에 멈출 플래그가 있습니다. 이것은 전 처리기 관련 문제를 해결하는 데 매우 유용합니다. 실수를 발견하는

$ gcc -E map.c 
# 1 "map.c" 
# 1 "<built-in>" 
# 1 "<command line>" 
# 1 "map.c" 
# 1 "map.h" 1 



typedef struct { 
    char exit_n; 
    char exit_s; 
    char exit_w; 
    char exit_e; 
} room; 

room map[256][256]; 

void generate_map(); 
# 2 "map.c" 2 

void generate_map() 
{ 
    char room_x, room_y; 

    room_x = MAX_WIDTH/2; 
    room_y = MAX_HEIGHT/2; 


    map[room_x][room_y].exit_n = 1; 
} 

희망이 제공 한 것입니다 충분한 단서 : 예를 들어, GCC는 -E 플래그가 있습니다.

+0

나는 항상이 깃발을 사용합니다. 팁을 주셔서 감사합니다. – zmbush

관련 문제