2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

C言語なら俺に聞け 149

1 :デフォルトの名無しさん :2018/10/28(日) 22:01:44.38 ID:D9Gt7gmT0.net
!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

2 :デフォルトの名無しさん :2018/10/29(月) 21:37:04.36 ID:l03/lfXna.net
0x99b9e4313e3e

3 :デフォルトの名無しさん :2018/10/30(火) 23:57:20.35 ID:EION13qUM.net
自分を賢いと思っている馬鹿は
周りが自分をどう見ているかも
相手がどのレベルにいるのかも
なぜ自分が放置されてるのかも
何一つ知らない

4 :デフォルトの名無しさん :2018/11/01(木) 16:13:41.13 ID:upF+pHX50.net
musl-libcみたいに,特定のOSのプロジェクトではないPOSIXユーティリティの実装ってありますかね。

5 :デフォルトの名無しさん :2018/11/01(木) 17:07:48.90 ID:g+DLXddba.net
NewLibとかあったね

6 :デフォルトの名無しさん :2018/11/03(土) 10:27:59.63 ID:gIO4YTzK0.net
strtok_sを4変数にするとエラーになるんですけどどうしたらいいですか?
strmaxがある説明と無い説明があってわからないです。

7 :デフォルトの名無しさん :2018/11/03(土) 11:28:06.76 ID:hj5IrB61M.net
>>6
msvcのstrtok_sは非標準だから、_MSC_VERとかが定義されてるかどうかで呼び分けるしかないね。
あんまり覚えてないけどmsvcバージョンのほうが先にあった気がするから、iso/iecが悪い気がする。(間違ってるかも)
まあmsが切り替えスイッチを用意してくれればよいのだけど。

8 :デフォルトの名無しさん :2018/11/07(水) 08:24:14.69 ID:60G+FgCT0.net
>>7
よくわからないのでstrtokを使いました。

9 :デフォルトの名無しさん :2018/11/07(水) 16:09:41.16 ID:39tnP8GCx.net
ちょっとお知恵を拝借。

符号付き14ビットの整数があるとき(14ビットのMSBが符号ビット)、その値を符号付き16ビット値に拡張するうまいやり方はないでしょうか?
拡張後も符号や数値自体は変化なしです。
例えば2進で
10 1010 1010 1010
という符号付き14ビット値があった時、
1110 1010 1010 1010
のように変換したい。

14ビット値を16ビット符号付き変数に入れて左に2ビット論理シフトし、さらに右に2ビット算術シフトすれば実現できるのですが、何となく気持ち悪くて。
サクッとエレガントな方法はないでしょうか?

10 :デフォルトの名無しさん :2018/11/07(水) 16:25:54.26 ID:Gtw+mwj/H.net
>>9
シフトが一番エレガント。

11 :デフォルトの名無しさん :2018/11/07(水) 18:02:56.37 ID:d49i6th8M.net
>>9
2の補数表現として…
普通に14bit目が1なら0xc000とorするだけじゃないの?

12 :デフォルトの名無しさん :2018/11/07(水) 18:16:05.56 ID:bimd4khFa.net
もはや答えが出切ったと思うので斜め上からの回答でも書いておくか。

回答

int型が14ビットの整数型になっているCコンパイラを使う。
もちろんchar型は7ビット。
CPUは1バイトが7ビットである。

13 :デフォルトの名無しさん :2018/11/07(水) 19:11:16.88 ID:d49i6th8M.net
それ16bitの結果得るのが面倒なだけだろ
もう少し面白い回答頼むわ

14 :デフォルトの名無しさん :2018/11/07(水) 19:12:35.33 ID:xr+D7aWAM.net
皆様回答ありがとうございます。
今回はビットシフト方式で行こうと思います。

>>12
使ってるCPUとコンパイラがマイナーな、ある意味純粋な16ビット環境で、sizeof(char)もsizeof(short)も1を返し、sizeof(long)は2を返すような特殊な環境なので7ビットマイコンではありません。

