2016-04-25 18 views
2

私はここでは何かが分からないと確信していますが、それが何であるか把握できません。 my repositoryには、 "ddpoly2"という関数を含むddpoly_2.cというファイルがあります。私はtst5.cのmain関数からこの関数を呼び出します。 tst5_2.cのコードを見ると、私はxaの値を2に割り当ててすぐにそれを印刷し、それを第3の引数として "ddpoly2"に渡します。私が言うことができる)。私はすぐに関数 "ddpoly2"からxを出力します。私が見るものは以下の通りです:C関数のfloat引数が関数内で異なる値をとる

x outside: 2.000000 
x inside : 0.000000 
nc: 2 
nd: 3 

あなたはそのXを見ることができる関数が呼び出された直前2.000000だったが、それは関数内で一度0.0000000となりました。私は明白にここに明白な何かを欠いているに違いないが、それが何であるか把握することはできない。

P.S.同じディレクトリにあるmakefileを使ってコードをコンパイルします。

編集:コードの関連部分をここに含めます。関数ddpoly2内部

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);  
} 

印刷、それを::

#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); 
} 
+6

質問自体に参照している実際のコードを含めてください。 – Codor

+3

[mcve] –

+1

を提供してください。実際の*コール*をその関数にも表示できますか? –

答えて

3

あなたはプロトタイプなしの関数を呼び出しているtst5_2.cで関数を呼び出す

。これは1999年以来違法ですが、コンパイラが役立ち、これを古いC標準との互換性として許可します。

C標準は言う:

呼び出される関数を表し、式はプロトタイプが含まれていないタイプを持っている場合は、整数プロモーションは、各引数で実行され、およびfloat型を持つ引数が促進されます倍増する

正解はにある:常に正しい関数プロトタイプを持っている

  1. コンパイル時に常にすべての警告を有効にし、エラーとして扱います。
+1

'-Wall -Wextra -Werror -pedantic'は常にあなたのコマンドラインになければなりません。 – Qix

+0

Cでのプログラミングは、剣闘とアイススケートのようなものです。私は今なぜか分かります。 –

関連する問題