gpt4 book ai didi

编译没有主要功能的C代码

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:09 24 4
gpt4 key购买 nike

所以我有几个文件用于我正在处理的大学项目;每个文件都有几个功能和一个 main用于测试目的的功能。然而,一些文件需要使用其他文件的函数,这让链接器提示多个 main预期的声明。我想知道是否有一种方法可以在不编译 main 的情况下将这些文件编译为目标文件。一路函数,基本剥离出main只留下可用的功能。

一个例子(不是我的一个相当大的实际文件),对于每个我假设存在一个包含声明 foo 的头文件和 bar分别是:

//File foo.c
#include <stdio.h>
#include <stdlib.h>
#include "foo.h"

int foo(int x, int y)
{
return x + y;
}

//Assumes the user gives 2 integer inputs
int main(int argc, char **argv)
{
int x, y;
sscanf(argv[1], "%d", &x);
sscanf(argv[2], "%d", &y);
printf("foo(%d, %d) = %d\n", x, y, foo(x,y));
}

//File bar.c
#include <stdio.h>
#include <stdlib.h>
#include "foo.h"
#include "bar.h"

int bar(int x, int y, int z);
{
return foo(x, y) * z;
}

//Assums the user gives 3 integer inputs
int main(int argc, char **argv)
{
int x, y, z;
sscanf(argv[1], "%d", &x);
sscanf(argv[2], "%d", &y);
sscanf(argv[3], "%d", &z);
printf("bar(%d, %d, %d) = %d\n", x, y, z, bar(x, y, z));
}

是否可以编译 foo.c到目标文件,以便我可以调用 gcc bar.c foo.o并获取 bar.c 的可执行文件?

最佳答案

只有在编译文件以生成“测试可执行文件”时才可以对定义的符号执行#ifdef,而不是在将文件与其他文件一起使用时;我已经看到它被用于对小型库进行快速功能测试。

#include "foo.h"

int foo(int x, int y)
{
return x + y;
}

#ifdef COMPILE_MAIN
//Assumes the user gives 2 integer inputs
int main(int argc, char **argv)
{
int x, y;
sscanf(argv[1], "%d", &x);
sscanf(argv[2], "%d", &y);
printf("foo(%d, %d) = %d\n", x, y, foo(x,y));
}
#endif

现在你可以做

gcc -DCOMPILE_MAIN foo.c -o foo.x

制作一个可执行文件foo.x,你可以直接调用它来测试foo,你可以这样做

gcc foo.c bar.c main.c -o yourapp.x

使用其他文件(包括具有“真实”应用程序 main 的文件)制作可执行文件,而不会提示多重定义的符号。

关于编译没有主要功能的C代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35510670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com