使用main函数从.c文件调用c函数

时间:2015-10-08 04:21:57

标签: c

我有两个都有主电源的.c文件。其中一个文件有一个我想在另一个主要使用的功能。是否可以引用其他功能而无需将其复制并粘贴到另一个.c文件中?

2 个答案:

答案 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