15 :デフォルトの名無しさん :2018/11/07(水) 19:46:07.55 ID:SCUqGzCI0.net
intが14ビット
そんな処理系あるの?

16 :デフォルトの名無しさん :2018/11/07(水) 20:47:19.69 ID:bimd4khFa.net
>>15
多分ない。
しかし1バイトが6ビットとか9ビットのマシンはあったようだよ。
https://qiita.com/yaju/items/c5da6df2221d5c3611e0

17 :デフォルトの名無しさん :2018/11/07(水) 20:49:47.59 ID:YuYLxFMn0.net
60〜70年代メインフレームは百花繚乱だったなぁ

ttps://en.wikipedia.org/wiki/Word_(computer_architecture)
27bitマシンとかどーすんだよ

18 :デフォルトの名無しさん :2018/11/07(水) 20:55:36.02 ID:Lazgvcn1M.net
このように1バイトが何ビットかはアーキテクチャ依存のため、EUではハードディスクなどのパッケージにはGB単独表記は認められず、Go(ギガオクテット)を併記または単独で表記しなければならない。
1オクテットは必ず8バイト。

19 :デフォルトの名無しさん :2018/11/07(水) 21:07:14.78 ID:fEoWtkRgM.net
つまりEUでもHDDの容量はわからないってことか

20 :デフォルトの名無しさん :2018/11/07(水) 21:09:34.64 ID:u7stYdWj0.net
>>18
いや、Octetは8ビットでは?

21 :デフォルトの名無しさん :2018/11/07(水) 21:12:33.55 ID:Lazgvcn1M.net
そうでしたwwwww

22 :デフォルトの名無しさん :2018/11/07(水) 21:19:59.22 ID:h4FWJh3Ka.net
大丈夫。
文脈から理解はしてる。
上げ足取りなだけだ。

23 :デフォルトの名無しさん :2018/11/07(水) 21:47:40.71 ID:lW24kLVO0.net
バグってそういうもんだろ
笑ってられる神経が異常だ

24 :デフォルトの名無しさん :2018/11/07(水) 23:27:18.47 ID:fWOqg0Pc0.net
バカってそういうもんだろ

25 :デフォルトの名無しさん :2018/11/08(木) 00:45:35.31 ID:LWRNNBjj0.net
>>12
CHAR_BIT は 8 以上、 INT_MAX は 32767 以上って規定があるから、規格非準拠になっちゃう。

26 :デフォルトの名無しさん :2018/11/08(木) 22:02:06.26 ID:WtJgli4G0.net
だから何? 違ったら笑うしかできない無能か

27 :デフォルトの名無しさん :2018/11/08(木) 22:55:19.89 ID:nQ7J47/rx.net
C89止まりのものです
私のような者が C11などの新しい規格を学ぶのによい書籍はありますか?

28 :デフォルトの名無しさん :2018/11/08(木) 23:16:18.68 ID:x4oYjs6S0.net
このスレは最近独り言が増えたのか?
オレもそうだがな

29 : :2018/11/08(木) 23:21:07.60 ID:PviajTiD0.net
>>27
>C89止まりのものです、私のような者が C11などの新しい規格を学ぶのによい書籍はありますか?
私もC89止まりですが、それで困ることがあるのでしょうか?

30 :デフォルトの名無しさん :2018/11/08(木) 23:28:43.81 ID:6k9Hci0C0.net
>>29
私はC99で止まっていますが、最近はもっぱらPythonを使っているので困りません

31 :デフォルトの名無しさん :2018/11/09(金) 05:43:42.12 ID:1ixP0EQ90.net
pythonいいよな
yieldとかC標準にもほしい

32 :デフォルトの名無しさん :2018/11/09(金) 10:07:36.38 ID:6cegpcYL0.net
cpythonのyield実装を見ればC言語に移植できるんじゃねえの

33 :デフォルトの名無しさん :2018/11/09(金) 11:42:49.67 ID:Sh6b3ug/a.net
yieldって何につかうの?

