帮我看下多文件关系问题

福娃服务 2013-11-20 10:00:16
具体的函数内容不用看,只要帮我看下调用别的文件中的函数、#include指令、define.h文件、头文件、extern以及makefile的用法是否正确,我觉得一定是有问题的。先说明下,main.c是主函数,main.c调用的函数在64.c里面,而64.c调用的函数在54.c里面。
main.c
#include "define.h"
char er[MAX_AR];
unsigned long number;
extern void Print(void);
extern void Delete(unsigned long number);
int main(void)
{
int n;
for(n=0;n<MAX_AR;n++)
er[n]=255;
for(number=2;number<=MAX_NU;number++)
if(test_bit(er,number)==TRUE)
Delete(number);
Print();

return 0;
}


64.c
#include "64.h"
#include "define.h"
#include <stdio.h>
extern char er[MAX_AR];
extern unsigned long number;
extern int test_bit(char bit_array[],unsigned long bit_number);
extern void clear_bit(char bit_array[],unsigned long bit_number);
void Print(void)
{
for(number=2;number<=MAX_NU;number++)
if(test_bit(er,number)==TRUE)
printf("%lu\n",number);
}

void Delete(unsigned long number)
{
for(number+=number;number<=MAX_NU;number++)
clear_bit(er,number);
}


54.c
#include "54.h"
#include "define.h"
void set_bit(char bit_array[],unsigned long bit_number)
{
bit_array[char_offset(bit_number)]|=TRUE<<bit_offset(bit_number);
}
void clear_bit(char bit_array[],unsigned long bit_number)
{
bit_array[char_offset(bit_number)]&=FALSE<<bit_offset(bit_number);
}
void assign_bit(char bit_array[],unsigned long bit_number,
int value)
{
if(value==FALSE)
bit_array[char_offset(bit_number)]&=FALSE<<bit_offset(bit_number);
else
bit_array[char_offset(bit_number)]|=TRUE<<bit_offset(bit_number);
}
int test_bit(char bit_array[],unsigned long bit_number)
{
if(bit_array[char_offset(bit_number)]>>bit_offset(bit_number)
%2==TRUE)
return TRUE;
else
return FALSE;
}
unsigned char_offset(unsigned long bit_number)
{
return bit_number/CHAR_MAX;
}
unsigned bit_offset(unsigned long bit_number)
{
return bit_number%CHAR_MAX;
}


64.h
void Print(void);
void Delete(unsigned long number);


54.h
void set_bit(char bit_array[],unsigned long bit_number);
void clear_bit(char bit_array[],unsigned long bit_number);
void assign_bit(char bit_array[],unsigned long bit_number,
int value);
int test_bit(char bit_array[],unsigned long bit_number);
unsigned char_offset(unsigned long bit_number);
unsigned bit_offset(unsigned long bit_number);


define.h
#ifndef MAX_AR
#include <limits.h>
#define MAX_AR INT_MAX/8+1
#define MAX_NU INT_MAX
#define TRUE 1
#define FALSE 0
#endif


makefile
object=main.o 64.o 54.o
64:$(object)
cc -o 64 $(object)
main.o:define.h
64.o:64.h define.h
54.o:54.h define.h
.PHONY:clean
clean:
rm 64 $(object)
...全文
84 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
福娃服务 2013-11-20
  • 打赏
  • 举报
回复
root@kali:~# make clean makefile:8: *** 遗漏分隔符 。 停止。 这makefile随它去,我想问下什么情况用#include,什么情况用extern。
max_min_ 2013-11-20
  • 打赏
  • 举报
回复
引用 3 楼 u012453424 的回复:
[quote=引用 1 楼 max_min_ 的回复:]

CC =gcc
#如果头文件和源文件都在同一级目录下,如果不是后面相对源文件的路径
CFLAGS = -I./
OBJS = main.o 64.o 54.o
TARGET = 64 

$(TARGET):$(OBJS)
    $(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
$(OBJS):%.o:%.c
    $(CC) -c $(CFLAGS) $< -o $@
clean:
    rm 64 $(OBJS)
你的makefile第8行遗漏东西了[/quote] 其实的代码感觉有点累赘,包含下头文件就好了!没必要extern了 另外 第8行少了什么呢?
福娃服务 2013-11-20
  • 打赏
  • 举报
回复
引用 1 楼 max_min_ 的回复:

CC =gcc
#如果头文件和源文件都在同一级目录下,如果不是后面相对源文件的路径
CFLAGS = -I./
OBJS = main.o 64.o 54.o
TARGET = 64 

$(TARGET):$(OBJS)
    $(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
$(OBJS):%.o:%.c
    $(CC) -c $(CFLAGS) $< -o $@
clean:
    rm 64 $(OBJS)
你的makefile第8行遗漏东西了
福娃服务 2013-11-20
  • 打赏
  • 举报
回复
除了makefile,别的地方没一点问题了吗?
max_min_ 2013-11-20
  • 打赏
  • 举报
回复

CC =gcc
#如果头文件和源文件都在同一级目录下,如果不是后面相对源文件的路径
CFLAGS = -I./
OBJS = main.o 64.o 54.o
TARGET = 64 

$(TARGET):$(OBJS)
    $(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
$(OBJS):%.o:%.c
    $(CC) -c $(CFLAGS) $< -o $@
clean:
    rm 64 $(OBJS)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