makefile const声明和struct问题时的错误

时间:2017-05-09 03:02:59

标签: c struct makefile

我在制作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");
                ^

对不起,如果这是冗长的,非常感谢模糊的帮助

2 个答案:

答案 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,然后编译并运行