34 :デフォルトの名無しさん :2018/11/09(金) 12:33:54.85 ID:DHGOZxvaa.net
動き的にgets的な動きする。
表示したら即メモリ解放的な。

35 :デフォルトの名無しさん :2018/11/09(金) 12:41:29.53 ID:GUqFOdkWM.net
>>31-32
yieldはソース上に出ないデータを管理しないといけないからC言語の理念と合わない気がする
※ 個人の感想だが…
C++には欲しいな

36 :デフォルトの名無しさん :2018/11/09(金) 12:52:21.62 ID:1VeVq06f0.net
yieldはいわばスタック情報の保存だから、setjmp、longjmpで出来そうな出来なさそうな?

37 :デフォルトの名無しさん :2018/11/09(金) 13:11:31.21 ID:JsSTi+Gxa.net
ん?thread?

38 :デフォルトの名無しさん :2018/11/09(金) 13:52:10.49 ID:Sh6b3ug/a.net
単にコンテキスト保存するだけだからまあ再現はできるよ
書き方としてイテレータとか欲しいのはわかるけど実現方法はどうでもいいわけじゃん

39 :デフォルトの名無しさん :2018/11/09(金) 14:11:15.88 ID:lOb1tGzl0.net
yieldは便利で使い勝手がいーるど

40 :デフォルトの名無しさん :2018/11/09(金) 20:13:38.25 ID:3ZHBVzZ50.net
POSIXの<errno.h>にある番号とBSDの<sysexits.h>で全然番号が違うのは理由があるのかな。
いままで<sysexits.h>に従って「許可がない」動作は77を返すものだと思ってたら
Linuxでは1を返すのでなぜだと思って調べたら<errno.h>では権限エラーは1。
嫌だなぁ。

41 :デフォルトの名無しさん :2018/11/09(金) 20:53:23.68 ID:GUqFOdkWM.net
77とか1とかのリテラルで書くバカって今でもいるんだ…

42 :デフォルトの名無しさん :2018/11/09(金) 23:18:17.74 ID:Sh6b3ug/a.net
POSIXで具体的な数値決めてたっけ?

43 :デフォルトの名無しさん :2018/11/10(土) 05:46:23.69 ID:PYYpj2JU0.net
>>40
<errno.h> の方はC言語でシステムコールしてエラーになった時の errno 変数の値で、
<sysexits.h> はプログラムが exit() 等で終わる時に使う値なので全く用途が違う。

44 :デフォルトの名無しさん :2018/11/10(土) 06:30:10.24 ID:lBOHSSIo0.net
>>43
つまり<errno.h>で定義された値はユーザーからは見えないんだね。

45 :デフォルトの名無しさん :2018/11/10(土) 06:43:06.70 ID:PYYpj2JU0.net
>>44
見えないというか、ただの数値なのでどこにでも使えないわけではないが、errnoの値をexit()で返す事は想定して作られていない。

46 :デフォルトの名無しさん :2018/11/10(土) 11:37:20.64 ID:lMF42kZL0.net
>>45
わりとerrnoを返してくる人多いけどね

47 :デフォルトの名無しさん :2018/11/10(土) 11:58:28.71 ID:4Oh2WWEl0.net
errno返してもらっても困る

48 :デフォルトの名無しさん :2018/11/10(土) 17:42:25.30 ID:16GnFLu/0.net
#defineマクロ定数はプリプロセッサで単純置換されるだけだからな

49 :デフォルトの名無しさん :2018/11/10(土) 18:12:43.61 ID:JVjCprWqa.net
>>46
多いか?
別にそう作っちゃいけないということはないが、できれば exit() では <sysexits.h> の方を使って欲しいな。
単なる個人的な希望だが。

