以下代码适用于Visual Studio 2008,有无优化.但它只适用于没有优化的G ++(O0).
#include <cstdlib>
#include <iostream>
#include <cmath>
double round(double v, double digit)
{
double pow = std::pow(10.0, digit);
double t = v * pow;
//std::cout << "t:" << t << std::endl;
double r = std::floor(t + 0.5);
//std::cout << "r:" << r << std::endl;
return r / pow;
}
int main(int argc, char *argv[])
{
std::cout << round(4.45, 1) << std::endl;
std::cout << round(4.55, 1) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出应该是:
4.5
4.6
Run Code Online (Sandbox Code Playgroud)
但是带有优化(O1- O3)的g ++ …
我的Qt项目有两个相同名称但在不同文件夹中的源文件.专业文件是:
SOURCES = A/Test.cpp
SOURCES += B/Test.cpp
Run Code Online (Sandbox Code Playgroud)
它可以产生通过Qt的Visual Studio的插件Visual Studio解决方案文件,但它不会工作,因为生成的目标文件具有相同的名称:Test.obj.这将导致LNK2001未解析的外部符号,因为其中一个Test.obj被覆盖.
如何编写适当的专业文件来处理?
#!/bin/bash
OPTS='-e EXTERNAL_PORT=443'
echo $OPTS
cat 1.txt
if [ $? -ne 0 ]; then
echo $OPTS
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到输出:
EXTERNAL_PORT=443
cat: 1.txt: No such file or directory
EXTERNAL_PORT=443
Run Code Online (Sandbox Code Playgroud)
如果我将 OPTS 更改为
OPTS='a -e EXTERNAL_PORT=443'
Run Code Online (Sandbox Code Playgroud)
现在一切正常了
a -e EXTERNAL_PORT=443
cat: 1.txt: No such file or directory
a -e EXTERNAL_PORT=443
Run Code Online (Sandbox Code Playgroud)
我怎样才能避免这种情况?这是一个简化的演示,在我的真实案例中,我有一个以 -e 开头的环境变量 OPTS 。
我回显它,它是正确的,但是在 line 之后if [ $? -ne 0 ]; then,“-e”消失了,这会导致我的脚本出现错误。
谢谢。