OpenCL内核语言:使用不带花括号的if语句时可能出现错误

OpenCL内核语言:使用不带花括号的if语句时可能出现错误,opencl,Opencl,以下是opencl内核代码。这不起作用: __kernel void testKernel(__global const int* srcA, __global const int* srcB, __global int* res, const int num) { const int idx = get_global_id(0);

以下是opencl内核代码。这不起作用:

__kernel void testKernel(__global const int* srcA, 
                        __global const int* srcB, 
                        __global int* res, 
                        const int num)
{
        const int idx = get_global_id(0);

        if (idx < num)
            res[idx] = srcA[idx] * srcB[idx];
}
\uuuuu内核void testKernel(\uuuu全局常量int*srcA,
__全局常量int*srcB,
__全局整数*res,
常数(整数)
{
const int idx=获取全局id(0);
if(idx
上面代码的日志是:12:2:error:expected identifier或'(' } ^"

但是,如果包含大括号,则它可以工作。下面是工作代码:

__kernel void testKernel(__global const int* srcA, 
                        __global const int* srcB, 
                        __global int* res, 
                        const int num)
{
        const int idx = get_global_id(0);

        if (idx < num)
        {
            res[idx] = srcA[idx] * srcB[idx];
        }
}
\uuuuu内核void testKernel(\uuuu全局常量int*srcA,
__全局常量int*srcB,
__全局整数*res,
常数(整数)
{
const int idx=获取全局id(0);
if(idx
我知道opencl内核语言遵循C99,但如果我正确理解C99,只有在if语句下有多行代码时才需要大括号。有人知道我为什么会出现这些错误吗

更新: 重写if语句后,错误不再显示。我无法重现错误

更新:错误再次出现,但如果我使用空格键而不是制表符缩进if语句下面的一行代码,错误就会再次消失


更新:重写后,现在可以编译内核了。它不是选项卡。

如果从文件中读取内核,请确保在存储它的数组末尾添加“\0”字符,否则编译器将变得混乱,并以不确定的方式运行

添加括号和空格通常可以使内核工作,但这不是问题的根源


我知道这是一篇老文章,但请测试它,因为interwebz上有多篇关于这个问题的未答复的论坛帖子。

如果您从文件中读取内核,请确保在存储它的数组末尾添加一个“\0”字符,否则编译器将变得混乱,并以不确定的方式运行

添加括号和空格通常可以使内核工作,但这不是问题的根源


我知道这是一篇老文章,但请测试一下,因为interwebz上有多篇未回复的论坛帖子。opencl内核是基于C的,但它是C的一个子集。C的所有方面都不能保证工作;不过我希望它能工作……你确定你正在查看的代码实际上是输入到opencl中的吗y?我曾经有一个类似于你的错误,是由于没有将正确的参数传递给clCreateProgramWithSource。opencl内核是基于C的,但它是C的一个子集。C的所有方面都不能保证工作;但我希望它能工作……你确定你正在查看的代码实际上正确地输入了opencl吗?我曾经有过与您的类似的错误,是由于未将正确的参数传递给clCreateProgramWithSource而导致的。