🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

スコープ

スコープとは、プログラム内で変数名など、参照可能な有効範囲のことを指します。

Q&A

解決済

2回答

2081閲覧

同時に宣言された変数のスコープと初期化順

SaitoAtsushi

総合スコア5684

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

スコープ

スコープとは、プログラム内で変数名など、参照可能な有効範囲のことを指します。

1グッド

2クリップ

投稿2019/11/05 07:38

プログラミング言語 C において、同時に宣言されている変数のスコープ、および初期化順がどのようになるのか仕様中に見つけることが出来ませんでした。 C99 の文言の内でどの項目で説明されているのか (あるいは説明されていないのか) を教えてください。

実際に GCC や Clang で (オプションとして -std=c99 を付けて) 試してみたところ

int a=1, b=a;

という書き方は通りましたが

int c=d, d=1;

はエラーになるというところから、書かれた順に分割した

int a=1; int b=a; int c=d; int d=1;

とおおよそ等価なものとして解釈しているように見えますが、これは言語仕様として保証された動作でしょうか?

(この質問での変数宣言はローカル変数の場合であることとします。)

LouiS0616👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

複数の変数宣言がある場合、1つ目から順に処理されるということは保証されていると考えて間違いなさそうです。

他の宣言子の一部ではない宣言子を完結宣言子(full declarator)と呼ぶ。完結宣言子の最後は副作用完了点とする。(JIS X 3010:2003 6.7.5 宣言子より)

投稿2019/11/05 08:01

maisumakun

総合スコア145963

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2019/11/05 12:48

厳密な仕様と言う意味では詳しくないですが、カンマ演算子と考えると、左から処理されるのでは?
maisumakun

2019/11/05 12:49

同じカンマでも、関数の引数区切りでは順序が保証されませんので、別な根拠が必要かと思います。
pepperleaf

2019/11/05 13:22

確かに、引数区切りのカンマは順序が保証されませんでした。 宣言のカンマは、、、ここも正確には仕様確認ですね。
thkana

2019/11/05 14:54

宣言の区切りのカンマは、JISの規格書 6.7 宣言のところに > コンマで区切られた宣言子の列 とあり、カンマ演算子とは別のものでしょう。
guest

0

ベストアンサー

JISの規格書
6.2.1 識別子の有効範囲
のところに

それ以外のすべての識別子は,その宣言子の完了の直後から始まる有効範囲をもつ。

とあるのが効くんじゃないかという気がします。

投稿2019/11/05 14:57

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問