0

与えられたファイル:

// file: q7a.h
static int err_code = 3;
void printErrCode ();
///////////// END OF FILE /////////////////
// file: q7a.c
#include <stdio.h>
#include "q7a.h"
void printErrCode ()
{
printf ("%d ", err_code);
}
///////////// END OF FILE /////////////////
// file: q7main.c
#include "q7a.h"
int main()
{
err_code = 5;
printErrCode ();
return 0;
}
///////////// END OF FILE /////////////////

出力は次のとおりです。

3

私の質問は、なぜ出力が5ではないのですか?ありがとう。

4

3 に答える 3

4

静的グローバルオブジェクトのスコープは、現在のコンパイル単位に制限されています。この場合、2つのコンパイルユニットがあります。1つは各.cファイル用で、それぞれに独自のerr_codeがあります。

于 2010-10-03T11:35:54.667 に答える
3

staticfor キーワードは、静的リンケージを指定します。err_codeつまり、変数は翻訳単位に対してローカルです。

q7a.cファイルをq7main.c別々にコンパイルしていると、2 つの異なるerr_code変数が存在します。したがって、関数printErrCodeはスコープ内でのみ可視q7a.cを使用しています。err_codeq7a.c

于 2010-10-03T11:41:18.567 に答える
0

グローバル変数が悪いため、出力は 5 ではありません。

err_code をどこにも宣言せずに、これを試してくださいmain()

void printErrCode (int err_code)
{
    printf ("%d ", err_code);
}

int main ()
{
    /* ... */
    printErrCode(5);
    /* ... */
}
于 2010-10-03T11:51:46.487 に答える