2009-04-29 5 views
1

私はCプログラムで不思議な動作をしました。例えば、今、私はfoo.hというを含む別のCファイルからこの関数を呼び出すときC:渡されたパラメータが、別のモジュールへの関数呼び出しの後にNULLになる理由

foo (char *first, size_t a, size_t b, size_t c, char *last); 

:私はfoo.cをというファイルに次のシグネチャを持つ関数への数引数を渡します:最初のfooで

foo("first value", 1, 2, 3, "last value"); 

、A、B、Cは正しいですが、最後は常にNULLです。 私は最後のパラメータとしても、私がこの関数を(以前の操作なしでメインで直接でも)呼び出す場所からどのような種類の型を使用しても問題ありません。 ファイルはコンパイルされ、1つの実行可能ファイルにリンクされます。 foo()を同じソースファイルに置くと、どこから呼び出されたのかが分かります。

誰かが、関数がアウトソースしたときに最後のパラメータがNULLである理由が何であるか考えていますか?

+1

foo.hの署名は何ですか? – dsm

+0

コードを表示してください。あなたはなぜlastがnullだと思いますか?あなたはそれをリテラルに渡しているようです。 – tpdi

+0

foo.hの関数プロトタイプが正しいことを保証しましたか? – Noldorin

答えて

2

コードを見ることなく、私の推測では、(ヘッダ内の)関数の宣言が、(ソースファイル内の)定義と矛盾していると思います。

0

お返事ありがとうございます。

litbのヒントが正しいです。私がsize_tをインクルードするのを忘れた別のヘッダファイルでは、再定義されました。したがって、基本的に1つのソースファイルは32ビットを使用し、もう1つは64ビットのsize_tデータ型を使用しました。

(お客様が嫌なことがあるため、コードを投稿できませんでした)

関連する問題