我有两个都有主电源的.c文件。其中一个文件有一个我想在另一个主要使用的功能。是否可以引用其他功能而无需将其复制并粘贴到另一个.c文件中?
答案 0 :(得分:3)
不,你不需要复制和粘贴,假设你有这个
<强>程序one.c 强>
第一个程序。
#include "common.h" /* This should be implemented */
int main(void)
{
do_program_one_stuff();
common_function();
return 0;
}
<强>程序two.c 强>
第二个程序。
#include "common.h" /* This should be implemented */
int main(void)
{
do_program_two_stuff();
common_function();
return 0;
}
您需要第三个 .c 文件和 .h 文件,如下所示
<强> common.c中强>
通用功能实现。
void common_function()
{
/* Do it here */
}
<强> COMMON.H 强>
常用功能标题。
void common_function();
现在,您可以为包含两个文件的每个程序编译单个二进制文件,特定于程序的 .c 文件和 common.c 。
正确的方法是先使用 Makefile 并生成目标代码,然后将目标文件链接到togeather,从而只编译每个文件一次。
<强>生成文件强>
这是使用GNU make作为编译器的gcc Makefile。
CC = gcc
CFLAGS = -Wall -Wextra -Werror -g3 -O0 # enable debug symbols and warnings
LDFLAGS = # linker flags here ...
OBJ = common.o program-one.o program-two.o
all:
$(CC) $(LDFLAGS) common.o program-one.o -o program-one
$(CC) $(LDFLAGS) common.o program-two.o -o program-two
%.o: %.c
$(CC) $(CFLAGS) -c $<
clean:
@rm -fv *.o program-one program-two
编辑:回复您的评论我会建议以下
#define main ignore /* Or whatever name you want */
#include "the-student-implementation.c"
#undef main
int main(void)
{
/* This would be your `main()' */
return 0;
}
答案 1 :(得分:2)
最好的解决方案是iharob建议的,但如果由于某种原因不可能,你可以用#ifdef USE_MAIN包含包含公共函数的文件中的main(),然后只定义USE_MAIN标识符。构建该项目的命令。当你构建另一个没有定义USE_MAIN的项目时,预处理器将导致跳过第二个main(),因此编译器不会感到困惑。
但除非确实需要,否则我强烈建议将其拆分为三个文件:main1.c,main2.c和common.c / common.h