いつもお世話になっております。
今、読んでいる本に次のような問題があるのですが、理解度が不十分なせいか答えられません。
皆様ならどう解答されますか。
演習4_3
整数リテラル0が8進リテラルであることを論理的に説明せよ。
演習問題なのでコードを書くのでしょうが、0が先頭文字になるのは8進リテラルだということをコンパイルして証明すれば良いということでしょうか。
整数リテラル0が8進リテラルであることの説明
Re: 整数リテラル0が8進リテラルであることの説明
C の規格書 JIS X3010:2003(ISO/IEC 9899:1999) に書いてあるから。peyoun9 さんが書きました:いつもお世話になっております。
今、読んでいる本に次のような問題があるのですが、理解度が不十分なせいか答えられません。
皆様ならどう解答されますか。
演習4_3
整数リテラル0が8進リテラルであることを論理的に説明せよ。
6.4.4.1 整数定数
構文規則
整数定数:
10進定数 整数接尾語opt
8進定数 整数接尾語opt
16進定数 整数接尾語opt
10進定数:
非0数字
10進定数 数字
8進定数:
0
8進定数 8進数字
16進定数:
16進接頭語 16進数字
16進定数 16進数字
16進接頭語: 次のいずれか
0x 0X
非0数字: 次のいずれか
1 2 3 4 5 6 7 8 9
8進数字: 次のいずれか
0 1 2 3 4 5 6 7
16進数字: 次のいずれか
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
整数接尾語:
U接尾語 L接尾語opt
U接尾語 LL接尾語
L接尾語 U接尾語opt
LL接尾語 U接尾語opt
U接尾語: 次のいずれか
u U
L接尾語: 次のいずれか
l L
LL接尾語: 次のいずれか
ll LL
Re: 整数リテラル0が8進リテラルであることの説明
かずまさん、返信頂きありがとうございます。
8進リテラルが0~7で始まること10進は0で始まらないこと、16進は0xで始まることは私も学習致しました。
今まで取り組んできた演習問題に文章で解答するパターンがなかったので、なんとなくコードをかくのかなと思ったのですが、コードで説明するというのは可能なのでしょうか?
8進リテラルが0~7で始まること10進は0で始まらないこと、16進は0xで始まることは私も学習致しました。
今まで取り組んできた演習問題に文章で解答するパターンがなかったので、なんとなくコードをかくのかなと思ったのですが、コードで説明するというのは可能なのでしょうか?
Re: 整数リテラル0が8進リテラルであることの説明
0で始まることはわかりますが、1~7で始まるというのはよくわかりません。peyoun9 さんが書きました:8進リテラルが0~7で始まる
0で始まって0~7「を使う」ならば、何とかわかります。
まあ、それはさておき、こんなコードを書いてみてコンパイルエラーになることで説明が付きませんか?
こちらの環境(gcc4.9.3)では、こんなエラーが出ました。
C-Application3.c:5:13: error: invalid digit "8" in octal constant
8進数の数値には8は使えねーぞってことで。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 整数リテラル0が8進リテラルであることの説明
boxさんありがとうございます。
さて、整数リテラル0が8進リテラルであることの説明という問いに対する答えは、やはりかずまさんの
仰るとおり、0~7「を使う」の誤りでした。8進数と8進リテラルとを混同しておりました。0で始まることはわかりますが、1~7で始まるというのはよくわかりません。
0で始まって0~7「を使う」ならば、何とかわかります。
さて、整数リテラル0が8進リテラルであることの説明という問いに対する答えは、やはりかずまさんの
に尽きるということでしょうか。かずま さんが書きました:10進定数は 0以外の数字で始まるから、0は 10進定数ではない。
16進定数は 0x または 0X で始まるから、0は 16進定数ではない。
8進定数は 0で始まるから、0は 8進定数である。
Re: 整数リテラル0が8進リテラルであることの説明
返信遅れましたが、皆さま、ご閲覧・ご回答ありがとうございました。
boxさんの書いてくださったコードも参考になりました。
自分の環境でも試して同様のエラーを確認できました。
ありがとうございました。
boxさんの書いてくださったコードも参考になりました。
自分の環境でも試して同様のエラーを確認できました。
ありがとうございました。