初投稿です。とあるサイトの変数についての質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぺろ

初投稿です。とあるサイトの変数についての質問です。

#1

投稿記事 by ぺろ » 3年前

初めての投稿です。気軽に何でも質問を受け付けているところに非常に魅力を感じています。
新たな言語を試みようと以下のサイトを通して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に来ていることもあるのでこんがらがっていることもあるかもしれません。このサイトでは宣言とか言っているくせに、初期化していますし、エラーになると注意されていることを試してみても問題なく、実行できました。初期化されていな変数は先頭部分に限らず、エラーが起こるから、初期化をしないと、エラーが出るということを言いたいのだと思うのですがこのサイトの明記の仕方が変でしょうか?それとも何かしらの修正があったのですか?具体性に少し欠けた説明ですが、よろしくお願いします。

アバター
あたっしゅ
記事: 663
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: 初投稿です。とあるサイトの変数についての質問です。

#2

投稿記事 by あたっしゅ » 3年前

ミクプラ沼へ、ようこそ。

コード:

#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);
}
 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)
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

Meta3

Re: 初投稿です。とあるサイトの変数についての質問です。

#3

投稿記事 by Meta3 » 3年前

確かにC90までは、ローカル変数はブロックの先頭でしか宣言できませんでした
C99からは、ブロックの途中でも変数宣言ができるようになっています。

VisualStudio2019 ではエラーにならないがVisualStudio2008ではエラー

コード:

c:\b>cl c1.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

c1.c
c1.c(9) : error C2143: 構文エラー : ';' が '型' の前にありません。
c1.c(10) : error C2065: 'c' : 定義されていない識別子です。

c:\b>

ぺろ

#4

投稿記事 by ぺろ » 3年前

大変有益な情報をありがとうございます。
暖かい対応に本当に感謝しています。このサイト気に入りました👍

返信

“C言語何でも質問掲示板” へ戻る