50 :デフォルトの名無しさん :2018/11/10(土) 18:13:54.94 ID:lBOHSSIo0.net
>>45
>>46
ありがとう。
ユーティリティ自体の終了ステータスはPOSIXの範囲では0もしくは非0,
BSD拡張で<sysexits.h>で定められている値を使えば まあユーザーの助けにはなるって認識でいいかな。

51 :デフォルトの名無しさん :2018/11/10(土) 18:26:46.25 ID:JVjCprWqa.net
そう。

52 :デフォルトの名無しさん :2018/11/11(日) 12:27:27.91 ID:2PA7tL2j0.net
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);

...などとしないとアライメント違反になりそうな気がするのですが、この認識は正しいでしょうか

53 :デフォルトの名無しさん :2018/11/11(日) 12:57:16.34 ID:2PA7tL2j0.net
すいませんよく考えたら自己解決しました
>>52の質問は取り下げます

お騒がせしました

54 :デフォルトの名無しさん :2018/11/11(日) 14:07:31.98 ID:PRctJ18Z0.net
>>4
へー。musl-libc知らなかったけど組込Linuxとかの界隈では有名っぽいね。
ソース見たけどすごく短かいのが多くて逆に不安になったw

55 :デフォルトの名無しさん :2018/11/11(日) 15:17:31.04 ID:0RasjQan0.net
sysexits.h って初めて知った

>>49
Linuxとかだと ls unko で 2 が返るとか割と普通

56 :デフォルトの名無しさん :2018/11/11(日) 16:17:47.42 ID:PRctJ18Z0.net
>>55
まあBSDでプログラミングしたことないと あんまり知りえないと思うわ。
だいたいPOSIXで定められてる訳じゃないから 知っておくべきなのはBSDプログラマくらい。

ただLinuxプログラムのエラーコード周りはなぜか非統一的なんだよね。
GNUコーディング規約で事細かに決められてそうなものだけどねw
apt(1)なんて権限エラーに100返すんだぜ?

57 :デフォルトの名無しさん :2018/11/11(日) 16:41:45.09 ID:PCIE9alw0.net
>>52
『MSDNこそC++である』という格言があるように、構造体の末尾の配列は不定長に出来ます

構造体内の可変長配列
ttps://msdn.microsoft.com/ja-jp/library/b6fae073(v=vs.120).aspx

58 :デフォルトの名無しさん :2018/11/11(日) 18:01:07.65 ID:EYHizhRi0.net
VLAとは違うんだよな
そのページのサンプルに限っては不完全型配列の直前にサイズ情報があって確かに可変長だが
配列そのものがサイズ情報を含むのではないので、不定長とでもいうべきものだ

59 :デフォルトの名無しさん :2018/11/11(日) 18:07:53.58 ID:PRctJ18Z0.net
どうでもいいけど そのURLの書式はなんだ?
URLパラメータってそんな位置に置けたっけ。

60 :デフォルトの名無しさん :2018/11/11(日) 18:21:19.83 ID:1ROtIrLE0.net
先頭さえ確定できれば後ろなんてどうでも良い
さすがのC言語さん

61 :デフォルトの名無しさん :2018/11/11(日) 21:36:09.88 ID:1MIvJQ9R0.net
>>57
その格言は初めて聞きましたw

その方法だとアライメント違反になるかならないかが気になっていたのですが、
* 末尾のbuffer[0]でその型のアライメント以上のアライメントを構造体に強いることができる(拡張)
* 末尾のbuffer[1]の場合は当然構造体にそのアライメント以上のアライメントを強いることができる(c89)
* 末尾のbuffer[]でも同様(c99での仕様)
となり、全パターンでbuffer[i]へのアクセス時にアライメント違反にならないので、
ポインタメンバにしてアライメント気にしてmallocする必要ないのかー、これでいいのかーと解決した次第です

>>58
英語だとflexible arrayでした

62 :デフォルトの名無しさん:2018/11/11(日) 22:08:30.71 ID:7PNv93Lvf
c言語はとてもマシな呪いだと思うよ。
センスいいね、お互いにね。

