标头文件错误:预期标识符或'('数字常量之前

时间:2017-12-09 20:54:28

标签: c compiler-errors header-files

我是头文件的新手,我不知道为什么会收到此错误。第一段代码来自相关的头文件,并给出了预期的标识符错误:

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

与此相关的是,与该标题相关的文件中还有另一个错误,它给了我一个注意:在扩展宏' MAX_ADDR_LENGTH'时,它给了我一行给出了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声明的行,只是删除了短语&#39; int&#39; from同样的;所有这些都只会导致更多的错误。)

2 个答案:

答案 0 :(得分:1)

问题:'MAX_ADDR_LENGTH'在代码中定义了两次;一次作为宏,一次作为变量。

尝试删除声明MAX_ADDR_LENGTH为变量的语句。

答案 1 :(得分: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的类型,您可以在以后使用它来构建列表。