初めての投稿です。気軽に何でも質問を受け付けているところに非常に魅力を感じています。
新たな言語を試みようと以下のサイトを通してC言語の学習しはじめたのですが...
http://c-lang.sevendays-study.com/day2.html
以下の文章が書かれていました。
『また、変数の宣言をする場所ですが、必ず{}の先頭の部分で行わなくてはなりません。以下のように、何らかの処理が行われた後で変数を定義すると、エラーになりますので、注意が必要です。』
以下のコードを打ち込んで検証しました
#include <stdio.h>
void main()
{
// 先頭の部分で変数の宣言を行う。
int a, b = 1;
double d = 0.1, e;
printf("hello\n");//何らかの処理
int c = 10;//何らかの処理の後の宣言と初期化
printf("%d", c);//宣言の後の処理
}
C#を少しかじってから、Cに来ていることもあるのでこんがらがっていることもあるかもしれません。このサイトでは宣言とか言っているくせに、初期化していますし、エラーになると注意されていることを試してみても問題なく、実行できました。初期化されていな変数は先頭部分に限らず、エラーが起こるから、初期化をしないと、エラーが出るということを言いたいのだと思うのですがこのサイトの明記の仕方が変でしょうか?それとも何かしらの修正があったのですか?具体性に少し欠けた説明ですが、よろしくお願いします。
初投稿です。とあるサイトの変数についての質問です。
Re: 初投稿です。とあるサイトの変数についての質問です。
ミクプラ沼へ、ようこそ。
https://www.onlinegdb.com/ で C 言語モードでやってみた結果、動きました。
この場合、e は
ネイピア数
https://ja.wikipedia.org/wiki/%E3%83%8D ... 2%E6%95%B0
ではなく 0.0
宣言と共に初期化をするのは、推奨されているプログラミング・スタイルです。
> それとも何かしらの修正があったのですか?
おそらく、C++ の規格が、C の規格に、フィードバックされたのだと思います。
規格沼
https://postd.cc/code-behaving-differen ... 8-and-c11/
C90, C99, C11, C++98, C++11で異なる動作をするコード - POSTD(ja)
#include <stdio.h>
void main()
{
// 先頭の部分で変数の宣言を行う。
int a, b = 1;
double d = 0.1, e; // この行、入力ミスないですか ?
printf("hello\n");//何らかの処理
int c = 10;//何らかの処理の後の宣言と初期化
printf("%d\n", c);//宣言の後の処理
printf("%lf\n", d);
double d2 = e; // e は変数ではなく、浮動小数点。
printf("%lf\n", d2);
}
この場合、e は
ネイピア数
https://ja.wikipedia.org/wiki/%E3%83%8D ... 2%E6%95%B0
ではなく 0.0
宣言と共に初期化をするのは、推奨されているプログラミング・スタイルです。
> それとも何かしらの修正があったのですか?
おそらく、C++ の規格が、C の規格に、フィードバックされたのだと思います。
規格沼
https://postd.cc/code-behaving-differen ... 8-and-c11/
C90, C99, C11, C++98, C++11で異なる動作をするコード - POSTD(ja)
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: 初投稿です。とあるサイトの変数についての質問です。
確かにC90までは、ローカル変数はブロックの先頭でしか宣言できませんでした
C99からは、ブロックの途中でも変数宣言ができるようになっています。
VisualStudio2019 ではエラーにならないがVisualStudio2008ではエラー
C99からは、ブロックの途中でも変数宣言ができるようになっています。
VisualStudio2019 ではエラーにならないがVisualStudio2008ではエラー