!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 156
https://mevius.5ch.net/test/read.cgi/tech/1601271690/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
C言語なら俺に聞け 157
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0345-kMi9)
2021/06/28(月) 11:22:51.50ID:so+vl3vs02デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/28(月) 11:26:33.76ID:so+vl3vs0 前スレ末期の流れを再掲
> 996 自分:デフォルトの名無しさん (ワッチョイ 0f45-Sffs)[sage] 投稿日:2021/06/28(月) 09:33:23.09 ID:so+vl3vs0 [1/2]
> printf("%d", sizeof (char)123); とやろうとしたら
> キャストのカッコがsizeofのカッコと解釈されてエラーになるのな
> printf("%d", sizeof((char)123)); ならおkなんだけど
> なんだか気持ち悪い
>
> 997 返信:デフォルトの名無しさん (ワッチョイ cf05-Ibo0)[sage] 投稿日:2021/06/28(月) 10:13:18.97 ID:x/UkG1ge0
> >>996
> sizeofって括弧なしで使えるの? 知らなかった
>
> 998 返信:デフォルトの名無しさん (ワッチョイ 0fda-qjGA)[sage] 投稿日:2021/06/28(月) 10:20:43.69 ID:WejOUFlX0
> >>996
> sizeof演算子の優先順位はcast演算子の優先順位より高いので、括弧がないと
> まず最初にsizeofと数値リテラルが評価されてその後でその結果をcastで評価するという
> おかしな状態になるのでエラーになったのでは?
>
> 999 自分:デフォルトの名無しさん (ワッチョイ 0f45-Sffs)[sage] 投稿日:2021/06/28(月) 10:38:03.51 ID:so+vl3vs0 [2/2]
> sizeofとキャストはどちらも単項式なので右から結合するはず
> にも関わらずキャストが先に読まれないので気持ち悪いと言ったんだ
> 字句解析と意味解析ってことかな
>
> 1000 名前:デフォルトの名無しさん (ワッチョイ 0fd2-kMi9)[] 投稿日:2021/06/28(月) 11:05:48.75 ID:HW6dR9O/0
> そもそも
> sizeof (char)
> paだけでいいものをそう記述してるのが気持ち悪い。
> 996 自分:デフォルトの名無しさん (ワッチョイ 0f45-Sffs)[sage] 投稿日:2021/06/28(月) 09:33:23.09 ID:so+vl3vs0 [1/2]
> printf("%d", sizeof (char)123); とやろうとしたら
> キャストのカッコがsizeofのカッコと解釈されてエラーになるのな
> printf("%d", sizeof((char)123)); ならおkなんだけど
> なんだか気持ち悪い
>
> 997 返信:デフォルトの名無しさん (ワッチョイ cf05-Ibo0)[sage] 投稿日:2021/06/28(月) 10:13:18.97 ID:x/UkG1ge0
> >>996
> sizeofって括弧なしで使えるの? 知らなかった
>
> 998 返信:デフォルトの名無しさん (ワッチョイ 0fda-qjGA)[sage] 投稿日:2021/06/28(月) 10:20:43.69 ID:WejOUFlX0
> >>996
> sizeof演算子の優先順位はcast演算子の優先順位より高いので、括弧がないと
> まず最初にsizeofと数値リテラルが評価されてその後でその結果をcastで評価するという
> おかしな状態になるのでエラーになったのでは?
>
> 999 自分:デフォルトの名無しさん (ワッチョイ 0f45-Sffs)[sage] 投稿日:2021/06/28(月) 10:38:03.51 ID:so+vl3vs0 [2/2]
> sizeofとキャストはどちらも単項式なので右から結合するはず
> にも関わらずキャストが先に読まれないので気持ち悪いと言ったんだ
> 字句解析と意味解析ってことかな
>
> 1000 名前:デフォルトの名無しさん (ワッチョイ 0fd2-kMi9)[] 投稿日:2021/06/28(月) 11:05:48.75 ID:HW6dR9O/0
> そもそも
> sizeof (char)
> paだけでいいものをそう記述してるのが気持ち悪い。
3デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/28(月) 11:28:49.59ID:so+vl3vs0 >>前スレ1000
いやcharのサイズが知りたいのではなく
キャスト式(char)123のサイズを調べようとしたんだ
Cはchar変数の値を使おうとするとintに拡張するし文字定数もint型なので
char型の値を持つ式なんてあるのかって
いやcharのサイズが知りたいのではなく
キャスト式(char)123のサイズを調べようとしたんだ
Cはchar変数の値を使おうとするとintに拡張するし文字定数もint型なので
char型の値を持つ式なんてあるのかって
4デフォルトの名無しさん (ブーイモ MM0f-iMxR)
2021/06/28(月) 11:37:03.08ID:XSoi24UgM cppreferenceのc operator precedenceの項の注釈によるとオペアンドはtype castにはできないって書いてあるね。ただ仕様書の該当箇所は探せなかった
5デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/28(月) 11:58:43.53ID:so+vl3vs0 脚注2は俺が気持ち悪いと言ったことと似てるけどsizeof(int)*pが
(sizeof(int)) * pという算術乗算になるという話なら単項式のsizeofより優先順位が低いからまだわかる
(sizeof(int)) * pという算術乗算になるという話なら単項式のsizeofより優先順位が低いからまだわかる
6デフォルトの名無しさん (ブーイモ MM0f-iMxR)
2021/06/28(月) 12:57:31.08ID:XSoi24UgM A.2.1が引用元みたいなんで読んでみるとsizeof (int)123はダメだね。
sizeof +(int)123なら動くようだ。sizeof (int){1}も動きそう。
sizeof +(int)123なら動くようだ。sizeof (int){1}も動きそう。
7デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/28(月) 15:54:14.85ID:so+vl3vs0 あーそうか
A.2.1. (6.5.3)では
unary-expressionに該当するものの1つに
unary-operator cast-expressionがあるけど
unary-operatorにキーワードsizeofが含まれず、
カッコなしのキャスト式は
sizeof unary-expressionとなっていて
sizeof cast-expressionではないってことか
A.2.1. (6.5.3)では
unary-expressionに該当するものの1つに
unary-operator cast-expressionがあるけど
unary-operatorにキーワードsizeofが含まれず、
カッコなしのキャスト式は
sizeof unary-expressionとなっていて
sizeof cast-expressionではないってことか
8デフォルトの名無しさん (ワッチョイ 3fad-wfqF)
2021/06/29(火) 00:32:13.44ID:jRoYjmsV0 ところで sizeof((char) 123) と sizeof(char) って同じことだよな?
9デフォルトの名無しさん (ブーイモ MM53-FyAt)
2021/06/29(火) 01:01:59.00ID:cYz04uBKM ポインタキャストは敷居線さえ跨がなきゃ思い通りの値出てくるけど
数値キャストは難しいんだよな
数値キャストは難しいんだよな
10デフォルトの名無しさん (アウアウウー Sad3-TUf5)
2021/06/29(火) 01:04:11.67ID:lZY/6JCta >>8
GCC 9.3.0 では両方とも 1 でした
GCC 9.3.0 では両方とも 1 でした
11デフォルトの名無しさん (ブーイモ MM53-FyAt)
2021/06/29(火) 01:05:05.10ID:cYz04uBKM printf さんの独自性もあるし
12デフォルトの名無しさん (ワッチョイ 3fad-wfqF)
2021/06/29(火) 02:00:52.74ID:jRoYjmsV0 >>10
ていうかやるまでもなく結果が同じにならないとおかしいよね。
一方は値を char 型にキャストしているんだから sizeof の結果は char 型のサイズになる。
もう一方は char 型のサイズを求めているから char 型のサイズになる。
ていうかやるまでもなく結果が同じにならないとおかしいよね。
一方は値を char 型にキャストしているんだから sizeof の結果は char 型のサイズになる。
もう一方は char 型のサイズを求めているから char 型のサイズになる。
13はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-0Yon)
2021/06/29(火) 04:29:15.93ID:OP5z1lEO0 二項演算子のいくつかでは汎整数拡張が適用されることになっているが
sizeof に渡す分には char のオブジェクトは char のオブジェクトだよ。
sizeof に渡す分には char のオブジェクトは char のオブジェクトだよ。
14デフォルトの名無しさん (ワッチョイ 0fd2-hdpQ)
2021/06/29(火) 08:37:44.49ID:F75/2W0I0 char型 + char型 の式でもint型に拡張されるんだっけ?
15デフォルトの名無しさん (スッップ Sd5f-OBU1)
2021/06/29(火) 13:20:32.79ID:f0Xm8hptd もち
単項プラスでさえ拡張する
単項プラスでさえ拡張する
16デフォルトの名無しさん (ワッチョイ cfbb-0Yon)
2021/06/29(火) 13:41:07.94ID:dKjX5GmV0 typedefによる新しい型の定義って、コンパイラの工程的にはどの工程で定義されるの?
字句解析?構文解析?プリプロセスじゃないよね
字句解析?構文解析?プリプロセスじゃないよね
17デフォルトの名無しさん (ワッチョイ 3f66-j5Ba)
2021/06/29(火) 14:16:01.66ID:NxeKtV2S0 質問が間違ってる気がするけどね。
コンパイルレベルで処理されるのか、リンクするまで処理されないのか、でしょ。
で、typedefは前者
コンパイルレベルで処理されるのか、リンクするまで処理されないのか、でしょ。
で、typedefは前者
18デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/29(火) 20:18:28.43ID:SX14oDOe0 翻訳段階の何番目でやってんのかって質問だろ
19デフォルトの名無しさん (ワッチョイ 0f01-htoQ)
2021/06/29(火) 20:52:30.02ID:0ahpifum0 構文解析の後 typedef と認知したうえで、シンボルのテーブルに追加してかないと
置換?読み替え?はできないよねぇ…
C言語は、その構造上1回の通読では解決できないんだっけ?
置換?読み替え?はできないよねぇ…
C言語は、その構造上1回の通読では解決できないんだっけ?
20デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/29(火) 21:06:15.61ID:SX14oDOe0 5.1.1.2 Translation phasesくらい読んでから来いよ
21デフォルトの名無しさん (ワッチョイ 3f66-j5Ba)
2021/06/29(火) 22:00:49.44ID:NxeKtV2S0 だからぁw
構文解析ってのはパーサね?w←これは例えばbisonで作るやつね?w
字句解析ってのはレキシカルアナライザね?w←これは例えばflexで作るやつね?w
レキシカルアナライザかパーサかって、そもそもレキシカルアナライザってのは
字句区切るだけだよwそれをどんな命令であるかを解釈を決めるのが構文解析ねw
コンパイルの1pass,2passって話なら、まあそれでもいいけどさw
用語がでたらめすぎんでしょ。
だいたいそんなこと知ってどうするんだよ?w
構文解析ってのはパーサね?w←これは例えばbisonで作るやつね?w
字句解析ってのはレキシカルアナライザね?w←これは例えばflexで作るやつね?w
レキシカルアナライザかパーサかって、そもそもレキシカルアナライザってのは
字句区切るだけだよwそれをどんな命令であるかを解釈を決めるのが構文解析ねw
コンパイルの1pass,2passって話なら、まあそれでもいいけどさw
用語がでたらめすぎんでしょ。
だいたいそんなこと知ってどうするんだよ?w
22デフォルトの名無しさん (ワッチョイ 3f36-wfqF)
2021/06/29(火) 22:05:17.86ID:gp7v5PNW0 セキュリティホール探し?
23デフォルトの名無しさん (ワッチョイ cfbb-lfrx)
2021/06/29(火) 23:35:14.00ID:dKjX5GmV0 Cの構文解析器実装してるんだけどBNFのtypedefの扱いがイミフなんだよねー
24デフォルトの名無しさん (ワッチョイ 3f66-YS6X)
2021/06/29(火) 23:57:55.23ID:NxeKtV2S0 >>23
またぁw
BNF関係ないでしょうw
つか、typedefなんて意味不明なんてことはないと思うけど。
特定の記法のことを指してるの?BNFで書かれた
typedefの規則が読みとれないって言ってるの?w
typedef struct {...};
と
struct {...} xxx;
を区別できないとかそんな話?
よくわかんないけど、変に切り出すんじゃなくて、
ストレートにこれがやりたいけど、これどうしたらいいか
わかんない、って聞く方がいいと思うんだが。
なにいってんだか、知ってる人ほど却ってわかんねーと思うんだが。
またぁw
BNF関係ないでしょうw
つか、typedefなんて意味不明なんてことはないと思うけど。
特定の記法のことを指してるの?BNFで書かれた
typedefの規則が読みとれないって言ってるの?w
typedef struct {...};
と
struct {...} xxx;
を区別できないとかそんな話?
よくわかんないけど、変に切り出すんじゃなくて、
ストレートにこれがやりたいけど、これどうしたらいいか
わかんない、って聞く方がいいと思うんだが。
なにいってんだか、知ってる人ほど却ってわかんねーと思うんだが。
25デフォルトの名無しさん (ワッチョイ 3f01-kMi9)
2021/06/30(水) 00:35:54.93ID:dsegDYOD0 typedefがstorage-class specifierに属してることを言ってるなら
構文上の便宜のためだけ(for syntactic convenience only)って6.7.1(5)に書いてあるけど
Annexのsyntax summaryだけ見てる感じかな
かなりエスパーしてるから的外れだったらすまぬ
構文上の便宜のためだけ(for syntactic convenience only)って6.7.1(5)に書いてあるけど
Annexのsyntax summaryだけ見てる感じかな
かなりエスパーしてるから的外れだったらすまぬ
26デフォルトの名無しさん (ワッチョイ cfbb-lfrx)
2021/06/30(水) 01:02:59.78ID:xHlidKVh0 みなさんレスありがとう
「C BNF」でググって一番上に出るBNFを参考に実装しているんだけど、BNFが古いせいかtypedefの構文が欠落してるような気がして(気のせいでした。↓のレス参照)
でも<typedef-name>という要素はあるからtypedef機能自体はあるらしい
BNFに書いてないってことは構文解析以前の処理になるのかもしれないと思ってここで聞いてみたんだけど
混乱した人もいるみたいですまない
>>25
あー!そういうことですか
なるほど疑問が解けました
typedefをspecifierで扱ってるわけですね
ありがとうございます
「C BNF」でググって一番上に出るBNFを参考に実装しているんだけど、BNFが古いせいかtypedefの構文が欠落してるような気がして(気のせいでした。↓のレス参照)
でも<typedef-name>という要素はあるからtypedef機能自体はあるらしい
BNFに書いてないってことは構文解析以前の処理になるのかもしれないと思ってここで聞いてみたんだけど
混乱した人もいるみたいですまない
>>25
あー!そういうことですか
なるほど疑問が解けました
typedefをspecifierで扱ってるわけですね
ありがとうございます
27デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/30(水) 06:48:58.92ID:tpFz8l2w028デフォルトの名無しさん (ワッチョイ cfbb-lfrx)
2021/06/30(水) 09:43:56.46ID:xHlidKVh029デフォルトの名無しさん (ワッチョイ b6da-xL6t)
2021/07/17(土) 09:12:05.75ID:17h8nqYk0 リスト型構造体配列って他の言語でもあるのでしょうか?
現在職業訓練で勉強中なのですが、独学でやらないといけない範囲のようでして、
時間的余裕があまりない状態です。
他言語でも似たような考えが出てきて、Cで覚えておくと役立つなど
ございましたら、頑張って挑戦してみようと思っています。
現在職業訓練で勉強中なのですが、独学でやらないといけない範囲のようでして、
時間的余裕があまりない状態です。
他言語でも似たような考えが出てきて、Cで覚えておくと役立つなど
ございましたら、頑張って挑戦してみようと思っています。
30デフォルトの名無しさん (ブーイモ MM0e-xXJe)
2021/07/17(土) 12:16:52.25ID:xP6i4weKM リスト型構造体配列ってのは講師の人の自作用語?
それなら定義を示してもらわんと。
それなら定義を示してもらわんと。
31デフォルトの名無しさん (ワッチョイ aabd-WluE)
2021/07/17(土) 12:38:05.00ID:+M7J9sQi0 リンクリストなら他の言語にもある
普通は配列とは言わないからその言葉は謎だけど……
普通は配列とは言わないからその言葉は謎だけど……
32デフォルトの名無しさん (ワッチョイ 9501-zSg9)
2021/07/17(土) 13:34:21.36ID:e6axNbpd0 ポインタの代わりに配列のインデックスを保持してるような感じなのかね?
リスト型構造体配列
リスト型構造体配列
33デフォルトの名無しさん (ワッチョイ c628-0cQV)
2021/07/17(土) 16:17:40.91ID:USprSk230 C99かそれ以降の標準的な環境において
(bool)someval
と
!!someval
って(例外なしに)全くおなじ効果を生むと思っていいですか。
前者はJISX3010の6.3.1.2などで「値が0になるなら0,それ以外なら1」と書かれている一方,
後者は(初学者なので経験がなく,正しい認識ではないかもしれませんが)慣用的な書き方なので
規格票にも書かれておらず,正確に同じ意味なのかどうかを確かめられませんでした。
(bool)someval
と
!!someval
って(例外なしに)全くおなじ効果を生むと思っていいですか。
前者はJISX3010の6.3.1.2などで「値が0になるなら0,それ以外なら1」と書かれている一方,
後者は(初学者なので経験がなく,正しい認識ではないかもしれませんが)慣用的な書き方なので
規格票にも書かれておらず,正確に同じ意味なのかどうかを確かめられませんでした。
34デフォルトの名無しさん (ワッチョイ 95da-cm0L)
2021/07/18(日) 00:36:46.74ID:vIcCvIPT0 >>33
「意味するところは全く違うが、結果だけ見れば全く同じ」です。
「意味するところは全く違うが、結果だけ見れば全く同じ」です。
35デフォルトの名無しさん (アウアウウー Sa39-rGUB)
2021/07/18(日) 01:19:32.77ID:euqgtMPHa bool型が導入されたことで得られるメリットはは何かあるでしょうか
またデメリットはあるでしょうか
またデメリットはあるでしょうか
36デフォルトの名無しさん (ラクッペペ MM0e-cm0L)
2021/07/18(日) 07:53:07.50ID:OEfNT0QGM メリットは、必ず真偽値になること
デメリットは、必ず真偽値になってしまうこと
例えばエラーコードのようにいい加減な経緯で拡張していくことはできない
デメリットは、必ず真偽値になってしまうこと
例えばエラーコードのようにいい加減な経緯で拡張していくことはできない
37ハノン ◆QZaw55cn4c (ワッチョイ aee9-6rOL)
2021/07/18(日) 09:54:45.66ID:9YAoR/6C0 >>35
ctypes.h の isalpha() とか islower() とかその他大勢は、偽のときは 0 を必ず返しますが、真のときは 1 とは限らない 0 でない別の数を返したりするんですよ
そういうのは紛らわしいので、そういう紛らわしさが減る bool の存在はありがたいですね
ctypes.h の isalpha() とか islower() とかその他大勢は、偽のときは 0 を必ず返しますが、真のときは 1 とは限らない 0 でない別の数を返したりするんですよ
そういうのは紛らわしいので、そういう紛らわしさが減る bool の存在はありがたいですね
38デフォルトの名無しさん (エムゾネ FFfa-E0YB)
2021/07/18(日) 16:58:13.77ID:jPlpwmsoF 関数の () は演算子
キャストの () は演算子
だそうですが
数学の数式で優先度上げるのに相当する () は演算子ですか?
キャストの () は演算子
だそうですが
数学の数式で優先度上げるのに相当する () は演算子ですか?
39デフォルトの名無しさん (ワッチョイ 5a7f-xL6t)
2021/07/18(日) 17:14:40.88ID:6AMrYKMS0 いいえ
40デフォルトの名無しさん (アウアウキー Sa4d-vUbb)
2021/07/18(日) 20:03:28.13ID:i83/r50ia >>34
ありがとうございます!
ありがとうございます!
42はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-xL6t)
2021/07/18(日) 21:49:36.58ID:+Ch+KzUq0 >>33
真偽値型にキャストした結果の型は _Bool で、 !! を通した型は int という違いはある。
https://wandbox.org/permlink/zlxhRTGr5Sj8IsiH
整数を扱う多くの場合では整数拡張が入ったりして違いが吸収
されてしまうからどちらでもいい場合がほとんどだと思うけど、
あらゆる状況で完全に同じとは言い切れない。
ちなみに C++ では整数に ! を適用した結果は bool なので、
もちろん !! の結果も bool になる。
真偽値型にキャストした結果の型は _Bool で、 !! を通した型は int という違いはある。
https://wandbox.org/permlink/zlxhRTGr5Sj8IsiH
整数を扱う多くの場合では整数拡張が入ったりして違いが吸収
されてしまうからどちらでもいい場合がほとんどだと思うけど、
あらゆる状況で完全に同じとは言い切れない。
ちなみに C++ では整数に ! を適用した結果は bool なので、
もちろん !! の結果も bool になる。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【苺ましまろ】立民衆院議員、人気漫画の水着少女画像を「醜悪」タイ人少女の性搾取事件と関連付け…党内で反発 [少考さん★]
- 「残業キャンセル界隈」若者が増加?「職務放棄」との批判も…“定時退社の権利”どこまで通用するか [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★5 [蚤の市★]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 【超速報】統一教会、陳謝 [519511584]
- 高市政権「かけてもつながらない。機能していない」防衛当局間のホットライン機能せず [834922174]
- 30過ぎた大人おじさんが大学生(昔)のままのファッションをする「おじさんキッズコーデ」、炎上して問題視される。 [153490809]
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑★2 [931948549]
