2017-12-09 1 views
-1

헤더 파일을 처음 사용하는 이유는 무엇입니까?이 오류가 발생하는 이유를 모르겠습니다. 첫 번째 코드는 관련 헤더 파일에서 가져온 것으로 예상되는 식별자 오류 :이주는 줄에 나에게주는 매크로 'MAX_ADDR_LENGTH'의 팽창이에헤더 파일 오류 : 예상 식별자 또는 '('앞에 숫자 상수가 있습니다.

#define MAX_ADDR_LENGTH 1000 
struct listNode{ 
    char addr[MAX_ADDR_LENGTH]; 
    struct listNode *next; 
}; 

관련, 나에게 "메모를 제공하는 헤더와 관련된 파일의 또 다른 오류가 int의 선언 MAX_ADDR_LENGTH :

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "header.h" 

char *crawl(char* getLinksFrom, int hopTo){ 

int MAX_ADDR_LENGTH = 300; 
char startAddr[MAX_ADDR_LENGTH]; 
char destAddr[MAX_ADDR_LENGTH]; 

} 

나는 많은 수의 얇은 그것은 단지 작은 감시 (#define altogther를 제거하고 int MAX_ADDR_LENGTH 선언을 제공하는 줄을 지우고 'int'를 동일한 것으로부터 삭제했습니다. 모두 더 많은 오류가 발생했습니다).

답변

0

문제 : 'MAX_ADDR_LENGTH'이 (가) 코드에서 두 번 정의되었습니다. 한 번은 매크로로, 한 번은 변수로 사용합니다.

변수로 MAX_ADDR_LENGTH을 (를) 선언하는 문을 삭제하십시오.

+0

알 수 있습니다. 그래서 나는 그것을했고 그것은 원래의 오류를 없앴습니다. 그러나 참조 해제와 관련하여 새로운 톤을 만들었습니다. – Brooklyn

0

이 같은 헤더를 구축 :

#ifndef HEADER_H 
#define HEADER_H 

#define MAX_ADDR_LENGTH 1000 
typedef struct _listNode{ 
    char addr[MAX_ADDR_LENGTH]; 
    struct _listNode *next; 
} listNode; 

#endif /* HEADER_H */ 

과 같이 사용은 :

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "header.h" 

char *crawl(char* getLinksFrom, int hopTo){ 

    char startAddr[MAX_ADDR_LENGTH]; 
    char destAddr[MAX_ADDR_LENGTH]; 
    .... more code 
} 

#ifndef은 ... #endif 구조는 include guard라고합니다. 코드를 컴파일 할 필요는 없지만이를 사용하는 것이 좋습니다.

typedef는 노드 구조를 정의하는 데 사용됩니다. 아직 변수를 만들지 않고 나중에 목록을 작성하는 데 사용할 수있는 listNode이라는 유형을 정의하는 것입니다.

관련 문제