auto variables
新城@筑波大学情報です。こんにちは。
In article <6500ebba.0405180636.6339fd4f@posting.google.com>
mihogaoka2001@yahoo.com (miho) writes:
> > これは、auto 変数を return する話です。strlcpy() の話とは関
> > 係ありません。
> auto変数?
auto 変数というのは、C言語のローカル変数(デフォルト)のこ
とです。たとえば、次の x は、auto 変数です。
f()
{
auto int x;
}
まあ、auto って書かなくてもいいんだけど。
f()
{
int x;
}
局所変数には、auto の他に、register とか static があります。
register には番地がないので、& が付けらません。static には &
を付けるのは安全です。& を付けて、return して危ないのは、
auto です。& を付けて return して危ないのは、引数もそうです。
引数に auto って付けると、、、だめか。register はいいけど。
それで、auto 変数の番地を return するのは、だめです。
int *f()
{
int x ;
return( &x );
}
In article <6500ebba.0405170627.3e87499@posting.google.com>
mihogaoka2001@yahoo.com (miho) writes:
> foo(const char s)
> {
> static char d[SIZE];
> …;
> if (strlcpy (d, s, sizeof d) == sizeof d)
> むにゃむにゃ;
> …;
> return d;
> }
あ、static だ。auto の & で、コンパイラがブツブツいうのを
static と書いてごまかすのは、たしかにへぼい。
In article <6500ebba.0405180636.6339fd4f@posting.google.com>
mihogaoka2001@yahoo.com (miho) writes:
> へぼいプログラマが安易にコードを変更した場合に、
> (先の例における) sizeof d を変更し忘れて、その結果、
> 正しくないプログラムになってしまうことがある、
> と言いたいんですけど。
何でオブジェクトの長さを入れるのを「安易」にすると決めつけわ
け。ちゃんと malloc() から追跡したり、sizeof() の意味を理解
して、きちんと考えて直さなきゃだめでしょ。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735