我在制作makefile时遇到问题。当我编译时,我遇到了很多问题。我的主要问题是弄清楚我应该把我的全局const放在我的程序中。我尝试将它们全部放在主文件中,但这似乎不起作用。
banksystem: main.o admin.o customer.o
gcc -o banksystem main.o admin.o customer.o
main.o: main.c admin.h customer.h
gcc -c main.c
admin.o: admin.c admin.h basefunctions.h
gcc -c admin.c
customer.o: customer.c customer.h basefunctions.h
gcc -c customer.c
basefunctions.o: basefunctions.c basefunctions.h
gcc -c basefunctions.c
这就是我制作makefile的方式。我真的不知道它是否正确。在完成此操作之前,我将整个代码编写成一个文件,以便在一个位置测试每个函数,但现在我尝试将其拆分。我的const和struct
有很多错误struct info{ //Example struct
int a;
int b;
};
struct info collection[MAX]; //Example array
我不知道将其放入哪个文件以及其他全局const
#define MAX 100
#define char "customerdata.txt"
typedef int (*compfn)(const void*, const void*)
我应该将这些变量放在主源文件中吗?或者我应该将它们放在basefunctions源文件中,还应该如何在不包含我的结构信息的文件中使用extern,或者我猜,我究竟该如何处理我的结构?我的所有功能都使用它。我的所有函数都使用数组。
代码很长,所以我不打算包含它。我所要求的要点,
当我有一个struct,struct int,global int const,global char const时,如何重新格式化我的代码以在makefile中工作。
void load(){
FILE *fp;
fp = fopen(FILE_NAME, "rb");
if (fp != NULL){
fread(collection, sizeof(struct userinfo), MAX, fp);
}
else{
printf("ERROR");
}
fclose(fp);
}
void save(){
FILE *fp;
fp = fopen(FILE_NAME, "wb");
fwrite (collection, 1, sizeof(collection), fp);
fclose(fp);
}
我也通过这两个功能获得此警告
warning: passing argument 1 of ‘fopen’ makes pointer from integer without a
cast [-Wint-conversion]
fp = fopen(FILE_NAME, "rb");
^
对不起,如果这是冗长的,非常感谢模糊的帮助
答案 0 :(得分:-1)
我已经提到了一些关于头文件中的全局变量的建议
您应该将所有全局变量放在头文件中 通过在顶部添加此文件来保护头文件,使其不会在同一对象(.o)中包含两次
#ifndef __MYHEADER__FILE__
#define __MYHEADER__FILE__
#endif
您在头文件中声明的每个全局变量(例如myheader.h)应该被声明为例如
MYEXTERN struct info collection[MAX];
如果在多个c文件中包含myheader.h 在任何一个c文件中(首选的是main),将其包含在
中#define MYEXTERN
#include<myheader.h>
这确保集合被声明为struct info collection [MAX]
在其余的C文件中,您应该将其包含在
中#define MYEXTERN extern
#include<myheader.h>
这确保集合被声明为extern struct info collection [MAX]
答案 1 :(得分:-1)
banksystem: main.o admin.o customer.o
gcc -o banksystem main.o admin.o customer.o
我只需要在此处加入basefunctions.o
,然后编译并运行