错误:main()中的声明说明符中有两个或更多数据类型

时间:2017-09-02 10:22:18

标签: c main

我有一个main函数作为更大项目的一部分,如下所示:

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

int
main(int argc, char *argv[]) {
  node_t *tst=NULL;
  int weight;
  char prefix[CHARMAX];
  FILE *datafile = fopen(argv[1],"r");
  while (fscanf(datafile,"%d;%[^\n]", &weight, prefix)==2) {
    tst=insert(tst,prefix,weight);
  }
  fclose(datafile);
  while (fscanf(stdin,"%s",prefix)) {
    printf("Prefix: %s ",prefix);
    FILE *out = fopen(argv[2],"a");
    fprintf(out,"Prefix: %s\n",prefix);
    fclose(out);
    find_and_traverse(tst,(char*)prefix);
  }
  return 0;
}

我编译为makefile的一部分并收到此错误:

stage2.c:2:1: error: two or more data types in declaration specifiers
 int main(int argc, char *argv[]) {
 ^

第2行包含<stdlib.h>,所以我真的不知道导致此错误的原因。

关于header2.h的内容 - 考虑到错误是指向第2行而不是第4行,我认为没有必要 - 但这里是:

typedef struct node {
  char data;
  unsigned end_of_string: TRUE;
  struct node *left;
  struct node *equal;
  struct node *right;
  int weight;
} node_t;

typedef struct sorted_node {
  char data[250];
  int weight;
} sorted_node_t;

node_t* insert(node_t* pNode, char* word, int weight);
void find_and_traverse(node_t* pNode, char* prefix);
void selectionsort(node_t* pNode, char* buffer, int depth, int max);
void sort(sorted_node_t arr[], int n);

请帮忙!

1 个答案:

答案 0 :(得分:0)

我最初的猜测是在头文件;的末尾缺少header2.h,但是查看header2.h的内容,似乎不是问题。

最令人惊讶的是错误消息:

stage2.c:2:1: error: two or more data types in declaration specifiers
 int main(int argc, char *argv[]) {
  • 第2行没有此内容(如您所述)
  • 发布的片段中main的定义分为2行,但在错误消息中显示为一行。您是否可以将源文件中的定义修改为int main(int argc, char **argv) {以验证错误消息是否发生更改并且确实与您认为的文件有关?

另请注意,unsigned end_of_string: TRUE;中的声明typedef定义了宽度为1位的位域end_of_string