63 :デフォルトの名無しさん:2018/11/11(日) 22:10:10.02 ID:7PNv93Lvf
新参者を呪う言葉は、先輩なら誰でも当たり前の事実であるかのように発するからね。

64 :デフォルトの名無しさん :2018/11/11(日) 22:09:10.99 ID:3Du2sMqla.net
>>59
v=vs.120のとこ?
クエリストリングちゃうやろ

65 :デフォルトの名無しさん :2018/11/11(日) 22:26:25.11 ID:0F8Q4Ddx0.net
>>55
ま、確かにコマンドごとにバラバラだな。
errno とも無関係だったりする。

66 :デフォルトの名無しさん :2018/11/12(月) 13:20:45.59 ID:JkRQG90v0.net
もうちょっと皆がリターンコードについて考えてくれたらいいね。

67 :デフォルトの名無しさん :2018/11/12(月) 13:26:58.93 ID:yW6s8Lj00.net
コマンドの戻り値って、皆さんどの様に活用されてますか?
成功か失敗か、それが分かれば十分な気はしますけど

68 :デフォルトの名無しさん :2018/11/12(月) 13:50:25.07 ID:JkRQG90v0.net
>>67
例えば同じ「失敗」でも何が原因なのか分かったほうが問題に対処しやすくない?
ファイルが存在しないのか はたまたファイルが現状の権限では読みとれないのか。
もちろんエラーメッセージを見てもいいけど。

あと,終了ステータスを見ないと成功失敗が分からない場合がある。
例えばdiff(1)ユーティリティーなんかは「1」という(一見失敗してるような)終了ステータスに
「(コマンド自体は成功してるが)不一致が発見された」という意味を割り当ててる。
fsck(1)ユーティリティーはもっと複雑。

まあ知ってるに越したことはないし<sysexit.h>はPOSIX標準ではないにせよ,
Unixプログラミングをする場合は積極的に利用してもいいかも。

69 :デフォルトの名無しさん :2018/11/12(月) 14:11:20.80 ID:yW6s8Lj00.net
イヤ、使い方の可能性としてそう言うものがあるくらいは知っている
実際に使っている人がいたら、どういう使い方をしているかを聞きたいんだ

70 :デフォルトの名無しさん :2018/11/12(月) 16:42:56.85 ID:JkRQG90v0.net
勘違いしてましたわ
俺の知ってる限りじゃシェルスクリプトでは多用されてるがCではどうだろうね。あまり見掛けない。

71 :デフォルトの名無しさん :2018/11/12(月) 17:16:29.53 ID:7RdsKszja.net
diffでちょっと迷うくらいだよな。

72 :デフォルトの名無しさん :2018/11/18(日) 22:01:33.04 ID:Fz4U8sel0.net
#define elif(e) else if (e)
みたいにして
if (...) {
...
} elif (...) {
...
} else {
...
}
↑こういう感じにするのってやっちゃマズいのかな。
個人的にelifキーワードがある言語に慣れてるんでこうやってて
現状特にエラーに遭遇したことはないんだけど
OSSのソースコードとか個人が公開してるソースコード見ても
こういうことやってないんだよね。

73 :デフォルトの名無しさん :2018/11/18(日) 22:14:05.51 ID:Eond7dK60.net
>>72
やめとけ

メリットが1ミリもないから誰もやらない。
善し悪しはさておき、C言語での判断基準はほぼ「実行性能」であって、
else if と書けばいいだけの所をいちいちマクロにする馬鹿なんて世界中に誰もいないだけ。
というか、そのレベルで慣れられないのなら、elif言語だけ使っておけ。

74 :デフォルトの名無しさん :2018/11/18(日) 22:24:21.65 ID:KTJRdzRs0.net
#define { begin

みたいなことを本気でやる奴がいたとはw

75 :デフォルトの名無しさん :2018/11/18(日) 22:26:08.72 ID:KTJRdzRs0.net
#define begin {
逆だったわw

