gpt4 book ai didi

c++ - 将 C 或 C++ 文件作为脚本运行

转载 作者:IT老高 更新时间:2023-10-28 12:55:11 27 4
gpt4 key购买 nike

所以这可能是一个很长的镜头,但是有没有办法将 C 或 C++ 文件作为脚本运行?我试过了:

#!/usr/bin/gcc main.c -o main; ./main

int main(){ return 0; }

但它说:

./main.c:1:2: error: invalid preprocessing directive #!

最佳答案

简答:

//usr/bin/clang "$0" && exec ./a.out "$@"
int main(){
return 0;
}

诀窍在于您的文本文件必须是有效的 C/C++ 代码和 shell 脚本。请记住在解释器到达 C/C++ 代码之前从 shell 脚本中exit,或者调用 exec 魔法。

使用 chmod +x main.c 运行; ./main.c.

不需要像 #!/usr/bin/tcc -run 这样的 shebang,因为类 unix 系统已经在 shell 中执行文本文件。

(改编自this comment)


我在我的 C++ 脚本中使用了它:

//usr/bin/clang++ -O3 -std=c++11 "$0" && ./a.out; exit
#include <iostream>
int main() {
for (auto i: {1, 2, 3})
std::cout << i << std::endl;
return 0;
}

如果您的编译行增长过多,您可以使用预处理器(改编自 this answer),正如这段普通的旧 C 代码所示:

#if 0
clang "$0" && ./a.out
rm -f ./a.out
exit
#endif
int main() {
return 0;
}

当然你可以缓存可执行文件:

#if 0
EXEC=${0%.*}
test -x "$EXEC" || clang "$0" -o "$EXEC"
exec "$EXEC"
#endif
int main() {
return 0;
}

现在,对于真正古怪的 Java 开发人员:

/*/../bin/true
CLASS_NAME=$(basename "${0%.*}")
CLASS_PATH="$(dirname "$0")"
javac "$0" && java -cp "${CLASS_PATH}" ${CLASS_NAME}
rm -f "${CLASS_PATH}/${CLASS_NAME}.class"
exit
*/
class Main {
public static void main(String[] args) {
return;
}
}

D 程序员只需在文本文件的开头放置一个 shebang,而不会破坏语法:

#!/usr/bin/rdmd
void main(){}

见:

关于c++ - 将 C 或 C++ 文件作为脚本运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2482348/

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