0

所以我的问题是,我将一个变量按值(它是一个浮点数)从我的 C 代码中的一个函数传递给另一个函数。由于某种原因,通过后变量为 0。我有多个其他浮点数按值传递,它们不是 0(都在同一个函数调用中),所以我不明白为什么会这样。它可能就像我没有看到的一些错字一样简单:

int cuda_call(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W){

    printf("\n What am I here?: %f \n", kernelSum);
    convolutionProgram(h_DataA, h_Kernel, numSmooths, kernelSum, KERNEL_R, KERNEL_W, DATA_W);
    return 1;
}

extern "C" void convolutionProgram(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W);


void convolutionProgram(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W){

    printf("\n what am I now? %f \n", kernelSum);
    float
        *d_DataA,
        *d_DataB,
        *d_Temp,
    *d_Kernel;
       .......
}

当我在被调用函数中得到第二个打印时,它是 0。

4

2 回答 2

1

也许您最终以某种方式混合了调用约定 (ABI)。例如,第一个编译单元可能正在执行cdecl调用,而第二个编译单元使用fastcall.

http://en.wikipedia.org/wiki/X86_calling_conventions

于 2012-04-05T19:29:18.627 回答
0

您是否可能没有为其中一个 c 文件重建目标文件?这看起来像是一个签名不匹配,它可以由函数签名更改引起,而无需重建两个目标文件。

于 2012-04-05T18:44:44.773 回答