76 :さまよえる蟻人間 :2018/11/18(日) 22:35:31.43 ID:ZI/kDlHTd.net
ソースコードを静的解析する関係で、文法を強引に変えるような変態な前処理は良くないらしい。

77 :デフォルトの名無しさん :2018/11/18(日) 22:39:49.79 ID:HA6us6PZ0.net
世の中の静的解析ツールは当然プリプロセッサ適用後の状態で解析するわけで

78 :デフォルトの名無しさん :2018/11/18(日) 22:42:50.43 ID:gSv28L1Ba.net
typedefも避けるという流儀はあるからね
まあ気持ちはわかる
むしろGNU拡張のtypeofはアリ

79 :デフォルトの名無しさん :2018/11/18(日) 22:45:11.55 ID:Eond7dK60.net
>>75
endは普通に変数名に使われてるから無理だな。
それはさておき、セミコロン嫌いも拗らせておかしくなってるよな。

80 :デフォルトの名無しさん :2018/11/18(日) 22:47:48.36 ID:Eond7dK60.net
>>78
> typedefも避けるという流儀はあるからね
それはC++ではないか?Cでは使われまくりだったような。

81 :さまよえる蟻人間 :2018/11/18(日) 23:14:59.59 ID:ZI/kDlHTd.net
国際会議で誰も知らない方言を話して良い訳ない。オープンなソースコードは世界中の人が見るんだから。

82 :デフォルトの名無しさん :2018/11/18(日) 23:19:46.27 ID:we8vMVw10.net
>>80
多分linuxカーネルの流儀じゃないかな

struct/enum/unionとかの省略を目的としたtypedefは行わない
opaque-type/関数ポインタとかの必然性が無い限り対象は明示するっていう戦略

83 :デフォルトの名無しさん :2018/11/18(日) 23:37:43.07 ID:Eond7dK60.net
>>82
> struct/enum/unionとかの省略を目的としたtypedefは行わない
こんなのは当たり前だ。(linuxカーネルに限らず)

そもそも「タイプ数をケチるだけの為に何かする」という文化は最近のWeb系馬鹿言語だけであって、Cにはない。
当然、else if を elif にしたがる奴もいない。
「腕のいい奴のコードは短い」を勘違いしてる馬鹿共がやたら「タイプ数」にこだわってるだけだ。
だいたい、structをタイプしたくなければC++コンパイラ使えば済むし。

84 :デフォルトの名無しさん :2018/11/19(月) 00:20:04.42 ID:DaKcZAfU0.net
ここで聞いていい内容なのかわからないのですが
gccを4.8.1から8.1.0に変えたらwinAPIを使用して図形を表示するプログラムで
図形が表示されずウィンドウだけ表示されるようになってしまった
これは、c言語,gcc,winAPIどれを疑えばいいのでしょうか?
MingW-W64-buildsというところから8.1.0のgccはダウンロードした

85 :さまよえる蟻人間 :2018/11/19(月) 00:24:07.93 ID:4H6R9aF+d.net
図形の描画ルーチンを貼れ。

86 :デフォルトの名無しさん :2018/11/19(月) 00:25:09.76 ID:+eaeK27e0.net
>>83
なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、
typedef struct {...} S;
typedef enum {...} E;
void f(S* s, E e);
上のような書き方、結構(昔から)見かける気がするけど

87 :デフォルトの名無しさん :2018/11/19(月) 00:28:01.74 ID:1op4u+BL0.net
>>84
お前の頭、だな

gcc4.8.1で行けるのならそれでやればいい話。
それを8.1.0に変えただけで問題が発生するのなら、当然そこに問題がある。
そしてそもそも詳しいことはそのソースを作った奴に聞け。

88 :デフォルトの名無しさん :2018/11/19(月) 00:30:44.00 ID:+eaeK27e0.net
というかこれ以外だとtypedefを使うべき所にしか使わないはずなので、
cだろうがc++だろうがtypedefの使用量に差が出るとは思えない

