gpt4 book ai didi

c - 函数的隐式声明

转载 作者:行者123 更新时间:2023-11-30 20:06:31 27 4
gpt4 key购买 nike

这是我的头文件,tree.h

#ifndef TREE_H_
#define TREE_H_

#if defined treeItem

extern int totalnode;

treeItem *addItem(treeItem *node, char *w);

void printInOrder(treeItem *node, FILE *output);

void freeTree(treeItem *node);

#endif

#endif

这是main.c中的main(),其中包括tree.h

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include "tree.h"
#define MAX 1024
extern int totalnode;

int main(int argc, char *argv[]){
FILE *input;
FILE *output;
char *filename;
char ch[MAX];
//extern int totalnode;

struct treeItem *element;
element = NULL;

int i;

if (argc > 2){
output = fopen(argv[1], "w");
for(i = 2; i < argc + 1; i++){
filename = argv[i];
input = fopen(filename, "r");
if(input != NULL){
while(getword(ch, MAX, input) != EOF)
if (isalpha(ch[0]))
element = addItem(element, ch);
}
}
printInOrder(element, output);
fprintf(output,"-------------- \n ");
fprintf(output,"%4d Total number of different words",totalnode);

freeTree(element);
fclose(input);
fclose(output);

}
else{
printf("There is no input file.\n");
}

return 0;
}

编译器说:

../main.c: In function 'main':

../main.c:57: warning: implicit declaration of function 'addItem'

../main.c:57: warning: assignment makes pointer from integer without a cast

../main.c:60: warning: implicit declaration of function 'printInOrder'

../main.c:64: warning: implicit declaration of function 'freeTree'

另一个错误:体系结构 x86_64 的 undefined symbol :

"_totalnode", referenced from:

_main in main.o

_addItem in tree.o

ld:找不到架构 x86_64 的符号

collect2: ld 返回 1 退出状态

如果我将所有代码放在同一个 .c 文件中而不使用头文件,它就可以工作。但目前还行不通。我该如何修复它?

最佳答案

线

#if defined treeItem

匹配的#endif应该从tree.h删除

请记住,预处理在概念上发生在真正编译之前(或作为第一步)。

一般来说,您可以获得 main.c 的预处理形式:

gcc -C -E main.c > main.i

然后在main.i内查看(例如使用less之类的寻呼机)

我经常使用删除生成的预处理器指令

gcc -C -E main.c | grep -v '^#' > main.i
gcc -Wall -c main.i

这会给出错误消息,其中包含引用 main.i 内部的行号(不是 main.ctree.h),这有时很有用调试宏。 gcc 的另一个有用选项是 -H:它显示每个 #include-d 文件

关于c - 函数的隐式声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23355671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com