我确信我在这里遗漏了一些明显的东西,但却无法弄清楚它是什么。在my repository中,我有一个名为ddpoly_2.c的文件,其中包含一个名为" ddpoly2"的函数。我从tst5.c中的main函数调用此函数。如果你查看tst5_2.c中的代码,我将x赋值为2,立即打印它然后将其传递给" ddpoly2"作为第三个参数(根据我所知道的调用模式应该是什么)。然后我立即从函数" ddpoly2"中打印x。我看到的是以下内容:
x outside: 2.000000
x inside : 0.000000
nc: 2
nd: 3
在调用函数之前,您可以看到x是2.000000,但在函数内部它变为0.0000000。我必须在这里遗漏一些显而易见的东西,但无法弄清楚它是什么。
P.S。我使用同一目录中的makefile编译代码。
编辑:在此处包含相关的代码部分。
在tst5_2.c中调用该函数:
int main(int argc, char *argv[])
{
//Used to determine which section gets its results printed.
float c[] = {1,1,1,0,0};
int nc = 2;
float x = 2.0;
float pd[] = {0,0,0,0,0};
int nd = 3;
printf("x outside: %f\n",x);
ddpoly2(c,nc,x,pd,nd);
}
将其打印在函数ddpoly2:
中#include <stdio.h>
void ddpoly2(float c[], int nc, float x, float pd[], int nd)
{
int nnd, j, i;
float cnst = 1.0;
printf("x inside : %f\n",x);
printf("nc: %d\n",nc);
printf("nd: %d\n",nd);
}
答案 0 :(得分:3)
你正在调用没有原型的函数。这是自1999年以来的非法行为,但您的编译器很有帮助,并允许这与旧的C标准兼容。
C标准说:
如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并将类型为float的参数提升为double。
正确的解决方案是: