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/
前
http://echo.2ch.net/test/read.cgi/tech/1487757355/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 140 [無断転載禁止]©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 6f8c-8ulf)
2017/05/11(木) 22:20:03.99ID:cn414UR90828デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
2017/07/10(月) 11:38:17.15ID:JKtUlR/N0829デフォルトの名無しさん (ワッチョイ 9f6f-WUUN)
2017/07/10(月) 11:59:47.48ID:uinqb5xX0 底が見えてきたな
830デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
2017/07/10(月) 12:06:39.12ID:JKtUlR/N0 国会にもよく似たゴミが来てるぞ
http://snjpn.net/archives/24782
http://snjpn.net/archives/24782
831デフォルトの名無しさん (ワッチョイ 5711-rvkC)
2017/07/11(火) 18:55:41.44ID:dSS1j36W0 [][Tebla][]
}
000-"Yob*RtStrike"[%Kil\]MO,fla>%$9999VLTS
001-GYORLith"0\R"/"ESUBA"%$%
HADO-"EM","L","O","NU"###END
}
000-"Yob*RtStrike"[%Kil\]MO,fla>%$9999VLTS
001-GYORLith"0\R"/"ESUBA"%$%
HADO-"EM","L","O","NU"###END
832デフォルトの名無しさん (ワッチョイ 2a6c-S4qQ)
2017/07/13(木) 11:06:39.28ID:BCHZTwvD0 Makefileで、
.PHONY: doc
doc:
doxygen
みたいに毎回.PHONY書くのあほっぽいんだけど、1行にならん?
.PHONY: doc
doc:
doxygen
みたいに毎回.PHONY書くのあほっぽいんだけど、1行にならん?
833デフォルトの名無しさん (ワッチョイ 4a69-1jjp)
2017/07/13(木) 12:01:26.06ID:LenxTGcs0 C言語でインラインアセンブラが使える文法の違いってどこかに解説ありますか?
asm{}文の表記のしかたが違う
asm{}文の表記のしかたが違う
834デフォルトの名無しさん (スッップ Sd70-YkGU)
2017/07/13(木) 13:21:33.92ID:b1PvI/zld コンパイラの説明書!
835デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/13(木) 16:20:17.23ID:PWiSD9vP0 ISO/IEC9899:2011で、asmについて書かれているのは、全文中でたったのこれだけ
J. 5.10 The asm keyword
The asm keyword may be used to insert assembly language directly into the translator output (6.8). The most common implementation is via a statement of the form:
asm ( character-string-literal );
asmはたぶんコンパイル結果にアセンブラを生中出しするために使われる
たいていこうなっている
asm(文字列リテラル);
つまりこれ以上はGNUやM$に聞けってこと
https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
https://msdn.microsoft.com/ja-jp/library/4ks26t93.aspx
J. 5.10 The asm keyword
The asm keyword may be used to insert assembly language directly into the translator output (6.8). The most common implementation is via a statement of the form:
asm ( character-string-literal );
asmはたぶんコンパイル結果にアセンブラを生中出しするために使われる
たいていこうなっている
asm(文字列リテラル);
つまりこれ以上はGNUやM$に聞けってこと
https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
https://msdn.microsoft.com/ja-jp/library/4ks26t93.aspx
836デフォルトの名無しさん (ワッチョイ 5c7a-KmKO)
2017/07/13(木) 17:03:33.50ID:32wk5maY0 そもそもの仕様として、
構造体のメンバーの参照に '.' と '->' を
使い分ける必要性がわからないんだけど、なぜ?
間接参照だと意識しろっていう教育的な意味以外思い付かん
構造体のメンバーの参照に '.' と '->' を
使い分ける必要性がわからないんだけど、なぜ?
間接参照だと意識しろっていう教育的な意味以外思い付かん
837デフォルトの名無しさん (ワッチョイ 386f-/Dy+)
2017/07/13(木) 17:24:51.23ID:9amqftWh0 (*hoge).piyo
hoge->piyo
どっちでもいいけど後者の方が簡単というだけの話
hoge->piyo
どっちでもいいけど後者の方が簡単というだけの話
838デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/13(木) 18:47:04.29ID:PWiSD9vP0 そういうことじゃなく
Javaの参照ドットみたいなことに
なぜしなかったのか、だろ
ポインタを参照だと言い張るだけでいいのにと
Javaの参照ドットみたいなことに
なぜしなかったのか、だろ
ポインタを参照だと言い張るだけでいいのにと
839デフォルトの名無しさん (JP 0H99-QjT/)
2017/07/13(木) 20:54:14.63ID:VVeozCkKH 構造体は全部参照だということにしたいの?
それすると、宣言するときに領域確保して、
いらなくなったらガベコレするっていう機構を組み込んどく必要があって、
Cのシンプルさにまったく合わなくなる。
それすると、宣言するときに領域確保して、
いらなくなったらガベコレするっていう機構を組み込んどく必要があって、
Cのシンプルさにまったく合わなくなる。
840デフォルトの名無しさん (ワッチョイ 6e9a-YkGU)
2017/07/13(木) 20:55:07.17ID:lX8cJUTX0 違う意味だから違う記号
841デフォルトの名無しさん (ワッチョイ be02-7wp+)
2017/07/13(木) 21:00:00.33ID:5QMVP3z90 高橋麻奈も
おばさんになったな。
おばさんになったな。
842デフォルトの名無しさん (ワッチョイ 7e32-vfgv)
2017/07/13(木) 21:29:51.07ID:e9IZxggq0 >>832
毎回の意味がわからんな。
毎回の意味がわからんな。
843デフォルトの名無しさん (ワッチョイ f16a-KmKO)
2017/07/13(木) 22:00:17.18ID:EExJF9140844デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/13(木) 22:09:19.10ID:PWiSD9vP0845デフォルトの名無しさん (ワッチョイ f0b6-MRQN)
2017/07/13(木) 22:11:04.90ID:WI/JuPuE0 ポインタなら->の方が分かりやすいでしょ
もしかして矢印って分からない?
もしかして矢印って分からない?
846デフォルトの名無しさん (ワッチョイ 3f11-1CH6)
2017/07/13(木) 22:11:58.75ID:LTIPW4bg0 -> で書いているのを . でも許したとして、コンパイラに不都合が出てくるんだろうか?
((struct foo*)0)->member ⇒ ((struct foo*)0).member
キャストの後の括弧がなくても通すと リテラルと繋がるから面倒をおこしそうだけども
(struct foo*)0->member ⇒ (struct foo*)0.member
そういうわけでもなさそうだし
((struct foo*)0)->member ⇒ ((struct foo*)0).member
キャストの後の括弧がなくても通すと リテラルと繋がるから面倒をおこしそうだけども
(struct foo*)0->member ⇒ (struct foo*)0.member
そういうわけでもなさそうだし
847デフォルトの名無しさん (ワッチョイ 6e9a-YkGU)
2017/07/13(木) 22:13:53.71ID:lX8cJUTX0 グローバル変数から関数の引数にしたりするときに、置換が面倒だと思うことはある
C++だと山椒があるんでそういうことも少ない
C++だと山椒があるんでそういうことも少ない
848デフォルトの名無しさん (ワッチョイ be02-7wp+)
2017/07/13(木) 22:40:18.99ID:5QMVP3z90 参照はピリリと辛いのさ
849デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/13(木) 22:48:52.06ID:ZRvPs5t50 >>846
思想としてそこまで意識して書き、ソース上にもその痕跡を残せってことでしょ。
他言語で言うプロパティの良し悪しと同じ議論だよ。
好き嫌いはあれども、正しい or 間違いの結論はでない。
コンパイラはエラーを検出できてるんだから、
その場合は . を -> と読み替えろ、というルーチンを入れれば君が欲しいものは簡単に作れる。
でも誰も用意しなかった。それが事実だね。
思想としてそこまで意識して書き、ソース上にもその痕跡を残せってことでしょ。
他言語で言うプロパティの良し悪しと同じ議論だよ。
好き嫌いはあれども、正しい or 間違いの結論はでない。
コンパイラはエラーを検出できてるんだから、
その場合は . を -> と読み替えろ、というルーチンを入れれば君が欲しいものは簡単に作れる。
でも誰も用意しなかった。それが事実だね。
850デフォルトの名無しさん (ワッチョイ f16a-KmKO)
2017/07/13(木) 23:28:37.17ID:EExJF9140851デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/14(金) 00:02:31.73ID:jsZNOhnp0 >>850
> 「教育的な意味」だけのことでいいんだな
>>839に答えは既に書いてあるだろ。アホなのか?
具体的にはスタック上に構造体を取って高速化する手法が使えなくなるんだよ。
(大抵の他言語では記述方法自体が用意されていない。
VC++/CLIではvalue型が用意されていて効果があることになっている。
が、ろくな説明が見当たらないorz)
古いが以下。
http://www.eonet.ne.jp/~maeda/cpp/value.htm
MS公式は以下。全く説明する気が無いw
https://msdn.microsoft.com/ja-jp/library/ke3a209d.aspx
というか、そこらへんが面倒だというのならJavaやC#使えって話でしかなく、
今の時代にC使うのならそこまで含めてチューニングする気で書け、でしかない。
> 「教育的な意味」だけのことでいいんだな
>>839に答えは既に書いてあるだろ。アホなのか?
具体的にはスタック上に構造体を取って高速化する手法が使えなくなるんだよ。
(大抵の他言語では記述方法自体が用意されていない。
VC++/CLIではvalue型が用意されていて効果があることになっている。
が、ろくな説明が見当たらないorz)
古いが以下。
http://www.eonet.ne.jp/~maeda/cpp/value.htm
MS公式は以下。全く説明する気が無いw
https://msdn.microsoft.com/ja-jp/library/ke3a209d.aspx
というか、そこらへんが面倒だというのならJavaやC#使えって話でしかなく、
今の時代にC使うのならそこまで含めてチューニングする気で書け、でしかない。
852デフォルトの名無しさん (ブーイモ MMfd-QjT/)
2017/07/14(金) 00:16:04.99ID:1+0wIQjnM 839だけど >>851 は周回遅れ。
構造体へのポインタでも、構造体でも、. を使う文法にできるんじゃねっていう主張。
今のところ俺もそれへの具体的な反論を用意できていない。
「教育的」っていうのは違うと思うがな。
構造体へのポインタでも、構造体でも、. を使う文法にできるんじゃねっていう主張。
今のところ俺もそれへの具体的な反論を用意できていない。
「教育的」っていうのは違うと思うがな。
853デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/14(金) 00:35:26.21ID:jsZNOhnp0 >>852
いやみりゃ分かるが 851=849で、俺もそれは否定しない。
ただ、確かに851は間違いだったわ。
確保時の文法が異なっていて、それで十分だから、その後は区別する必要はないね。
見た目、直接か間接か分かるようにしろってことだろ。
いやみりゃ分かるが 851=849で、俺もそれは否定しない。
ただ、確かに851は間違いだったわ。
確保時の文法が異なっていて、それで十分だから、その後は区別する必要はないね。
見た目、直接か間接か分かるようにしろってことだろ。
854デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/14(金) 05:37:38.18ID:JCM3Qqhn0 ポインタなら(*foo).member と書くべきのところ->で書けるようにしたってことだけじゃないの?
糖衣構文的なオプションだろう
つうか、どちらもドット演算子に統一した場合、
ポインタなのにデリファレンスしないで値にアクセスできる仕様はCの文法としておかしくね?
糖衣構文的なオプションだろう
つうか、どちらもドット演算子に統一した場合、
ポインタなのにデリファレンスしないで値にアクセスできる仕様はCの文法としておかしくね?
855デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/14(金) 05:52:17.16ID:JCM3Qqhn0 逆にドット演算子の意味を考えてみると、これ変数からのオフセットだろ
856デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/14(金) 06:19:15.44ID:JCM3Qqhn0 デリファレンスしてもしなくても意味が同じという仕様にした場合、
構造体のポインタのポインタだともっとおかしなことになる
やっぱりダメなんだよw
構造体のポインタのポインタだともっとおかしなことになる
やっぱりダメなんだよw
857デフォルトの名無しさん (ブーイモ MMed-QjT/)
2017/07/14(金) 06:56:35.87ID:ES2lu6HJM その反論じゃダメージゼロだ
858デフォルトの名無しさん (ドコグロ MM46-OTuW)
2017/07/14(金) 07:00:49.03ID:8xomc53MM >>843
struct s { int *a; };
void f(struct s *sp){
int b = 1;
sp.a = &b; /* 今の文法なら sp->a = &b; */
x = sp.a;
って書かれたら x には b へのポインタが入るの?
それとも 1 が入るの?
まさか右辺の型に依存して変わるとか?
struct s { int *a; };
void f(struct s *sp){
int b = 1;
sp.a = &b; /* 今の文法なら sp->a = &b; */
x = sp.a;
って書かれたら x には b へのポインタが入るの?
それとも 1 が入るの?
まさか右辺の型に依存して変わるとか?
859デフォルトの名無しさん (ワッチョイ c3f4-1CH6)
2017/07/14(金) 07:45:04.78ID:OkthEzhE0 最初Cのソース見たとき -> って記述がなんのジョークかと思ったわ。
860デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/14(金) 07:47:03.66ID:JCM3Qqhn0861デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/14(金) 07:52:21.63ID:JCM3Qqhn0 いや問題はそこじゃないな
862デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/14(金) 08:05:49.17ID:ZvHE7cBu0863デフォルトの名無しさん (ワッチョイ 386f-/Dy+)
2017/07/14(金) 08:06:19.82ID:OlhrA2fz0 (*pa).m と a->m
(*pa+i) と a[i]
お好きな方をどうぞ
(*pa+i) と a[i]
お好きな方をどうぞ
864デフォルトの名無しさん (ワッチョイ df6f-qBah)
2017/07/14(金) 09:01:40.73ID:i0uGqEt60865デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/14(金) 10:09:02.17ID:ZvHE7cBu0866デフォルトの名無しさん (ワッチョイ ce88-JuPl)
2017/07/14(金) 10:36:06.28ID:7SJq6nEP0 字下げスタイルについて質問です
現在職業訓練校で習っているのですがそこの先生が
「プロはみんなこっち(K&R)だから。最近の教科書はこういうの(オールマン)増えてるけど、初心者向けの本書いてる人はそもそもプログラマじゃないから……」と。
自分がオールマン好きなのと、本を書いてくれる人たちをばかにするような言い方でちょっとむっとしたのですが、実際にK&Rばかりなんでしょうか
現在職業訓練校で習っているのですがそこの先生が
「プロはみんなこっち(K&R)だから。最近の教科書はこういうの(オールマン)増えてるけど、初心者向けの本書いてる人はそもそもプログラマじゃないから……」と。
自分がオールマン好きなのと、本を書いてくれる人たちをばかにするような言い方でちょっとむっとしたのですが、実際にK&Rばかりなんでしょうか
867デフォルトの名無しさん (JP 0H99-QjT/)
2017/07/14(金) 10:58:17.61ID:XOCK9tWfH868デフォルトの名無しさん (JP 0H99-QjT/)
2017/07/14(金) 11:03:48.20ID:XOCK9tWfH >>862
IQ180のお前さんならコード例一瞬で出せそうだからよろしく。
IQ180のお前さんならコード例一瞬で出せそうだからよろしく。
869デフォルトの名無しさん (ワッチョイ df6f-qBah)
2017/07/14(金) 12:28:17.80ID:i0uGqEt60 >>865
コンパイラが忖度してデリファレンスしてくれるって事じゃん
コンパイラが忖度してデリファレンスしてくれるって事じゃん
870デフォルトの名無しさん (ドコグロ MM36-Aifm)
2017/07/14(金) 13:06:11.17ID:XJoggiB0M >>866
今は他言語含めてK&Rが主流。昔の初心者本にオールマンスタイルで書かれてるのがあって
自分も最初は括弧の対応が分かりやすいからそれを使ってたけど
今は使わなくなった。括弧の対応なんて見れば分かるので重要じゃなくなる
今は他言語含めてK&Rが主流。昔の初心者本にオールマンスタイルで書かれてるのがあって
自分も最初は括弧の対応が分かりやすいからそれを使ってたけど
今は使わなくなった。括弧の対応なんて見れば分かるので重要じゃなくなる
871デフォルトの名無しさん (ワッチョイ d4db-B6bl)
2017/07/14(金) 13:16:54.77ID:q7yAZvho0 sizeof 関数 って何ぞ?
872デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/14(金) 14:28:28.54ID:ZvHE7cBu0873デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/14(金) 15:00:47.41ID:JCM3Qqhn0 >>864
C FAQ 4.12
http://www.kouno.jp/home/c_faq/c4.html#12
配列名と関数名が特殊なのは、ポインタに成り下がるからなんだそうだ
構造体はどうだろうか?
C FAQ 4.12
http://www.kouno.jp/home/c_faq/c4.html#12
配列名と関数名が特殊なのは、ポインタに成り下がるからなんだそうだ
構造体はどうだろうか?
874デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/14(金) 15:04:40.25ID:ZvHE7cBu0 >>866
その「先生」もプログラマじゃなさそうに聞こえる
どこのチームに入っても「こいつのクセうぜえ」と思われたらあかん
K&Rだのオールマンだのと言うが純粋なK&Rや純粋なオールマンはむしろ少数派で
たいていなにがしか方言があり、それを無視して原理主義に走ると
標準語を使っているはずの自分のほうが訛っていることにされてしまう
保護色ができないやつがプログラマの世間を知っているのか疑わしい
もしくは、元プログラマでも引退してからずいぶん長いとかな
プログラマ以外の世間でも「前の会社では」が口癖の新入りが干されるのと同じで
狭い世界の狭い正義にとらわれたスッパマンに居場所はない
その「先生」もプログラマじゃなさそうに聞こえる
どこのチームに入っても「こいつのクセうぜえ」と思われたらあかん
K&Rだのオールマンだのと言うが純粋なK&Rや純粋なオールマンはむしろ少数派で
たいていなにがしか方言があり、それを無視して原理主義に走ると
標準語を使っているはずの自分のほうが訛っていることにされてしまう
保護色ができないやつがプログラマの世間を知っているのか疑わしい
もしくは、元プログラマでも引退してからずいぶん長いとかな
プログラマ以外の世間でも「前の会社では」が口癖の新入りが干されるのと同じで
狭い世界の狭い正義にとらわれたスッパマンに居場所はない
875デフォルトの名無しさん (ワッチョイ b00d-1CH6)
2017/07/14(金) 15:11:15.53ID:UhIUjxkr0 そこのコーディング規約に従うまで
ただ、古典だけあってK&Rスタイルに近くなると話が早くなる
ただ、古典だけあってK&Rスタイルに近くなると話が早くなる
876デフォルトの名無しさん (ワッチョイ d091-z+eH)
2017/07/14(金) 15:54:44.39ID:TDDe5YT10 c#はオールマンだし、どっちでもいいな
877デフォルトの名無しさん (ワッチョイ 466d-RG79)
2017/07/14(金) 18:24:36.67ID:TDGI45F00 え?C#はオールマンなの?
878デフォルトの名無しさん (ワッチョイ c832-MRQN)
2017/07/14(金) 19:07:42.77ID:pMddghpW0 コーディングスタイルなんて、GNUスタイルとかいう汚物じゃなければ何でもいいわ
879デフォルトの名無しさん (ワッチョイ 466d-xCJC)
2017/07/14(金) 19:09:37.89ID:TDGI45F00 あなたの色に染まります!
880デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/14(金) 19:46:42.57ID:g8QLqbc9M >>877
そうらしい
C#
マイクロソフトはC# のコーディング規則を発表しており、これは、BSD/オールマンのスタイルに基づいている。
https://ja.m.wikipedia.org/wiki/%E5%AD%97%E4%B8%8B%E3%81%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB
そうらしい
C#
マイクロソフトはC# のコーディング規則を発表しており、これは、BSD/オールマンのスタイルに基づいている。
https://ja.m.wikipedia.org/wiki/%E5%AD%97%E4%B8%8B%E3%81%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB
881デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/14(金) 21:40:14.77ID:ZvHE7cBu0 汚物は消毒だ〜!!
882デフォルトの名無しさん (エーイモ SE9e-RQIi)
2017/07/15(土) 15:35:51.02ID:mwrVMnVyE clangにはソースコードを解析してコードを補完する機能がありますけど
gccにはこういう機能はないのでしょうか?
gccにはこういう機能はないのでしょうか?
883デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/15(土) 16:17:52.28ID:4RmHy8z30 >>858
> x には b へのポインタが入るの?
> それとも 1 が入るの?
その仕様にした場合は、 x の型によって決まる。
多分、結局のところは、float->doubleのような暗黙のキャスト、
structPtr* -> *structPtr を許すかどうかだろう。
許しても大した問題はないように思えるが。
ポインタを使える最近の言語はGoとRustか?
詳しい奴がいれば聞いてみればいいのではないかな。
C言語で問題だった点は当然改修されているだろうし。
> x には b へのポインタが入るの?
> それとも 1 が入るの?
その仕様にした場合は、 x の型によって決まる。
多分、結局のところは、float->doubleのような暗黙のキャスト、
structPtr* -> *structPtr を許すかどうかだろう。
許しても大した問題はないように思えるが。
ポインタを使える最近の言語はGoとRustか?
詳しい奴がいれば聞いてみればいいのではないかな。
C言語で問題だった点は当然改修されているだろうし。
884デフォルトの名無しさん (ドコグロ MM2e-OTuW)
2017/07/15(土) 16:57:34.95ID:hu77KrcYM >>883
> その仕様にした場合は、 x の型によって決まる
struct s { size_t *a; size_t *b; };
void f(struct s *sp){
size_t c[] = {1, 2};
sp.a = &c[0];
sp.b = &c[1];
x = sp.b - sp.a;
ってされたらどうするおつもり?
デリファレンスしてもしなくても結果は size_t だよ
> その仕様にした場合は、 x の型によって決まる
struct s { size_t *a; size_t *b; };
void f(struct s *sp){
size_t c[] = {1, 2};
sp.a = &c[0];
sp.b = &c[1];
x = sp.b - sp.a;
ってされたらどうするおつもり?
デリファレンスしてもしなくても結果は size_t だよ
885デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/15(土) 17:11:06.39ID:4RmHy8z30886デフォルトの名無しさん (ワッチョイ f146-I8+U)
2017/07/15(土) 17:16:20.81ID:pcaRmStc0887デフォルトの名無しさん (ワッチョイ f2ea-S4qQ)
2017/07/15(土) 17:16:23.73ID:G5lsIkPM0 これだからなスクリプタは
スクリプタがプログラマ気取るなよと
トホホ
スクリプタがプログラマ気取るなよと
トホホ
888デフォルトの名無しさん (ワッチョイ aa11-OTuW)
2017/07/15(土) 17:27:16.03ID:jhhap/jh0889デフォルトの名無しさん (ワッチョイ ce7f-z+eH)
2017/07/15(土) 17:42:18.56ID:jg2H7hGL0 大元の話で . 演算をポインタに対して適用したら ->とみなすという仕様なら矛盾はないと思うが、
>>843で「左辺が」とか書いたんで話がおかしくなっている気がする。
>>843で「左辺が」とか書いたんで話がおかしくなっている気がする。
890デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/15(土) 17:57:08.70ID:4RmHy8z30891デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/15(土) 18:03:19.98ID:Boc3n4O+0 ドットに統一した場合、コードレビューでNULLチェックを見逃す可能性がある
こっちの問題の方が大きいかもしれんな
こっちの問題の方が大きいかもしれんな
892デフォルトの名無しさん (ワッチョイ ce88-JuPl)
2017/07/15(土) 18:56:38.12ID:Ok1a2C+90 諸先輩方ご意見ありがとうございました
とりあえずその場所場所でのコーディングスタイルに合わせることが大事なのはわかりました
とりあえずその場所場所でのコーディングスタイルに合わせることが大事なのはわかりました
893デフォルトの名無しさん (ワッチョイ aa11-OTuW)
2017/07/15(土) 19:20:07.01ID:jhhap/jh0894デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/15(土) 20:28:46.13ID:4RmHy8z30 >>891
-> を廃止して . に統一するのならその手の型チェックは緩くなる。
これは結局のところ、他言語でもなされている議論と同じで、
「静的チェックのための記述をどこまで許容するか」でしかない。
俺はCなら厳しい方が似合っていると思うが。
それはさておき、具体的にそのケースならnull許容型、って奴だろう。
他言語でも死ぬほど議論されているからググれ。
-> を廃止して . に統一するのならその手の型チェックは緩くなる。
これは結局のところ、他言語でもなされている議論と同じで、
「静的チェックのための記述をどこまで許容するか」でしかない。
俺はCなら厳しい方が似合っていると思うが。
それはさておき、具体的にそのケースならnull許容型、って奴だろう。
他言語でも死ぬほど議論されているからググれ。
895デフォルトの名無しさん (ワッチョイ d4db-B6bl)
2017/07/15(土) 22:24:26.68ID:Z+b63Gri0 >>886
画像検索汁
画像検索汁
896デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/16(日) 00:35:41.14ID:JuGvxIE40897デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/16(日) 01:49:05.19ID:AkX0kyqa0 >>896
> NULL許容で書けたところで、実行時にはNULLチェックするわけだから
いや、そうじゃない。
というかそっちの議論も多いようだから、誤解するのも分かるんだが。
以下を読むのがいいだろう。
> null許容参照型
> http://www.buildinsider.net/column/iwanaga-nobuyuki/012
Cに対して導入するとしたら以下か。
1. 「null非許容のポインタ」を文法的に用意する。
2. 「null非許容のポインタ」にはNULLは代入できない。(SyntaxError)
3. 「null非許容のポインタ」に「従来のポインタ」の値を代入するには明示的なキャストが必要。
これでヌルポを静的に検出できるようになる。
「null非許容のポインタ」に関しては実行時のNULLチェックは必要ない。
問題は3で、C++ならdynamic_castのみとして例外を投げればいいのだが、
Cの場合これは無理なので、
・リンター等でキャスト直前にNULLチェックしているかを検出する
・明示的キャストをマクロ等でNULLチェックのインライン関数等に置き換える
等の対策が必要にはなるが、
それでもNULLに対してクリーン/ダーティな区画を文法的に分離できるようになるので、
今よりはだいぶマシにはなる。
とはいえこれはbetterCとしてC++を使うのなら現行のC++でも似たようなことは十分できる。
だからわざわざ新文法が必要か?というのと、他と同様に、
静的チェック「だけ」のための新文法を導入する価値があるのか?
という話にはなる。
そして . と -> の話に戻すなら、
「『null非許容型の』struct* から *structへの暗黙的キャストを認める」
という仕様なら、そちらの危惧している部分については回避できることになる。
> NULL許容で書けたところで、実行時にはNULLチェックするわけだから
いや、そうじゃない。
というかそっちの議論も多いようだから、誤解するのも分かるんだが。
以下を読むのがいいだろう。
> null許容参照型
> http://www.buildinsider.net/column/iwanaga-nobuyuki/012
Cに対して導入するとしたら以下か。
1. 「null非許容のポインタ」を文法的に用意する。
2. 「null非許容のポインタ」にはNULLは代入できない。(SyntaxError)
3. 「null非許容のポインタ」に「従来のポインタ」の値を代入するには明示的なキャストが必要。
これでヌルポを静的に検出できるようになる。
「null非許容のポインタ」に関しては実行時のNULLチェックは必要ない。
問題は3で、C++ならdynamic_castのみとして例外を投げればいいのだが、
Cの場合これは無理なので、
・リンター等でキャスト直前にNULLチェックしているかを検出する
・明示的キャストをマクロ等でNULLチェックのインライン関数等に置き換える
等の対策が必要にはなるが、
それでもNULLに対してクリーン/ダーティな区画を文法的に分離できるようになるので、
今よりはだいぶマシにはなる。
とはいえこれはbetterCとしてC++を使うのなら現行のC++でも似たようなことは十分できる。
だからわざわざ新文法が必要か?というのと、他と同様に、
静的チェック「だけ」のための新文法を導入する価値があるのか?
という話にはなる。
そして . と -> の話に戻すなら、
「『null非許容型の』struct* から *structへの暗黙的キャストを認める」
という仕様なら、そちらの危惧している部分については回避できることになる。
898デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/16(日) 07:21:30.62ID:xeCnao79M >>889
だから . 演算子を適用した結果がポインタならどうするんだ?
って指摘されてるだろ
ID:4RmHy8z30 はレスできなくなって
> エアプはマジで死ね。
とか恥ずかしい捨て台詞で逃げてるけど w
だから . 演算子を適用した結果がポインタならどうするんだ?
って指摘されてるだろ
ID:4RmHy8z30 はレスできなくなって
> エアプはマジで死ね。
とか恥ずかしい捨て台詞で逃げてるけど w
899デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/16(日) 07:28:16.81ID:xeCnao79M >>897
> 問題は3で、C++ならdynamic_castのみとして例外を投げればいいのだが、
> Cの場合これは無理なので、
> ・リンター等でキャスト直前にNULLチェックしているかを検出する
> ・明示的キャストをマクロ等でNULLチェックのインライン関数等に置き換える
> 等の対策が必要にはなるが、
そんなアホな対策は要らんわ
キャストまでしてNULL非許容の変数にNULL入れる奴はわかってやってるんだからそのまま入れてくれればいい
それに起因するエラーはプログラマの責任
C言語ってそう言う言語だろ
> 問題は3で、C++ならdynamic_castのみとして例外を投げればいいのだが、
> Cの場合これは無理なので、
> ・リンター等でキャスト直前にNULLチェックしているかを検出する
> ・明示的キャストをマクロ等でNULLチェックのインライン関数等に置き換える
> 等の対策が必要にはなるが、
そんなアホな対策は要らんわ
キャストまでしてNULL非許容の変数にNULL入れる奴はわかってやってるんだからそのまま入れてくれればいい
それに起因するエラーはプログラマの責任
C言語ってそう言う言語だろ
900デフォルトの名無しさん (ワッチョイ ce7f-z+eH)
2017/07/16(日) 07:41:24.58ID:H6W6/XNn0 >>898
>だから . 演算子を適用した結果がポインタならどうするんだ?
. 演算の対象がポインタかそうでないかで分かれるだけで、演算の結果は
それがポインタならポインタとして扱えばいいだけだろ。何か問題あるのか?
>だから . 演算子を適用した結果がポインタならどうするんだ?
. 演算の対象がポインタかそうでないかで分かれるだけで、演算の結果は
それがポインタならポインタとして扱えばいいだけだろ。何か問題あるのか?
901デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/16(日) 08:14:36.33ID:xeCnao79M902デフォルトの名無しさん (ワッチョイ c832-MRQN)
2017/07/16(日) 08:28:51.97ID:MBQ46mKu0 *sp.aで取れるじゃん
903デフォルトの名無しさん (ワッチョイ ce7f-z+eH)
2017/07/16(日) 08:32:10.19ID:H6W6/XNn0 >>858で x に入るのはbへのポインタとしか解釈しようがないと思うが、値とはどれのことを言っている?
bの値の1が欲しいなら普通に x = *sp.a; でいいだろ。
bの値の1が欲しいなら普通に x = *sp.a; でいいだろ。
904デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/16(日) 09:37:42.33ID:xeCnao79M905デフォルトの名無しさん (ワッチョイ ce7f-z+eH)
2017/07/16(日) 09:51:29.40ID:H6W6/XNn0906デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/16(日) 09:59:26.34ID:JuGvxIE40 要するに、(*p).m を p.m と書けるということ
つまりデリファレンスの階層を一個省略しようってことで、
格段便利ってわけでもないし、かえってややこしいかもなw
これ、ポインタが何段になっても p.m って書いて整合性取れるかい?
つまりデリファレンスの階層を一個省略しようってことで、
格段便利ってわけでもないし、かえってややこしいかもなw
これ、ポインタが何段になっても p.m って書いて整合性取れるかい?
907デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/16(日) 10:06:14.91ID:AkX0kyqa0 >>902-903
だからエアプなんだって。話の通じなさ具合がおかしいだろ。
>>899もそうだ。
> キャストまでしてNULL非許容の変数にNULL入れる奴はわかってやってるんだからそのまま入れてくれればいい
Cの場合はmallocの失敗がNULLになるんだから、これとかありえないだろ。
Cはnullありき、キャストありきで世界が構築されているから、
ヌルポ対策を静的にやりたいのならキャストも含めないと使い物にならない。
しかしエアプだからこれが分からない。マジでウザいから死ね。
> C言語ってそう言う言語だろ
これも違う。
C言語は静的な対策を拒否してない。動的な対策は全面拒否だが。
つっても通じないとは思うが。
>>904
> struct s sl;
> x = *sl.a;
エアプマジ死ねよ
というか、エアプがここに来る意味が俺には分からないのだが。
こいつらどの種のキチガイなの?
だからエアプなんだって。話の通じなさ具合がおかしいだろ。
>>899もそうだ。
> キャストまでしてNULL非許容の変数にNULL入れる奴はわかってやってるんだからそのまま入れてくれればいい
Cの場合はmallocの失敗がNULLになるんだから、これとかありえないだろ。
Cはnullありき、キャストありきで世界が構築されているから、
ヌルポ対策を静的にやりたいのならキャストも含めないと使い物にならない。
しかしエアプだからこれが分からない。マジでウザいから死ね。
> C言語ってそう言う言語だろ
これも違う。
C言語は静的な対策を拒否してない。動的な対策は全面拒否だが。
つっても通じないとは思うが。
>>904
> struct s sl;
> x = *sl.a;
エアプマジ死ねよ
というか、エアプがここに来る意味が俺には分からないのだが。
こいつらどの種のキチガイなの?
908デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/16(日) 10:11:57.19ID:xeCnao79M909デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/16(日) 10:12:48.56ID:xeCnao79M って書いてるそばから現れたわ w
910デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/16(日) 10:14:08.60ID:xeCnao79M911デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/16(日) 10:21:16.17ID:JuGvxIE40912デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/16(日) 10:33:31.23ID:AkX0kyqa0 >>906
> これ、ポインタが何段になっても p.m って書いて整合性取れるかい?
実体になるまでデリファレンスしろ、というだけだから、出来なくはないと思うが。
> 格段便利ってわけでもないし、かえってややこしいかもなw
まあCがほぼ完成しているからな。導入する価値があるか微妙というのは同意。
> Cが見事にこなしていることは、全く"出来るだけシンプルにせよ、
> しかし、それ以上シンプルにするな"をしていることだ。
> そして、そのことがCを素晴らしいものにしている。言語はパワフルでありながら、ほぼ最小である。
> by Linus Torvalds
> https://srad.jp/~taro-nishino/journal/509450/
俺が思うに、Cに必要なのは階層(≒関数内関数)だよ。一部拡張されているようではあるが。
最近別言語だがCスタイルの記述(グローバル+関数、非オブジェクト指向)を読んだことがあって、
22K行のコードだが初見で簡単に目的のコードを探し当てられて、軽く衝撃だった。
Cが読みにくいのは100-500行のファイルで細切れになっているからであって、
あれ、設計者が分かりやすい順にcatしてくれていれば衝撃的に読みやすいことに気づいた。
> これ、ポインタが何段になっても p.m って書いて整合性取れるかい?
実体になるまでデリファレンスしろ、というだけだから、出来なくはないと思うが。
> 格段便利ってわけでもないし、かえってややこしいかもなw
まあCがほぼ完成しているからな。導入する価値があるか微妙というのは同意。
> Cが見事にこなしていることは、全く"出来るだけシンプルにせよ、
> しかし、それ以上シンプルにするな"をしていることだ。
> そして、そのことがCを素晴らしいものにしている。言語はパワフルでありながら、ほぼ最小である。
> by Linus Torvalds
> https://srad.jp/~taro-nishino/journal/509450/
俺が思うに、Cに必要なのは階層(≒関数内関数)だよ。一部拡張されているようではあるが。
最近別言語だがCスタイルの記述(グローバル+関数、非オブジェクト指向)を読んだことがあって、
22K行のコードだが初見で簡単に目的のコードを探し当てられて、軽く衝撃だった。
Cが読みにくいのは100-500行のファイルで細切れになっているからであって、
あれ、設計者が分かりやすい順にcatしてくれていれば衝撃的に読みやすいことに気づいた。
913デフォルトの名無しさん (ワッチョイ 0123-z+eH)
2017/07/16(日) 10:47:18.34ID:AkX0kyqa0 あと、前方宣言必須というのも糞だ。
というか、今だにあれを放置している理由がよく分からない。
あれが無ければトップダウンで記述できるのでさらさら読める。
あれのおかげで下から構築しないといけないので、(include等つかって擬似的に回避できるが)
詳細まで確認する必要が無いときにも読まなくてもいい関数を読まされる事になる。
元々「世界の全てを把握して、絶対神として振舞え」という言語ではあるから、
「読みたくも無い関数を読まされたくねー」オブジェクト指向感性とは合わないが、
今更全てを把握できるほど世界は小さくないし、その必要が無いことも多い。
色々手抜きできる言語があることを知ってしまってからは、もっと手抜きさせてくれよーとは思う。
というか、今だにあれを放置している理由がよく分からない。
あれが無ければトップダウンで記述できるのでさらさら読める。
あれのおかげで下から構築しないといけないので、(include等つかって擬似的に回避できるが)
詳細まで確認する必要が無いときにも読まなくてもいい関数を読まされる事になる。
元々「世界の全てを把握して、絶対神として振舞え」という言語ではあるから、
「読みたくも無い関数を読まされたくねー」オブジェクト指向感性とは合わないが、
今更全てを把握できるほど世界は小さくないし、その必要が無いことも多い。
色々手抜きできる言語があることを知ってしまってからは、もっと手抜きさせてくれよーとは思う。
>>913
前方参照は確かにどうかと思うが、前方参照の制限が解消されたからといって読みやすさが改善するとは思えないね
現状でも底から読んでいけばいいだけなのではないか?
読みやすさは…識別子を日本語で書くのがよさそうだが
前方参照は確かにどうかと思うが、前方参照の制限が解消されたからといって読みやすさが改善するとは思えないね
現状でも底から読んでいけばいいだけなのではないか?
読みやすさは…識別子を日本語で書くのがよさそうだが
915デフォルトの名無しさん (ワッチョイ d4db-B6bl)
2017/07/16(日) 18:30:50.90ID:dVrh8pbL0 typedet struct
{
void ( *reset_func )( void );
unsigned long initial_stack;
void ( *divide_by_zero )( void );
・・・
} intvec_t;
#define INTVEC ( *( intvec_t* )0 )
{
void ( *reset_func )( void );
unsigned long initial_stack;
void ( *divide_by_zero )( void );
・・・
} intvec_t;
#define INTVEC ( *( intvec_t* )0 )
916デフォルトの名無しさん (ワッチョイ f146-I8+U)
2017/07/16(日) 21:14:38.36ID:TI5o59vg0 > 要するに、(*p).m を p.m と書けるということ
これ、できるできない以前に、初心者にきついな。
ルールを覚えるのは楽だけれど、例外事項が増えてくると、結局暗記になっちゃうからなあ。
これ、できるできない以前に、初心者にきついな。
ルールを覚えるのは楽だけれど、例外事項が増えてくると、結局暗記になっちゃうからなあ。
917デフォルトの名無しさん (ワッチョイ 7d33-RIgB)
2017/07/16(日) 21:46:19.69ID:aJG+vjk10 ts
918デフォルトの名無しさん (ワッチョイ f2ea-S4qQ)
2017/07/16(日) 23:15:41.79ID:kT8dsikx0 >>913
プロトタイプ宣言というのがあってだね、それを宣言すればトップダウンで書ける。
プロトタイプ宣言というのがあってだね、それを宣言すればトップダウンで書ける。
919デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/17(月) 03:39:18.28ID:woO8V6Ze0920デフォルトの名無しさん (ワッチョイ df23-S4qQ)
2017/07/17(月) 05:22:39.76ID:6JtF0HSC0921デフォルトの名無しさん (ワッチョイ df23-S4qQ)
2017/07/17(月) 05:32:30.17ID:6JtF0HSC0 まあしかし俺は同じファイル内にあるにも関わらずプロトタイプ宣言入れないと
わかってくれないのが嫌で使われる個所よりも上に書いちゃうけどな。
同じファイル内なんだからわかって欲しいものではある。
そういや PASCAL なんかも前方参照しかなかったような気がするな。
あの当時の言語はこういうの当たり前だったのかな。
PASCALなんかだとわざわざそういう思想で作られたって感じもするが。
Cだと手抜いただけのように見える。w
わかってくれないのが嫌で使われる個所よりも上に書いちゃうけどな。
同じファイル内なんだからわかって欲しいものではある。
そういや PASCAL なんかも前方参照しかなかったような気がするな。
あの当時の言語はこういうの当たり前だったのかな。
PASCALなんかだとわざわざそういう思想で作られたって感じもするが。
Cだと手抜いただけのように見える。w
922デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
2017/07/17(月) 06:51:56.93ID:woO8V6Ze0 うん、Cのバヤイは確信的な手抜きだな
923デフォルトの名無しさん (ワッチョイ 706f-qBah)
2017/07/17(月) 07:49:13.30ID:Dn7+fEGp0 ほー PASCALが前方参照しかないとか初めて聞いたわ
ID:kT8dsikx0とID:6JtF0HSC0の次の活躍に期待だな
ID:kT8dsikx0とID:6JtF0HSC0の次の活躍に期待だな
924デフォルトの名無しさん (ワッチョイ a76f-xIn+)
2017/07/17(月) 07:57:41.59ID:HedtDN7o0 何時、前後を覚えるのかな?
925デフォルトの名無しさん (ワッチョイ 466d-N1Eg)
2017/07/17(月) 08:01:01.05ID:n9t4u9yj0 >>921
Pascal は LL(1)言語としてつくってあり、ワンパスでパースできる、その意地があるんだね
Pascal は LL(1)言語としてつくってあり、ワンパスでパースできる、その意地があるんだね
926デフォルトの名無しさん (ワッチョイ 4ed7-H2gN)
2017/07/17(月) 08:11:52.63ID:PKmAGp8M0 Cもワンパスのため前方宣言必須ということのようだが、
一回舐めて拾うだけでいいんだし、今時こだわる必要も無いだろう
ヘッダに出した公開インターフェースは先、モジュール内プライベートはその下がわかりやすいよな
一回舐めて拾うだけでいいんだし、今時こだわる必要も無いだろう
ヘッダに出した公開インターフェースは先、モジュール内プライベートはその下がわかりやすいよな
927デフォルトの名無しさん (ワッチョイ 466d-N1Eg)
2017/07/17(月) 08:13:23.74ID:n9t4u9yj0 >>926
C はプリプロを除いてもワンパスにはならないと思う
C はプリプロを除いてもワンパスにはならないと思う
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- 【カブス】今永昇太 1年約34億円で残留へ QO受諾 米メディア報じる [鉄チーズ烏★]
- 【悲報】おこめ券、9.5億円配布分のうち2.4億が経費、うちJAが1億円中抜き🤗高市ありがとう [359965264]
- 【悲報】高市有事で日本に同調する国、1つも現れないwwwwwwwwwwwwwww [603416639]
- 【雑談】暇人集会所part19
- 不知火フレア、尾丸ポルカ、星街すいせい、さくらみこ、白銀ノエル「「「「「お前くんっ!結婚して!」」」」」←誰を選ぶ?
- 自閉症が「んなっしょい」と連呼するお🏡
- ブラックフライデーでダークソウル買って初プレイしてみようかなと思うけどどうかな
