![](/img/trans.png)
[英]Simple C++ Program Compiled without Optimization by GCC doesn't Generate Expected Results
[英]C++ program compiled without problems but doesn't run
有我的代码。 它确实编译没有任何错误,但它没有 output 任何东西。 当我打开 program.exe 时,即使我在程序末尾添加“cin.get()”,它也会立即关闭。 在终端中使用时,它不会计算任何东西。 回声$? 返回一个假值。 我还有其他类似的程序(用于测试 OpenMP),它们也已编译但按预期工作。 gcc 一定有某种问题。 有任何想法吗?
#include <iostream>
#include <string>
#include <iomanip>
#include <omp.h>
#include <cstdio>
using namespace std;
const long num_steps = 300'000'000;
int main(int argc, char *argv[])
{
cout << setprecision(15) << fixed;
const unsigned num_threads = stoi(argv[1]);
int i, nthreads;
long double pi, sum[num_threads];
long double step = 1.0 / num_steps;
omp_set_num_threads(num_threads);
#pragma omp parallel
{
int i, id, nthrds;
long double x;
id = omp_get_thread_num();
nthrds = omp_get_num_threads();
if (id == 0) nthreads = nthrds;
for (i = id, sum[id] = 0.0; i < num_steps; i += nthrds)
{
x = (i + 0.5) * step;
sum[id] += 4.0 / (1.0 + x * x);
}
}
for (i = 0, pi = 0.0; i < nthreads; ++i) pi += step * sum[i];
cout << "PI = " << pi << endl;
cout << "PI = "
<< "3.14159265358979323846264338327950288419716939937510582097494" << endl;
}
这是我的任务。json:
"version": "2.0.0",
"tasks": [
{
"label": "program01",
"type": "shell",
"command": "g++",
"args": ["-std=c++2a", "-fopenmp", "-Wall", "-o", "program", "main.cpp"],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
问题出在这里: long double pi, sum[num_threads];
num_threads
必须是编译时常量,但不是,因为您在运行时获取它的值。
如果您想在运行时获取它的值,请创建一个动态数组,如下所示:
int i, nthreads;
long double pi;
long double* sum = new long double[num_threads];
然后执行myProgram.exe 8
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.