【问题标题】:Header file error: expected identifier or '(' before numeric constant头文件错误:预期标识符或数字常量前的“(”
【发布时间】:2017-12-09 20:54:28
【问题描述】:

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

#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 声明的行,只是从同一行中删除了短语“int”;所有这些都只是导致更多错误)。

【问题讨论】:

    标签: c compiler-errors header-files


    【解决方案1】:

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

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

    【讨论】:

    • 知道了。所以我这样做了,它摆脱了原来的错误。但是做了很多新的,与取消引用有关
    【解决方案2】:

    像这样构建你的标题:

    #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 的类型,您可以在以后使用它来构建您的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多