ああ、実は>>80ってc++ならusing使うべきとかそういう話?

89 :デフォルトの名無しさん :2018/11/19(月) 00:46:59.49 ID:1op4u+BL0.net
>>86
> 上のような書き方、結構(昔から)見かける気がするけど
個人的には疑問があるが、おそらく実際はそちらの方が正しいのだろう。
C++で対策された=C言語のそこがウザイと禿が判定した、ということだから。

> なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、
ググレば分かるが、その辺の言語では「こちらの方が短いから良い」といっているページは結構見かける。
C言語でこれを言っている奴は皆無だ。


>>88
> ああ、実は>>80ってc++ならusing使うべきとかそういう話?
いや、そうじゃない。そちらの取り方で問題ないし、君の typedef の使い方は正しいと思う。

typedefって結局「型に別名を与える」為の物で、
型が自由に定義出来るようになったC++ではほぼ要らないはず、って話。

90 :デフォルトの名無しさん :2018/11/19(月) 01:03:17.87 ID:DaKcZAfU0.net
>>87
そうか...仕様変更、バグ、なにか他にも入れるものがあるとか分かるなら聞きたかったんだが
仕方ない。ありがとう
4.8.1だと古くなってるかなと思って思い切って8.1.0で試してみてるんだけど戻すか

91 :デフォルトの名無しさん :2018/11/19(月) 01:03:24.61 ID:CKJwSX5SM.net
Web系言語界隈は条件演算子をif文の簡略表記()だの省略形()だの言ってる池沼も多いからなぁw

92 :デフォルトの名無しさん :2018/11/19(月) 01:16:02.93 ID:1op4u+BL0.net
>>90
まじめにやる気があるのなら、少しずつ上げて切り分けるのは簡単だろ。自分でやれよ。
ここで聞くより早いと思うぜ。

93 :デフォルトの名無しさん :2018/11/19(月) 01:26:41.23 ID:on7lyeKV0.net
else if の省略形は確かに頂けない
あれはperlからだっけか?

94 :さまよえる蟻人間 :2018/11/19(月) 01:28:26.32 ID:4H6R9aF+d.net
#elifはあって、elifがないのは変だが、キーワードを節約するためだから。

95 :デフォルトの名無しさん :2018/11/19(月) 01:30:10.27 ID:1op4u+BL0.net
>>93
歴史的には多分sh
70は多分python

96 :デフォルトの名無しさん :2018/11/19(月) 01:37:20.71 ID:DaKcZAfU0.net
>>92
なるほど、きざんでやってみます
ありがとうございます

97 :デフォルトの名無しさん :2018/11/19(月) 01:38:53.01 ID:+eaeK27e0.net
>>89
あー...もしかして自分の
>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は行わない
と伝わったのかな

それなら書き方が悪かった、申し訳ない

98 :デフォルトの名無しさん :2018/11/19(月) 12:18:16.63 ID:hiATcnIp0.net
>>94
自分もここが引っ掛かったんだよね。
プリプロセッサ向けにはelifキーワードがあるのに
コンパイラ向けにはない。
もしもキーワード数を節約したり実行速度のみを重視する実装なら
プリプロセッサ向けにもelifキーワードはなかった筈。
なのにある,ということはなにかしらタイプ数の節約とか読み易さとかを考慮してるんだろうね。
だからコンパイラ向けにelifキーワード(の紛い物)を追加するというのは何らおかしくないと思うのだが。

99 :デフォルトの名無しさん :2018/11/19(月) 13:17:22.86 ID:X/ZWPPJsx.net
そもそもC言語にはelse ifって構文はないよ。
んで、プリプロセッサは#の後をスペースなしの1語にした結果だと思う。

100 :デフォルトの名無しさん :2018/11/19(月) 13:27:56.02 ID:X6/A5UNDa.net
フリーフォーマットだからelse if(...)を自分なりに分かりやすくすれば良いだけ。

総レス数 1007
306 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★