gpt4 book ai didi

c++ - 在 shell 脚本中使用 -D name 编译选项

转载 作者:行者123 更新时间:2023-11-28 05:43:18 25 4
gpt4 key购买 nike

我正在尝试编写一个 shell 脚本,它将运行我的 C++ 程序的多个测试,并在每次运行时重新定义一个宏。我正在尝试使用 -D name 预处理器选项(请参阅 https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html ),但我一直收到警告,指出正在重新定义宏,然后程序在不重新定义的情况下执行。

我的脚本如下:

#!/bin/bash

#NUMS is number of subdivisions:
for subdiv in 10 100 500 1000
do
echo NUMS = $subdiv
g++ -D NUMS=$subdiv project01.cpp -o project01 -lm -fopenmp
./project01 >> bezier_results.txt
done

在我的 C++ 文件 project01.cpp 中,我声明:

#define NUMS 1

我试过省略“1”,但这也会产生错误。很明显,脚本实际上并没有重新定义宏。有什么想法吗?谢谢!

最佳答案

通过在命令行上使用 -DNUMS=100 定义宏,您已经提供了一个默认值。

当您这样做时,您的代码将覆盖该默认值:

#define NUMS 1

编译器警告准确地告诉您发生了什么。相反,请考虑编写如下代码:

#if !defined NUMS
#define NUMS 1
#endif

现在,编译器只会在 NUMS 尚未定义时将其重新定义为 1(即在您的源代码中的其他地方,或者在本例中为命令行。)

关于c++ - 在 shell 脚本中使用 -D name 编译选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36706105/

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