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

使用main函数从.c文件调用c函数,c,C,我有两个都有电源的.c文件。其中一个文件有一个我想在另一个主文件中使用的函数。是否可以引用此其他函数而不将其复制并粘贴到另一个.c文件中?否您不需要复制和粘贴,假设您有此功能 程序一.c 第一个节目 程序二.c 第二个节目 您需要第三个.c文件和一个.h文件,如下所示 common.c 通用函数的实现 普通.h 通用函数标题 现在,您可以为每个程序编译一个二进制文件,该程序由两个文件组成:程序特定的.c文件和公共的.c文件 正确的方法是先创建一个Makefile并生成目标代码,然后将目标文件链接

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

否您不需要复制和粘贴,假设您有此功能

程序一.c
第一个节目

程序二.c
第二个节目

您需要第三个.c文件和一个.h文件,如下所示

common.c
通用函数的实现

普通.h
通用函数标题

现在,您可以为每个程序编译一个二进制文件,该程序由两个文件组成:程序特定的.c文件和公共的.c文件

正确的方法是先创建一个Makefile并生成目标代码,然后将目标文件链接到一起,这样每个文件只编译一次

Makefile
这是一个用作编译器的生成文件。

CC=gcc
CFLAGS=-Wall-Wextra-Werror-g3-O0#启用调试符号和警告
LDFLAGS=#此处链接器标志。。。
OBJ=公共.o程序一.o程序二.o
全部:
$(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$<
清洁:
@rm-fv*.o程序一程序二
编辑:针对您的评论,我建议如下

#定义main ignore/*或您想要的任何名称*/
#包括“学生实施.c”
#未定义主
内部主(空)
{
/*这将是您的“main()*/
返回0;
}

不,假设您有这个,您不需要复制和粘贴

程序一.c
第一个节目

程序二.c
第二个节目

您需要第三个.c文件和一个.h文件,如下所示

common.c
通用函数的实现

普通.h
通用函数标题

现在,您可以为每个程序编译一个二进制文件,该程序由两个文件组成:程序特定的.c文件和公共的.c文件

正确的方法是先创建一个Makefile并生成目标代码,然后将目标文件链接到一起,这样每个文件只编译一次

Makefile
这是一个用作编译器的生成文件。

CC=gcc
CFLAGS=-Wall-Wextra-Werror-g3-O0#启用调试符号和警告
LDFLAGS=#此处链接器标志。。。
OBJ=公共.o程序一.o程序二.o
全部:
$(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$<
清洁:
@rm-fv*.o程序一程序二
编辑:针对您的评论,我建议如下

#定义main ignore/*或您想要的任何名称*/
#包括“学生实施.c”
#未定义主
内部主(空)
{
/*这将是您的“main()*/
返回0;
}

最好的解决方案是iharob建议的,但是如果由于某种原因不可能,您可以在包含公共函数的文件中用#ifdef USE_main包围main(),然后只在命令中定义USE_main标识符来构建该项目。当您构建另一个未定义USE_MAIN的项目时,预处理器将导致跳过第二个MAIN(),这样编译器就不会混淆


但除非真的需要,否则我强烈建议将其拆分为三个文件:main1.c、main2.c和common.c/common.h

最好的解决方案是iharob建议的,但如果由于某些原因无法实现,可以在包含公共函数的文件中用#ifdef USE_main,然后仅在命令中定义USE_主标识符以生成该项目。当您构建另一个未定义USE_MAIN的项目时,预处理器将导致跳过第二个MAIN(),这样编译器就不会混淆


但是,除非确实需要,否则我强烈建议将其拆分为三个文件:main1.c、main2.c和common.c/common.h

文件在哪里?它们位于同一目录中。请解释构建它们的方式。如果可能的话,发布它们的内容,你不能有两个
main()
函数。我已经编写了一个.c文件,我计划编译并执行它来执行一个任务。我有另一个.c文件,我计划编译并执行一个完全独立的任务。第二个.c文件需要使用在第一个.c文件中定义的函数。我可以直接将函数复制到第二个.c文件中,但我想知道是否有方法“链接”我要使用的特定函数。如果正常链接,将出现重复符号错误。文件在哪里?它们在同一目录中。请解释构建它们的方式。如果可能的话,发布它们的内容,你不能有两个
main()
函数。我已经编写了一个.c文件,我计划编译并执行它来执行一个任务。我有另一个.c文件,我计划编译并执行一个完全独立的任务。第二个.c文件需要使用在第一个.c文件中定义的函数。我可以直接将函数复制到第二个.c文件中,但我想知道是否有办法“链接”我要使用的特定函数。如果您正常链接,您将得到重复符号错误。我想我应该更清楚。你的答案是正确的,但它不能解决我想做的事情。我正在尝试为学生提交的hw编写一个评分脚本,该脚本具有检查正确性所需的功能和同一文件中的主方法。为每个学生提供了一个公共的.h文件,这样他们就可以完全按照上面所做的操作(我只需要编写测试主代码)。但是,许多学生没有为commonFunction()创建单独的.c文件;放置
#include "common.h" /* This should be implemented */

int main(void)
{
    do_program_one_stuff();
    common_function();
    return 0;
}
#include "common.h" /* This should be implemented */

int main(void)
{
    do_program_two_stuff();
    common_function();
    return 0;
}
void common_function()
{
    /* Do it here */
}
void common_function();