gpt4 book ai didi

包含的C文件也可以直接运行吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:34 25 4
gpt4 key购买 nike

我想知道一个 C 文件是否既可以包含在另一个脚本中(通过头文件),又可以独立运行(通过拥有自己的主函数)。也就是说,可以包含 C 文件以向另一个 C 脚本提供其功能,但也可以直接运行 C 文件本身以提供一些替代功能。

例如,一个python脚本可以做到这一点;

def functionsToBeImported():
# code to be run by an importing script
pass

if __name__ == '__main__':
# code to be run by this script independently
pass

此代码可以由另一个 python 文件导入(import ABOVESCRIPT)以访问functionsToBeImported,或独立运行(python ABOVESCRIPT.py) 执行 if block 中的代码。

我试图通过 myScript.c 在 C 中执行此操作:

#include "myScript.h"

void functionsToBeImported() {
}

int main (int narg, char* varg[]) {
}

myScript.h:

#ifndef MY_SCRIPT_H_
#define MY_SCRIPT_H_

void functionsToBeImported();

#endif // MY_SCRIPT_H_

但试图将其包含在 anotherScript.c 中:

#include "myScript.h"

int main (int narg, char* varg[]) {

functionsToBeImported();
}

并尝试通过

编译
gcc -std=c99 -c myScript.c
gcc -std=c99 -c anotherScript.c
gcc -std=c99 -o anotherScript anotherScript.o myScript.o -lm

编译错误

duplicate symbol _main in:
myScript.o
anotherScript.o

我怎样才能实现这个“双用”脚本?

最佳答案

您不能同时链接 anotherScript.omyScript.o,但您可以这样做:

#define main ignored_main
// Include myScript.c, not myScript.h
#include "myScript.c"
#undef main

int main (int narg, char* varg[]) {

functionsToBeImported();
}

我实际上在生产中广泛使用的代码中看到过类似的东西,虽然我不推荐这种风格(但它有时是一个诱人的捷径)。

另一种选择是仅在定义了预处理器宏时才包含 main 函数,如下所示(在 myScript.c 中):

#include "myScript.h"

void functionsToBeImported() {
}

#ifdef USE_MAIN
int main (int narg, char* varg[]) {
}
#endif // USE_MAIN

这在本质上类似于 Python 方法。但同样,您必须将此文件编译两次为单独的目标文件。

关于包含的C文件也可以直接运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231095/

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