グローバル変数 (ファイル スコープがあるという意味で「グローバル」) と関数を含む *.c ファイルがあるとします。関数は、他の翻訳単位で使用される値としてその変数を返すことができますか?
答えは「はい」だと思います。他に何もないとしても、C では return は「コピー」セマンティクスの下で動作すると想定しています。つまり、return 式の値が返されます。確信はないけど。
グローバル変数 (ファイル スコープがあるという意味で「グローバル」) と関数を含む *.c ファイルがあるとします。関数は、他の翻訳単位で使用される値としてその変数を返すことができますか?
答えは「はい」だと思います。他に何もないとしても、C では return は「コピー」セマンティクスの下で動作すると想定しています。つまり、return 式の値が返されます。確信はないけど。
はい。そして、あなたは正しいです: のようなものを返す場合int
、その現在のコピーを返します。ポインターを返す場合は、変数自体へのアクセスを許可します。
え、こんなもの?
交流
int foo = 3;
int get_foo() { return foo; }
main.c
#include <stdio.h>
#include "a.c"
int main(void)
{
printf("%d\n", get_foo());
return 0;
}
出力:
3
答えは「はい」だと思います。他に何もないとしても、C では return は「コピー」セマンティクスの下で動作すると想定しています。つまり、return 式の値が返されます。確信はないけど。
あなたは正しいです。
グローバル変数 (ファイル スコープがあるという意味で「グローバル」) を持つ *.c ファイルがあるとします。
.c ファイルで変数をグローバルに宣言すると、グローバルな期間になることに注意してください。ファイル スコープに制限する場合は、static
修飾子を使用します。関数を介して値を渡すことは引き続き可能です。
私が衒学者だったら、ノーと言うでしょう。グローバル変数の値を返すことができます。その値は、参照ではなく、瞬間的なコピーになります。つまり、グローバルが変更されても、値は変更されません。
それを超えて、あらゆる種類の理由により、最初のインスタンスではグローバル変数を避ける必要があります。