!extend:checked:vvvvv:1000:512
↑
次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。
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言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
C言語なら俺に聞け 149
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ af9f-7TBo)
2018/10/28(日) 22:01:44.38ID:D9Gt7gmT013デフォルトの名無しさん (ドコグロ MM92-Ax9l)
2018/11/07(水) 19:11:16.88ID:d49i6th8M それ16bitの結果得るのが面倒なだけだろ
もう少し面白い回答頼むわ
もう少し面白い回答頼むわ
14デフォルトの名無しさん (バッミングク MM86-0Z6C)
2018/11/07(水) 19:12:35.33ID:xr+D7aWAM 皆様回答ありがとうございます。
今回はビットシフト方式で行こうと思います。
>>12
使ってるCPUとコンパイラがマイナーな、ある意味純粋な16ビット環境で、sizeof(char)もsizeof(short)も1を返し、sizeof(long)は2を返すような特殊な環境なので7ビットマイコンではありません。
今回はビットシフト方式で行こうと思います。
>>12
使ってるCPUとコンパイラがマイナーな、ある意味純粋な16ビット環境で、sizeof(char)もsizeof(short)も1を返し、sizeof(long)は2を返すような特殊な環境なので7ビットマイコンではありません。
15デフォルトの名無しさん (ワッチョイ 8bb3-MyS3)
2018/11/07(水) 19:46:07.55ID:SCUqGzCI0 intが14ビット
そんな処理系あるの?
そんな処理系あるの?
16デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 20:47:19.69ID:bimd4khFa17デフォルトの名無しさん (ワッチョイ 1a12-Q1ft)
2018/11/07(水) 20:49:47.59ID:YuYLxFMn0 60〜70年代メインフレームは百花繚乱だったなぁ
ttps://en.wikipedia.org/wiki/Word_(computer_architecture)
27bitマシンとかどーすんだよ
ttps://en.wikipedia.org/wiki/Word_(computer_architecture)
27bitマシンとかどーすんだよ
18デフォルトの名無しさん (アメ MM7f-Ul28)
2018/11/07(水) 20:55:36.02ID:Lazgvcn1M このように1バイトが何ビットかはアーキテクチャ依存のため、EUではハードディスクなどのパッケージにはGB単独表記は認められず、Go(ギガオクテット)を併記または単独で表記しなければならない。
1オクテットは必ず8バイト。
1オクテットは必ず8バイト。
19デフォルトの名無しさん (ブーイモ MMba-rFq1)
2018/11/07(水) 21:07:14.78ID:fEoWtkRgM つまりEUでもHDDの容量はわからないってことか
20デフォルトの名無しさん (ワッチョイ 8bb3-0Z6C)
2018/11/07(水) 21:09:34.64ID:u7stYdWj0 >>18
いや、Octetは8ビットでは?
いや、Octetは8ビットでは?
21デフォルトの名無しさん (アメ MM7f-Ul28)
2018/11/07(水) 21:12:33.55ID:Lazgvcn1M そうでしたwwwww
22デフォルトの名無しさん (アウアウカー Sac3-U2lQ)
2018/11/07(水) 21:19:59.22ID:h4FWJh3Ka 大丈夫。
文脈から理解はしてる。
上げ足取りなだけだ。
文脈から理解はしてる。
上げ足取りなだけだ。
23デフォルトの名無しさん (ワッチョイ 7f76-MyS3)
2018/11/07(水) 21:47:40.71ID:lW24kLVO0 バグってそういうもんだろ
笑ってられる神経が異常だ
笑ってられる神経が異常だ
24デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
2018/11/07(水) 23:27:18.47ID:fWOqg0Pc0 バカってそういうもんだろ
25デフォルトの名無しさん (ワッチョイ 9333-YP9l)
2018/11/08(木) 00:45:35.31ID:LWRNNBjj0 >>12
CHAR_BIT は 8 以上、 INT_MAX は 32767 以上って規定があるから、規格非準拠になっちゃう。
CHAR_BIT は 8 以上、 INT_MAX は 32767 以上って規定があるから、規格非準拠になっちゃう。
26デフォルトの名無しさん (ワッチョイ ab15-ki2E)
2018/11/08(木) 22:02:06.26ID:WtJgli4G0 だから何? 違ったら笑うしかできない無能か
27デフォルトの名無しさん (アークセー Sxcd-8u3a)
2018/11/08(木) 22:55:19.89ID:nQ7J47/rx C89止まりのものです
私のような者が C11などの新しい規格を学ぶのによい書籍はありますか?
私のような者が C11などの新しい規格を学ぶのによい書籍はありますか?
28デフォルトの名無しさん (ワッチョイ 2b81-ki2E)
2018/11/08(木) 23:16:18.68ID:x4oYjs6S0 このスレは最近独り言が増えたのか?
オレもそうだがな
オレもそうだがな
30デフォルトの名無しさん (ワッチョイ 415e-p2zE)
2018/11/08(木) 23:28:43.81ID:6k9Hci0C0 >>29
私はC99で止まっていますが、最近はもっぱらPythonを使っているので困りません
私はC99で止まっていますが、最近はもっぱらPythonを使っているので困りません
31デフォルトの名無しさん (ワッチョイ 4be3-peA3)
2018/11/09(金) 05:43:42.12ID:1ixP0EQ90 pythonいいよな
yieldとかC標準にもほしい
yieldとかC標準にもほしい
32デフォルトの名無しさん (ワッチョイ 9312-L4Ec)
2018/11/09(金) 10:07:36.38ID:6cegpcYL0 cpythonのyield実装を見ればC言語に移植できるんじゃねえの
33デフォルトの名無しさん (アウアウエー Sa23-2eEn)
2018/11/09(金) 11:42:49.67ID:Sh6b3ug/a yieldって何につかうの?
34デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/09(金) 12:33:54.85ID:DHGOZxvaa 動き的にgets的な動きする。
表示したら即メモリ解放的な。
表示したら即メモリ解放的な。
35デフォルトの名無しさん (ドコグロ MMe5-Mdza)
2018/11/09(金) 12:41:29.53ID:GUqFOdkWM36デフォルトの名無しさん (ワッチョイ 31b3-ApEQ)
2018/11/09(金) 12:52:21.62ID:1VeVq06f0 yieldはいわばスタック情報の保存だから、setjmp、longjmpで出来そうな出来なさそうな?
37デフォルトの名無しさん (アウアウウー Sa05-ahuQ)
2018/11/09(金) 13:11:31.21ID:JsSTi+Gxa ん?thread?
38デフォルトの名無しさん (アウアウエー Sa23-2eEn)
2018/11/09(金) 13:52:10.49ID:Sh6b3ug/a 単にコンテキスト保存するだけだからまあ再現はできるよ
書き方としてイテレータとか欲しいのはわかるけど実現方法はどうでもいいわけじゃん
書き方としてイテレータとか欲しいのはわかるけど実現方法はどうでもいいわけじゃん
39デフォルトの名無しさん (ワッチョイ 4b23-ki2E)
2018/11/09(金) 14:11:15.88ID:lOb1tGzl0 yieldは便利で使い勝手がいーるど
40デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/09(金) 20:13:38.25ID:3ZHBVzZ50 POSIXの<errno.h>にある番号とBSDの<sysexits.h>で全然番号が違うのは理由があるのかな。
いままで<sysexits.h>に従って「許可がない」動作は77を返すものだと思ってたら
Linuxでは1を返すのでなぜだと思って調べたら<errno.h>では権限エラーは1。
嫌だなぁ。
いままで<sysexits.h>に従って「許可がない」動作は77を返すものだと思ってたら
Linuxでは1を返すのでなぜだと思って調べたら<errno.h>では権限エラーは1。
嫌だなぁ。
41デフォルトの名無しさん (ドコグロ MMe5-Mdza)
2018/11/09(金) 20:53:23.68ID:GUqFOdkWM 77とか1とかのリテラルで書くバカって今でもいるんだ…
42デフォルトの名無しさん (アウアウエー Sa23-2eEn)
2018/11/09(金) 23:18:17.74ID:Sh6b3ug/a POSIXで具体的な数値決めてたっけ?
43デフォルトの名無しさん (ワッチョイ db9f-ki2E)
2018/11/10(土) 05:46:23.69ID:PYYpj2JU0 >>40
<errno.h> の方はC言語でシステムコールしてエラーになった時の errno 変数の値で、
<sysexits.h> はプログラムが exit() 等で終わる時に使う値なので全く用途が違う。
<errno.h> の方はC言語でシステムコールしてエラーになった時の errno 変数の値で、
<sysexits.h> はプログラムが exit() 等で終わる時に使う値なので全く用途が違う。
44デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/10(土) 06:30:10.24ID:lBOHSSIo0 >>43
つまり<errno.h>で定義された値はユーザーからは見えないんだね。
つまり<errno.h>で定義された値はユーザーからは見えないんだね。
45デフォルトの名無しさん (ワッチョイ db9f-9t8X)
2018/11/10(土) 06:43:06.70ID:PYYpj2JU0 >>44
見えないというか、ただの数値なのでどこにでも使えないわけではないが、errnoの値をexit()で返す事は想定して作られていない。
見えないというか、ただの数値なのでどこにでも使えないわけではないが、errnoの値をexit()で返す事は想定して作られていない。
46デフォルトの名無しさん (ワッチョイ 4b23-ki2E)
2018/11/10(土) 11:37:20.64ID:lMF42kZL0 >>45
わりとerrnoを返してくる人多いけどね
わりとerrnoを返してくる人多いけどね
47デフォルトの名無しさん (ワッチョイ 2b81-ki2E)
2018/11/10(土) 11:58:28.71ID:4Oh2WWEl0 errno返してもらっても困る
48デフォルトの名無しさん (ワッチョイ f380-/quP)
2018/11/10(土) 17:42:25.30ID:16GnFLu/0 #defineマクロ定数はプリプロセッサで単純置換されるだけだからな
49デフォルトの名無しさん (アウアウウー Sa05-ahuQ)
2018/11/10(土) 18:12:43.61ID:JVjCprWqa50デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/10(土) 18:13:54.94ID:lBOHSSIo051デフォルトの名無しさん (アウアウウー Sa05-ahuQ)
2018/11/10(土) 18:26:46.25ID:JVjCprWqa そう。
52デフォルトの名無しさん (ワッチョイ 937f-nWRh)
2018/11/11(日) 12:27:27.91ID:2PA7tL2j0 struct S {
size_t len;
type-X buf[0];
};
という状況下で、
size_t const len = 500;
struct S* const p = (struct S*)malloc(sizeof(struct S) + sizeof(type-X)*len);
p->len = len;
p->buf = (type-X*)((size_t)p + sizeof(struct S));
という処理を偶に見かけますが、これだと末尾パディングの影響でbuf[1]のアドレスがtype-Xのアライメントに沿っていない可能性があるので、不正な気がします
具体的には
struct S {
size_t len;
type-X* buf;
};
として、
size_t const len = 500;
size_t const padding_for_align_x = alignof(type-X)*(sizeof(struct S)%alignof(type-X) == 0 ? 0 : 1);
struct S* const p = (struct S*)malloc(sizeof(struct S) + padding_for_align_x + sizeof(type-X)*len);
p->len = len;
p->buf = (type-X*)((size_t)p + sizeof(struct S) + padding_for_align_x);
...などとしないとアライメント違反になりそうな気がするのですが、この認識は正しいでしょうか
size_t len;
type-X buf[0];
};
という状況下で、
size_t const len = 500;
struct S* const p = (struct S*)malloc(sizeof(struct S) + sizeof(type-X)*len);
p->len = len;
p->buf = (type-X*)((size_t)p + sizeof(struct S));
という処理を偶に見かけますが、これだと末尾パディングの影響でbuf[1]のアドレスがtype-Xのアライメントに沿っていない可能性があるので、不正な気がします
具体的には
struct S {
size_t len;
type-X* buf;
};
として、
size_t const len = 500;
size_t const padding_for_align_x = alignof(type-X)*(sizeof(struct S)%alignof(type-X) == 0 ? 0 : 1);
struct S* const p = (struct S*)malloc(sizeof(struct S) + padding_for_align_x + sizeof(type-X)*len);
p->len = len;
p->buf = (type-X*)((size_t)p + sizeof(struct S) + padding_for_align_x);
...などとしないとアライメント違反になりそうな気がするのですが、この認識は正しいでしょうか
53デフォルトの名無しさん (ワッチョイ 937f-nWRh)
2018/11/11(日) 12:57:16.34ID:2PA7tL2j054デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/11(日) 14:07:31.98ID:PRctJ18Z055デフォルトの名無しさん (ワッチョイ 4b23-ki2E)
2018/11/11(日) 15:17:31.04ID:0RasjQan056デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/11(日) 16:17:47.42ID:PRctJ18Z0 >>55
まあBSDでプログラミングしたことないと あんまり知りえないと思うわ。
だいたいPOSIXで定められてる訳じゃないから 知っておくべきなのはBSDプログラマくらい。
ただLinuxプログラムのエラーコード周りはなぜか非統一的なんだよね。
GNUコーディング規約で事細かに決められてそうなものだけどねw
apt(1)なんて権限エラーに100返すんだぜ?
まあBSDでプログラミングしたことないと あんまり知りえないと思うわ。
だいたいPOSIXで定められてる訳じゃないから 知っておくべきなのはBSDプログラマくらい。
ただLinuxプログラムのエラーコード周りはなぜか非統一的なんだよね。
GNUコーディング規約で事細かに決められてそうなものだけどねw
apt(1)なんて権限エラーに100返すんだぜ?
57デフォルトの名無しさん (ワッチョイ 9312-L4Ec)
2018/11/11(日) 16:41:45.09ID:PCIE9alw0 >>52
『MSDNこそC++である』という格言があるように、構造体の末尾の配列は不定長に出来ます
構造体内の可変長配列
ttps://msdn.microsoft.com/ja-jp/library/b6fae073(v=vs.120).aspx
『MSDNこそC++である』という格言があるように、構造体の末尾の配列は不定長に出来ます
構造体内の可変長配列
ttps://msdn.microsoft.com/ja-jp/library/b6fae073(v=vs.120).aspx
58デフォルトの名無しさん (ワッチョイ 497d-ki2E)
2018/11/11(日) 18:01:07.65ID:EYHizhRi0 VLAとは違うんだよな
そのページのサンプルに限っては不完全型配列の直前にサイズ情報があって確かに可変長だが
配列そのものがサイズ情報を含むのではないので、不定長とでもいうべきものだ
そのページのサンプルに限っては不完全型配列の直前にサイズ情報があって確かに可変長だが
配列そのものがサイズ情報を含むのではないので、不定長とでもいうべきものだ
59デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/11(日) 18:07:53.58ID:PRctJ18Z0 どうでもいいけど そのURLの書式はなんだ?
URLパラメータってそんな位置に置けたっけ。
URLパラメータってそんな位置に置けたっけ。
60デフォルトの名無しさん (ワッチョイ f380-/quP)
2018/11/11(日) 18:21:19.83ID:1ROtIrLE0 先頭さえ確定できれば後ろなんてどうでも良い
さすがのC言語さん
さすがのC言語さん
61デフォルトの名無しさん (ワッチョイ 9321-A2K7)
2018/11/11(日) 21:36:09.88ID:1MIvJQ9R0 >>57
その格言は初めて聞きましたw
その方法だとアライメント違反になるかならないかが気になっていたのですが、
* 末尾のbuffer[0]でその型のアライメント以上のアライメントを構造体に強いることができる(拡張)
* 末尾のbuffer[1]の場合は当然構造体にそのアライメント以上のアライメントを強いることができる(c89)
* 末尾のbuffer[]でも同様(c99での仕様)
となり、全パターンでbuffer[i]へのアクセス時にアライメント違反にならないので、
ポインタメンバにしてアライメント気にしてmallocする必要ないのかー、これでいいのかーと解決した次第です
>>58
英語だとflexible arrayでした
その格言は初めて聞きましたw
その方法だとアライメント違反になるかならないかが気になっていたのですが、
* 末尾のbuffer[0]でその型のアライメント以上のアライメントを構造体に強いることができる(拡張)
* 末尾のbuffer[1]の場合は当然構造体にそのアライメント以上のアライメントを強いることができる(c89)
* 末尾のbuffer[]でも同様(c99での仕様)
となり、全パターンでbuffer[i]へのアクセス時にアライメント違反にならないので、
ポインタメンバにしてアライメント気にしてmallocする必要ないのかー、これでいいのかーと解決した次第です
>>58
英語だとflexible arrayでした
62デフォルトの名無しさん (アウアウウー Sa05-Vzv6)
2018/11/11(日) 22:09:10.99ID:3Du2sMqla63デフォルトの名無しさん (ワッチョイ db9f-ki2E)
2018/11/11(日) 22:26:25.11ID:0F8Q4Ddx064デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/12(月) 13:20:45.59ID:JkRQG90v0 もうちょっと皆がリターンコードについて考えてくれたらいいね。
65デフォルトの名無しさん (ワッチョイ 2b81-ki2E)
2018/11/12(月) 13:26:58.93ID:yW6s8Lj00 コマンドの戻り値って、皆さんどの様に活用されてますか?
成功か失敗か、それが分かれば十分な気はしますけど
成功か失敗か、それが分かれば十分な気はしますけど
66デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/12(月) 13:50:25.07ID:JkRQG90v0 >>65
例えば同じ「失敗」でも何が原因なのか分かったほうが問題に対処しやすくない?
ファイルが存在しないのか はたまたファイルが現状の権限では読みとれないのか。
もちろんエラーメッセージを見てもいいけど。
あと,終了ステータスを見ないと成功失敗が分からない場合がある。
例えばdiff(1)ユーティリティーなんかは「1」という(一見失敗してるような)終了ステータスに
「(コマンド自体は成功してるが)不一致が発見された」という意味を割り当ててる。
fsck(1)ユーティリティーはもっと複雑。
まあ知ってるに越したことはないし<sysexit.h>はPOSIX標準ではないにせよ,
Unixプログラミングをする場合は積極的に利用してもいいかも。
例えば同じ「失敗」でも何が原因なのか分かったほうが問題に対処しやすくない?
ファイルが存在しないのか はたまたファイルが現状の権限では読みとれないのか。
もちろんエラーメッセージを見てもいいけど。
あと,終了ステータスを見ないと成功失敗が分からない場合がある。
例えばdiff(1)ユーティリティーなんかは「1」という(一見失敗してるような)終了ステータスに
「(コマンド自体は成功してるが)不一致が発見された」という意味を割り当ててる。
fsck(1)ユーティリティーはもっと複雑。
まあ知ってるに越したことはないし<sysexit.h>はPOSIX標準ではないにせよ,
Unixプログラミングをする場合は積極的に利用してもいいかも。
67デフォルトの名無しさん (ワッチョイ 2b81-ki2E)
2018/11/12(月) 14:11:20.80ID:yW6s8Lj00 イヤ、使い方の可能性としてそう言うものがあるくらいは知っている
実際に使っている人がいたら、どういう使い方をしているかを聞きたいんだ
実際に使っている人がいたら、どういう使い方をしているかを聞きたいんだ
68デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/12(月) 16:42:56.85ID:JkRQG90v0 勘違いしてましたわ
俺の知ってる限りじゃシェルスクリプトでは多用されてるがCではどうだろうね。あまり見掛けない。
俺の知ってる限りじゃシェルスクリプトでは多用されてるがCではどうだろうね。あまり見掛けない。
69デフォルトの名無しさん (アウアウウー Sa05-2eEn)
2018/11/12(月) 17:16:29.53ID:7RdsKszja diffでちょっと迷うくらいだよな。
70デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/18(日) 22:01:33.04ID:Fz4U8sel0 #define elif(e) else if (e)
みたいにして
if (...) {
...
} elif (...) {
...
} else {
...
}
↑こういう感じにするのってやっちゃマズいのかな。
個人的にelifキーワードがある言語に慣れてるんでこうやってて
現状特にエラーに遭遇したことはないんだけど
OSSのソースコードとか個人が公開してるソースコード見ても
こういうことやってないんだよね。
みたいにして
if (...) {
...
} elif (...) {
...
} else {
...
}
↑こういう感じにするのってやっちゃマズいのかな。
個人的にelifキーワードがある言語に慣れてるんでこうやってて
現状特にエラーに遭遇したことはないんだけど
OSSのソースコードとか個人が公開してるソースコード見ても
こういうことやってないんだよね。
71デフォルトの名無しさん (ワッチョイ 054f-CYUw)
2018/11/18(日) 22:14:05.51ID:Eond7dK60 >>70
やめとけ
メリットが1ミリもないから誰もやらない。
善し悪しはさておき、C言語での判断基準はほぼ「実行性能」であって、
else if と書けばいいだけの所をいちいちマクロにする馬鹿なんて世界中に誰もいないだけ。
というか、そのレベルで慣れられないのなら、elif言語だけ使っておけ。
やめとけ
メリットが1ミリもないから誰もやらない。
善し悪しはさておき、C言語での判断基準はほぼ「実行性能」であって、
else if と書けばいいだけの所をいちいちマクロにする馬鹿なんて世界中に誰もいないだけ。
というか、そのレベルで慣れられないのなら、elif言語だけ使っておけ。
72デフォルトの名無しさん (ワッチョイ ba80-N102)
2018/11/18(日) 22:24:21.65ID:KTJRdzRs0 #define { begin
みたいなことを本気でやる奴がいたとはw
みたいなことを本気でやる奴がいたとはw
73デフォルトの名無しさん (ワッチョイ ba80-N102)
2018/11/18(日) 22:26:08.72ID:KTJRdzRs0 #define begin {
逆だったわw
逆だったわw
74さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdea-/fpg)
2018/11/18(日) 22:35:31.43ID:ZI/kDlHTd ソースコードを静的解析する関係で、文法を強引に変えるような変態な前処理は良くないらしい。
75デフォルトの名無しさん (ワッチョイ edf2-maOp)
2018/11/18(日) 22:39:49.79ID:HA6us6PZ0 世の中の静的解析ツールは当然プリプロセッサ適用後の状態で解析するわけで
76デフォルトの名無しさん (アウアウウー Sa91-ZAHG)
2018/11/18(日) 22:42:50.43ID:gSv28L1Ba typedefも避けるという流儀はあるからね
まあ気持ちはわかる
むしろGNU拡張のtypeofはアリ
まあ気持ちはわかる
むしろGNU拡張のtypeofはアリ
77デフォルトの名無しさん (ワッチョイ 054f-CYUw)
2018/11/18(日) 22:45:11.55ID:Eond7dK6078デフォルトの名無しさん (ワッチョイ 054f-CYUw)
2018/11/18(日) 22:47:48.36ID:Eond7dK6079さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdea-/fpg)
2018/11/18(日) 23:14:59.59ID:ZI/kDlHTd 国際会議で誰も知らない方言を話して良い訳ない。オープンなソースコードは世界中の人が見るんだから。
80デフォルトの名無しさん (ワッチョイ 4a21-JwVn)
2018/11/18(日) 23:19:46.27ID:we8vMVw10 >>78
多分linuxカーネルの流儀じゃないかな
struct/enum/unionとかの省略を目的としたtypedefは行わない
opaque-type/関数ポインタとかの必然性が無い限り対象は明示するっていう戦略
多分linuxカーネルの流儀じゃないかな
struct/enum/unionとかの省略を目的としたtypedefは行わない
opaque-type/関数ポインタとかの必然性が無い限り対象は明示するっていう戦略
81デフォルトの名無しさん (ワッチョイ 054f-CYUw)
2018/11/18(日) 23:37:43.07ID:Eond7dK60 >>80
> struct/enum/unionとかの省略を目的としたtypedefは行わない
こんなのは当たり前だ。(linuxカーネルに限らず)
そもそも「タイプ数をケチるだけの為に何かする」という文化は最近のWeb系馬鹿言語だけであって、Cにはない。
当然、else if を elif にしたがる奴もいない。
「腕のいい奴のコードは短い」を勘違いしてる馬鹿共がやたら「タイプ数」にこだわってるだけだ。
だいたい、structをタイプしたくなければC++コンパイラ使えば済むし。
> struct/enum/unionとかの省略を目的としたtypedefは行わない
こんなのは当たり前だ。(linuxカーネルに限らず)
そもそも「タイプ数をケチるだけの為に何かする」という文化は最近のWeb系馬鹿言語だけであって、Cにはない。
当然、else if を elif にしたがる奴もいない。
「腕のいい奴のコードは短い」を勘違いしてる馬鹿共がやたら「タイプ数」にこだわってるだけだ。
だいたい、structをタイプしたくなければC++コンパイラ使えば済むし。
82デフォルトの名無しさん (ワッチョイ ad98-nUmj)
2018/11/19(月) 00:20:04.42ID:DaKcZAfU0 ここで聞いていい内容なのかわからないのですが
gccを4.8.1から8.1.0に変えたらwinAPIを使用して図形を表示するプログラムで
図形が表示されずウィンドウだけ表示されるようになってしまった
これは、c言語,gcc,winAPIどれを疑えばいいのでしょうか?
MingW-W64-buildsというところから8.1.0のgccはダウンロードした
gccを4.8.1から8.1.0に変えたらwinAPIを使用して図形を表示するプログラムで
図形が表示されずウィンドウだけ表示されるようになってしまった
これは、c言語,gcc,winAPIどれを疑えばいいのでしょうか?
MingW-W64-buildsというところから8.1.0のgccはダウンロードした
83さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdea-/fpg)
2018/11/19(月) 00:24:07.93ID:4H6R9aF+d 図形の描画ルーチンを貼れ。
84デフォルトの名無しさん (ワッチョイ 4a21-JwVn)
2018/11/19(月) 00:25:09.76ID:+eaeK27e0 >>81
なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、
typedef struct {...} S;
typedef enum {...} E;
void f(S* s, E e);
上のような書き方、結構(昔から)見かける気がするけど
なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、
typedef struct {...} S;
typedef enum {...} E;
void f(S* s, E e);
上のような書き方、結構(昔から)見かける気がするけど
85デフォルトの名無しさん (ワッチョイ 054f-CYUw)
2018/11/19(月) 00:28:01.74ID:1op4u+BL0 >>82
お前の頭、だな
gcc4.8.1で行けるのならそれでやればいい話。
それを8.1.0に変えただけで問題が発生するのなら、当然そこに問題がある。
そしてそもそも詳しいことはそのソースを作った奴に聞け。
お前の頭、だな
gcc4.8.1で行けるのならそれでやればいい話。
それを8.1.0に変えただけで問題が発生するのなら、当然そこに問題がある。
そしてそもそも詳しいことはそのソースを作った奴に聞け。
86デフォルトの名無しさん (ワッチョイ 4a21-JwVn)
2018/11/19(月) 00:30:44.00ID:+eaeK27e0 というかこれ以外だとtypedefを使うべき所にしか使わないはずなので、
cだろうがc++だろうがtypedefの使用量に差が出るとは思えない
ああ、実は>>78ってc++ならusing使うべきとかそういう話?
cだろうがc++だろうがtypedefの使用量に差が出るとは思えない
ああ、実は>>78ってc++ならusing使うべきとかそういう話?
87デフォルトの名無しさん (ワッチョイ 054f-CYUw)
2018/11/19(月) 00:46:59.49ID:1op4u+BL0 >>84
> 上のような書き方、結構(昔から)見かける気がするけど
個人的には疑問があるが、おそらく実際はそちらの方が正しいのだろう。
C++で対策された=C言語のそこがウザイと禿が判定した、ということだから。
> なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、
ググレば分かるが、その辺の言語では「こちらの方が短いから良い」といっているページは結構見かける。
C言語でこれを言っている奴は皆無だ。
>>86
> ああ、実は>>78ってc++ならusing使うべきとかそういう話?
いや、そうじゃない。そちらの取り方で問題ないし、君の typedef の使い方は正しいと思う。
typedefって結局「型に別名を与える」為の物で、
型が自由に定義出来るようになったC++ではほぼ要らないはず、って話。
> 上のような書き方、結構(昔から)見かける気がするけど
個人的には疑問があるが、おそらく実際はそちらの方が正しいのだろう。
C++で対策された=C言語のそこがウザイと禿が判定した、ということだから。
> なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、
ググレば分かるが、その辺の言語では「こちらの方が短いから良い」といっているページは結構見かける。
C言語でこれを言っている奴は皆無だ。
>>86
> ああ、実は>>78ってc++ならusing使うべきとかそういう話?
いや、そうじゃない。そちらの取り方で問題ないし、君の typedef の使い方は正しいと思う。
typedefって結局「型に別名を与える」為の物で、
型が自由に定義出来るようになったC++ではほぼ要らないはず、って話。
88デフォルトの名無しさん (ワッチョイ ad98-nUmj)
2018/11/19(月) 01:03:17.87ID:DaKcZAfU0 >>85
そうか...仕様変更、バグ、なにか他にも入れるものがあるとか分かるなら聞きたかったんだが
仕方ない。ありがとう
4.8.1だと古くなってるかなと思って思い切って8.1.0で試してみてるんだけど戻すか
そうか...仕様変更、バグ、なにか他にも入れるものがあるとか分かるなら聞きたかったんだが
仕方ない。ありがとう
4.8.1だと古くなってるかなと思って思い切って8.1.0で試してみてるんだけど戻すか
89デフォルトの名無しさん (ブーイモ MMea-N102)
2018/11/19(月) 01:03:24.61ID:CKJwSX5SM Web系言語界隈は条件演算子をif文の簡略表記()だの省略形()だの言ってる池沼も多いからなぁw
90デフォルトの名無しさん (ワッチョイ 054f-CYUw)
2018/11/19(月) 01:16:02.93ID:1op4u+BL091デフォルトの名無しさん (ワッチョイ 8681-maOp)
2018/11/19(月) 01:26:41.23ID:on7lyeKV0 else if の省略形は確かに頂けない
あれはperlからだっけか?
あれはperlからだっけか?
92さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdea-/fpg)
2018/11/19(月) 01:28:26.32ID:4H6R9aF+d #elifはあって、elifがないのは変だが、キーワードを節約するためだから。
93デフォルトの名無しさん (ワッチョイ 054f-CYUw)
2018/11/19(月) 01:30:10.27ID:1op4u+BL094デフォルトの名無しさん (ワッチョイ ad98-nUmj)
2018/11/19(月) 01:37:20.71ID:DaKcZAfU095デフォルトの名無しさん (ワッチョイ 4a21-JwVn)
2018/11/19(月) 01:38:53.01ID:+eaeK27e0 >>87
あー...もしかして自分の
>struct/enum/unionとかの省略を目的としたtypedefは行わない
これが「型定義時に、キーワードとしてのstructやenum、unionの省略のためだけのtypedefは行わない」
つまりstruct S{...}という形で定義し、明示的にvoid f(struct S* s)などといった形式で取り扱う
...という意味ではなく、
「structやenum、unionといった型について、それら個々の名前(タグ名)を単に省略するためだけのtypedefは行わない」
つまりtypedef struct SS...SS Sというただの省略形式にするtypedefは行わない
と伝わったのかな
それなら書き方が悪かった、申し訳ない
あー...もしかして自分の
>struct/enum/unionとかの省略を目的としたtypedefは行わない
これが「型定義時に、キーワードとしてのstructやenum、unionの省略のためだけのtypedefは行わない」
つまりstruct S{...}という形で定義し、明示的にvoid f(struct S* s)などといった形式で取り扱う
...という意味ではなく、
「structやenum、unionといった型について、それら個々の名前(タグ名)を単に省略するためだけのtypedefは行わない」
つまりtypedef struct SS...SS Sというただの省略形式にするtypedefは行わない
と伝わったのかな
それなら書き方が悪かった、申し訳ない
96デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/19(月) 12:18:16.63ID:hiATcnIp0 >>92
自分もここが引っ掛かったんだよね。
プリプロセッサ向けにはelifキーワードがあるのに
コンパイラ向けにはない。
もしもキーワード数を節約したり実行速度のみを重視する実装なら
プリプロセッサ向けにもelifキーワードはなかった筈。
なのにある,ということはなにかしらタイプ数の節約とか読み易さとかを考慮してるんだろうね。
だからコンパイラ向けにelifキーワード(の紛い物)を追加するというのは何らおかしくないと思うのだが。
自分もここが引っ掛かったんだよね。
プリプロセッサ向けにはelifキーワードがあるのに
コンパイラ向けにはない。
もしもキーワード数を節約したり実行速度のみを重視する実装なら
プリプロセッサ向けにもelifキーワードはなかった筈。
なのにある,ということはなにかしらタイプ数の節約とか読み易さとかを考慮してるんだろうね。
だからコンパイラ向けにelifキーワード(の紛い物)を追加するというのは何らおかしくないと思うのだが。
97デフォルトの名無しさん (アークセー Sx6d-2qly)
2018/11/19(月) 13:17:22.86ID:X/ZWPPJsx そもそもC言語にはelse ifって構文はないよ。
んで、プリプロセッサは#の後をスペースなしの1語にした結果だと思う。
んで、プリプロセッサは#の後をスペースなしの1語にした結果だと思う。
98デフォルトの名無しさん (アウアウカー Sa85-ZFLo)
2018/11/19(月) 13:27:56.02ID:X6/A5UNDa フリーフォーマットだからelse if(...)を自分なりに分かりやすくすれば良いだけ。
99デフォルトの名無しさん (ワッチョイ e944-maOp)
2018/11/19(月) 21:04:51.99ID:DK7kmuka0100デフォルトの名無しさん (ワッチョイ 9564-ddua)
2018/11/20(火) 01:45:19.01ID:EatTFoyz0101デフォルトの名無しさん (ワッチョイ d623-maOp)
2018/11/20(火) 09:35:42.58ID:im347JOd0 >>97
構文にはなくても書けるんだから一緒だろ
構文にはなくても書けるんだから一緒だろ
102デフォルトの名無しさん (ワッチョイ cdb3-4fLB)
2018/11/20(火) 15:56:41.31ID:mQTI1hl+0 負の数を識別できません。
signed int DATA = -128 (0xFF80。int は16ビット)
if (DATA > 0)
{式1}
else
{式2}
なぜか式1 が実行されます。(DATA > 0) は偽ではないのでしょうか。
signed int DATA = -128 (0xFF80。int は16ビット)
if (DATA > 0)
{式1}
else
{式2}
なぜか式1 が実行されます。(DATA > 0) は偽ではないのでしょうか。
103デフォルトの名無しさん (ワッチョイ adea-EWFf)
2018/11/20(火) 16:14:32.18ID:ls520OJz0 問題のコードから症状が出るままどんどん削ってって最小単位がそのコード?
https://ideone.com/xcDRkc
実は右辺がcharの変数で 中身が 0x80 なんだけど
符号拡張の過程で char を unsigned char として 0x0080 と拡張したり
(処理系依存だっけか? リテラルだけだっけ?)
そういう話ではない?
https://ideone.com/xcDRkc
実は右辺がcharの変数で 中身が 0x80 なんだけど
符号拡張の過程で char を unsigned char として 0x0080 と拡張したり
(処理系依存だっけか? リテラルだけだっけ?)
そういう話ではない?
104デフォルトの名無しさん (アウアウカー Sa85-ZAHG)
2018/11/20(火) 16:16:24.86ID:hc2iBltta 16bitってどういう処理系なんじゃろうか
105デフォルトの名無しさん (ワッチョイ cdb3-4fLB)
2018/11/20(火) 16:43:19.22ID:mQTI1hl+0 >>103,104
右辺の0は定数です。
変数DATA の値はPRINT文で16進表示したものです(0xFF80)。
引用先のページは、残念ながら理解できませんでした。
申し遅れましたが処理系は組み込み用16ビットマイコン用GCC です。
処理系に依って前述のような動作になることはありえますか?
右辺の0は定数です。
変数DATA の値はPRINT文で16進表示したものです(0xFF80)。
引用先のページは、残念ながら理解できませんでした。
申し遅れましたが処理系は組み込み用16ビットマイコン用GCC です。
処理系に依って前述のような動作になることはありえますか?
106デフォルトの名無しさん (ワッチョイ adea-EWFf)
2018/11/20(火) 16:49:33.90ID:ls520OJz0 右辺云々は 初期化の右辺の話だけども、そこが本質じゃなさそうね
sizeof(int) = 2 かつ printf("%x", DATA) が ff80 と表示される系で
if (DATA > 0) が成立しないとな
ごめんワカラン
sizeof(int) = 2 かつ printf("%x", DATA) が ff80 と表示される系で
if (DATA > 0) が成立しないとな
ごめんワカラン
107デフォルトの名無しさん (バッミングク MMe1-2qly)
2018/11/20(火) 16:59:34.34ID:7KgR8FwmM 最小の全ソースを見せて。
この手の場合、自分では正しいと思ってるとこに思わぬポカミスが入ってることがまれによくある。
この手の場合、自分では正しいと思ってるとこに思わぬポカミスが入ってることがまれによくある。
108デフォルトの名無しさん (ワッチョイ cdb3-4fLB)
2018/11/20(火) 17:07:55.90ID:mQTI1hl+0 >>106,107
すいません。ご察しのとおり、変数DATA に初期値を代入しているわけではありません。
このif 文が評価される直前のDATA 値が-128 という事で、初期値を代入したように書きました。
今日はこの件で非常に疲れたので、ソースの提示は少し時間を下さい。ありがとうございます。
すいません。ご察しのとおり、変数DATA に初期値を代入しているわけではありません。
このif 文が評価される直前のDATA 値が-128 という事で、初期値を代入したように書きました。
今日はこの件で非常に疲れたので、ソースの提示は少し時間を下さい。ありがとうございます。
109デフォルトの名無しさん (ワッチョイ adea-EWFf)
2018/11/20(火) 17:18:12.25ID:ls520OJz0 >>107
元コードをそのまま横断的に眺めてるとわからないけど
症状が残るまま、余計な箇所をがんがん削っていって簡単化していくと見つかることがあるよね
a[i++] = i; のような副作用完了点内での複数回の参照とかはどうしようもないけどw
元コードをそのまま横断的に眺めてるとわからないけど
症状が残るまま、余計な箇所をがんがん削っていって簡単化していくと見つかることがあるよね
a[i++] = i; のような副作用完了点内での複数回の参照とかはどうしようもないけどw
110デフォルトの名無しさん (アウアウカー Sa85-ZAHG)
2018/11/20(火) 17:26:38.15ID:GGiSm8Yna 値自体は型情報を含んでないという点は押さえないとあかんが、そういう問題でもないか。
妙なtypedefしてたりしてね。
妙なtypedefしてたりしてね。
111デフォルトの名無しさん (ワッチョイ e99e-ZAoN)
2018/11/20(火) 17:33:06.78ID:oWNEdszs0 アセンブリコード読んで見るとか
割り込みでレジスタ確認とかすれば
cで見てると気づかないことが見えてくるかも
割り込みでレジスタ確認とかすれば
cで見てると気づかないことが見えてくるかも
112デフォルトの名無しさん (ワッチョイ 2961-4fLB)
2018/11/20(火) 19:23:37.02ID:2i13hG6Q0 printf("check : sizeof %d: DATA = %d\n",sizeof(DATA),DATA);
if((signed int)DATA > (signed int)0)
とかやって一つ一つ動作確認してみるとか。
よくわからん動作不良起こした時は配列変数がスタックサイズ超えてたとか
16Bit環境なら32kb/64kb超えたとかが原因だったことあるけど。
if((signed int)DATA > (signed int)0)
とかやって一つ一つ動作確認してみるとか。
よくわからん動作不良起こした時は配列変数がスタックサイズ超えてたとか
16Bit環境なら32kb/64kb超えたとかが原因だったことあるけど。
113デフォルトの名無しさん (ドコグロ MM21-JzRR)
2018/11/20(火) 19:37:09.53ID:TCh3BaRvM■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【速報】気象庁は津波注意報すべて解除 [蚤の市★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 「3.11の余震とは別か」「長時間避難できる場所を」 識者の見方 [蚤の市★]
- 【実況】博衣こよりのえちえち朝こよ🧪
- さかまた「過呼吸になった」かなた「耳聞こえない」ござる「声出ない」まつり「ご飯食べれない」
- 【画像】カリカリ女、脱いだらすごい😨 [632966346]
- 早大名誉教授「高市内閣の高支持率はデータ操作か、支持している日本人がアホなのか」👈核心を突いてしまう [868050967]
- 時々ロシア語でデレるアーリャさんより常に日本語でデレる俺の方がよくね?
- 膝掛け使ってる男いるでしょ
