◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C言語なら俺に聞け 145 ->画像>4枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1519046038/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん (ワッチョイ 9381-qput)2018/02/19(月) 22:13:58.98ID:9/te2eSJ0
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言語なら俺に聞け 144
http://2chb.net/r/tech/1514025223/

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

2デフォルトの名無しさん (アウアウエー Sadf-kYbg)2018/02/20(火) 02:33:02.25ID:ji3scNPMa
屑はFPGA用のCの話でもしたかったのかな

3デフォルトの名無しさん (ワッチョイ 5781-qput)2018/02/20(火) 02:44:25.94ID:m4PE5Z7I0
C言語の話題のみ取り扱います

4デフォルトの名無しさん (スッップ Sdbf-ytZF)2018/02/20(火) 14:09:01.08ID:/DCDJ0JEd
ptintfの%nはハッカー用に用意されているのでしょうか?

5デフォルトの名無しさん (ワッチョイ 9f02-T3WU)2018/02/20(火) 15:18:27.75ID:hfa6NjO10
違います
デジタル回路の設計用です

6デフォルトの名無しさん (アウアウエー Sadf-kYbg)2018/02/20(火) 17:08:35.47ID:mAwVhufea
0xがあるのに
0bがないので面倒っちい

7デフォルトの名無しさん (スップ Sd3f-HtAl)2018/02/20(火) 18:08:25.47ID:cb0RUbY/d
visual studioが重いからvisual studio codo使って勉強してますが、これでデバッグできる環境設定がネットのだとよく分からないんですがどうやってやれば出来ます?

8デフォルトの名無しさん (アウアウカー Sa6b-4grm)2018/02/20(火) 19:11:44.29ID:qvO4qxFaa
スレチだがVSが重い環境ってのが気になる

9デフォルトの名無しさん (ブーイモ MMbf-goL+)2018/02/20(火) 21:29:40.57ID:TNHwfC6jM
オトコは黙ってG・D・B

10 ◆QZaw55cn4c (ワッチョイ 9f60-qi38)2018/02/20(火) 21:56:11.61ID:SJPS4KKx0
>>9
gdb からは逃げ回っています、可能な限り printf() デバッグの方を選択します

11デフォルトの名無しさん (ワッチョイ 579f-+35F)2018/02/21(水) 00:51:16.84ID:srFoMZ/m0
そしてバッファリングされてしまうと

12 ◆QZaw55cn4c (ワッチョイ 9f60-qi38)2018/02/21(水) 00:54:55.04ID:jU0tYaxw0
>>11
fflush() は必ずペアで使いますよ、まあそれでも iostream<<と混在させるとぐちゃぐちゃになりますね

13デフォルトの名無しさん (ワッチョイ 579f-T3WU)2018/02/21(水) 03:09:16.23ID:srFoMZ/m0
ここはC言語のスレなので iostream の事は忘れてくれ。

14デフォルトの名無しさん2018/02/21(水) 07:13:52.97
setbuf(stdout, null);
setbuf(stderr, null);
しとけばいいじゃん

15デフォルトの名無しさん (アウウィフ FF9b-kYbg)2018/02/21(水) 10:46:31.37ID:zwuXHePGF
おそくなる

16デフォルトの名無しさん (スップ Sdbf-HtAl)2018/02/21(水) 10:56:41.04ID:t+c4IaP2d
変数宣言後に値を代入する前にprintfで表示させると数値がでてきますがこれは何の数値ですか?

17デフォルトの名無しさん (アウウィフ FF9b-kYbg)2018/02/21(水) 11:05:20.20ID:zwuXHePGF
メモリのなかみをprintfの書式で解釈したもの

18デフォルトの名無しさん (アウアウカー Sa6b-10N7)2018/02/21(水) 11:22:42.78ID:1i/dh69la
>>16
不定値

何が出てくるかわからない

19デフォルトの名無しさん (ワッチョイ d7b3-2H2M)2018/02/21(水) 16:26:52.49ID:aBAsvFL30
前に使ったデータの切れはし

20デフォルトの名無しさん (ワッチョイ ffea-eniV)2018/02/21(水) 16:52:48.64ID:JslMlxHn0
意味のある値を期待してはいけない謎の値
固定値か実行毎に変わるかも謎

21デフォルトの名無しさん (ワッチョイ 5781-qput)2018/02/21(水) 17:12:09.16ID:hxHF5FEW0
スカートめくりしてはいけないのと同じ、見てはいけない場所

22デフォルトの名無しさん (ワッチョイ 178a-h07R)2018/02/21(水) 20:06:03.04ID:N7GlfDUh0
グローバル変数とstaticなローカル変数はその変数の型によって決められている値(0や0Lや0.0など)で初期化される
staticでないローカル変数(殆どはこれ)の値は不定

23デフォルトの名無しさん (ブーイモ MM1b-goL+)2018/02/21(水) 21:09:11.08ID:enETD2EIM
なんで不定なの?

24デフォルトの名無しさん (ワッチョイ d7b3-eniV)2018/02/21(水) 21:11:25.31ID:eHdxbQfi0
定まった値を入れる手間すら惜しんでもいいようにしてるから

25デフォルトの名無しさん (ワッチョイ 1f9e-RFe/)2018/02/21(水) 21:53:04.93ID:XwEf5GYC0
Cで引数リスト部分が空の関数ポインタと構造体値渡しを↓のように組み合わせて使うのはNGですか?
#include &lt;stdio.h&gt;
long func(long a, char b, short c) {
 return a+b+c;
}
int main(int argc, char *argv[]) {
 long(*pfunc)() = func;
 struct {
  union {
   char a;
   short b;
   long c;
  } u[3];
 } param;
 param.u[0].a = 1;
 param.u[1].b = 2;
 param.u[2].c = 3;
 printf("%d\n", pfunc(param));
 return 0;
}

26片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-ZgEC)2018/02/21(水) 22:18:58.55ID:UifE8nP3d
>>25
関数の型が不一致。

27デフォルトの名無しさん (アークセー Sx0b-HN+l)2018/02/21(水) 22:55:45.50ID:04BHZTp/x
全くの初心者だがプログラム手に入れて動かしている。
最近はテトリスを動かした。C言語は学生の時に
挫折しているので高望はしていないが俺の時代よりも
学習環境も随分と楽になったもんだ。

28デフォルトの名無しさん (ワッチョイ 9f65-xWAm)2018/02/21(水) 22:56:32.48ID:9Zl2Px8M0
昔はLSI-Cくらいしか無かったからな

29デフォルトの名無しさん (ワッチョイ 97b3-T3WU)2018/02/21(水) 23:28:19.69ID:J5LO2Gvl0
[] [[[ [[ [] ][ [] [ ] [] ][]] [[[ [] }

30デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/22(木) 00:28:06.89ID:rOhp+nuf0
>>25
NGっていうか、それ普通にダメだよね。型が一致しないし。
まあ、Cコンパイラの実装によってはうまいことスタックに積まれて a, b, c が意図した通りに伝わるのかも知れないが、
しかしそれは実装依存だ。同じコンパイラ使っても最適化したら違う結果になるんじゃないだろうか。

31デフォルトの名無しさん (ブーイモ MMed-g8a7)2018/02/22(木) 00:37:40.47ID:Tb8t5xzSM
>>27
ロードランナー本を手に入れるんだ

32デフォルトの名無しさん (アウアウカー Sa18-7gJ+)2018/02/22(木) 01:29:12.41ID:G3RQleyza
不定でバグ起きるコード書くなんてふてぇ野郎だ

33デフォルトの名無しさん (ワッチョイ 2f93-IXLF)2018/02/22(木) 06:13:33.98ID:WzMowRZZ0
>>25 >>30
引数リストが空の場合に「引数を持たない関数」ではなく
「引数の整合をチェックしない関数」と解釈する、
古いCでの動作を期待してるんじゃないかな。一応は規格準拠のはず。
コンパイルオプションでの規格指定がモロに影響する部分かも。

構造体を値渡しで引数にするとき、単純型とは異なるスタックの使い方をする
可能性があるから期待とおりに動くかもしれん、動かないかもしれん、だな。

仮に各要素をスタックに積む場合でも、単純型の並びとは逆順に
スタックに積まれる可能性もあるんじゃないか。

3433 (ワッチョイ 2f93-IXLF)2018/02/22(木) 06:16:17.25ID:WzMowRZZ0
すまん、上の書き込みは >>25 の質問に対する >>26 >>30 へのコメントだ。
なんだか混ざってしまった。

3533 (ワッチョイ 2f93-IXLF)2018/02/22(木) 06:49:26.50ID:WzMowRZZ0
たびたび申し訳ない。

引数リストを書かない関数定義/宣言 func() は
どのCでも func(void) とは解釈されないんだっけ?
C99で将来廃止予定という情報は見つかったけど、まだ廃止されてないか。

36デフォルトの名無しさん (ワッチョイ d061-POFq)2018/02/22(木) 11:30:56.06ID:bU9JilnM0
ウインドーズのコマンドラインオプションで記号が{があると
ダブルクオートで囲んでもこの記号の前で引数がおわってしまうんですけどなぜでしょうか?
リナックスではそうはなりませんでした、{の前にエスケープ文字\を置くとうまくいきました。
なぜこうなるのか教えてください。調べてもわかりませんでした。

37デフォルトの名無しさん (ワッチョイ c2f9-2orQ)2018/02/22(木) 11:45:12.93ID:mvuupCVs0
>>36
それはC言語の範疇ではないよ。
windowsのコマンドプロンプトやLinuxのシェルとかを調べるといいかも。

38デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/22(木) 12:10:34.27ID:rGSqnyaQ0
>>36
具体的にどういうプログラムやコマンドでどういう操作をしてそういう現象が起きたのか、手順を一通り書いてみて
ひょっとして自作のCプログラムでそうなったとか?

39デフォルトの名無しさん (ワッチョイ d061-POFq)2018/02/22(木) 12:18:26.14ID:bU9JilnM0
自作のプログラムでやりました。
具体的に書くとa "abcd{efghijk"みたいにコマンドをじっこうすると
メイン関数のおぷしょんをしらべるとabcdしか入っていませんでした。

40デフォルトの名無しさん (ワッチョイ 2f93-IXLF)2018/02/22(木) 13:37:57.37ID:WzMowRZZ0
>>36
自作コマンドにコマンドライン引数が渡る前に何者かが横取りするんだな。

Windowsのバージョンとか、コマンドプロンプトの種類とか、
Cコンパイラの種類を書くと情報が集まりやすいかも。

41 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/22(木) 14:12:50.33ID:Ee7revq90
>>36
これで試してみて
こちらでは現象を再現できない
https://ideone.com/CZGZae

42デフォルトの名無しさん (ワッチョイ c667-x4Or)2018/02/22(木) 14:16:59.02ID:qwLRFwLN0
>>39
gcc (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 7.2.0
Microsoft Windows 10 Pro 10.0.16299 N/A ビルド 16299
→ 再現せず

43デフォルトの名無しさん (ワッチョイ 969f-hFc/)2018/02/22(木) 15:22:35.73ID:Fv+tpfSs0
関数の宣言とプロトタイプは別物

44デフォルトの名無しさん (ワッチョイ 3fb3-a3bs)2018/02/22(木) 15:51:29.29ID:ejK712YH0
>>39
コマンドシェルの都合か コンパイラのランタイムの都合か
環境(使ってるコンパイラ 実行環境:コマンドラインからなのかデバッガーからなのか etc) に
委ねられてるかんじだな

45デフォルトの名無しさん (ワッチョイ d061-POFq)2018/02/22(木) 15:56:19.77ID:bU9JilnM0
ありがとうございます。
シェルを変えたらできました。

46デフォルトの名無しさん (アウアウカー Sa0a-V6cO)2018/02/22(木) 16:30:38.85ID:GyUXMKgfa
>>45
シェルって?何から何に変えたの?

47デフォルトの名無しさん (ワッチョイ d061-POFq)2018/02/22(木) 16:57:56.68ID:bU9JilnM0
eshellからmsys2に付属のやつに替えますた

48デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/22(木) 17:29:33.80ID:rGSqnyaQ0
>>47
それを先に言わないと
一番肝心のことじゃないか・・

49デフォルトの名無しさん (アウアウカー Sa0a-V6cO)2018/02/22(木) 17:31:08.76ID:4gldXmu7a
>>47
eshellは{}に特殊な意味がある。
それはeshellコマンドの実行結果に置き換えられる。(shのバッククオートと似ている)。

50デフォルトの名無しさん (ワッチョイ fc9b-x0lN)2018/02/22(木) 21:33:01.57ID:7WUP8gc30
スロットゲームを作成しようと思っていろいろサイト見てるんですけど、数字の1〜9を順番にループ表示ってどうやるんですか?

51片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-tk4l)2018/02/22(木) 21:36:38.38ID:bw7NPixRd
>>50
0〜9、そして0が描かれた画像を表示部分だけをクリッピング(切り抜き)して、回転させてアニメーションする。

5225 (ワッチョイ 749e-2pQG)2018/02/22(木) 22:38:43.81ID:tV4J1Ww80
>>26 >>30 >>33
コメントありがとうございました。
狙いは>>33に書かれてる通りで、>>25のコードもMinGWのgccでコンパイルが通って
実行結果も期待通りだったことから大丈夫なのかなと思ったのですが・・・。

そもそも古い書き方で、将来無くなる予定(ってC99の6.11.6に書かれてるんですね)との
ことですので止めておきます。

53デフォルトの名無しさん (ワッチョイ 969f-7+Pf)2018/02/23(金) 01:55:49.74ID:UgOkn/Bq0
int main(void), int main(int, char**) どちらも ok なのだか
int (*pfunc)()のような書き方はなくならないと思う

54デフォルトの名無しさん (ワッチョイ 1549-x4Or)2018/02/23(金) 06:00:42.07ID:lIelkvwO0
関数ポインタにvoid*的な総称ポインタはねえぜ

55デフォルトの名無しさん (ワッチョイ 2f93-IXLF)2018/02/23(金) 07:59:19.70ID:Ska5zxPe0
long(*pfunc)() = func; の行がエラーになるのか。
long(*pfunc)(long, char, short) = func; なら通る。

「longを返す関数なら何でも入れられる関数ポインタの変数」てのが
認められないのね。

56デフォルトの名無しさん (ワッチョイ ba12-SJjx)2018/02/23(金) 08:06:24.83ID:c0IwYAH60
良く考えると関数用の汎用ポインタが無いのはおかしい

57デフォルトの名無しさん (ワッチョイ 1549-x4Or)2018/02/23(金) 10:50:05.99ID:lIelkvwO0
無理だよ
仮引数の違い=スタック構造の違いなんだから

58デフォルトの名無しさん (スップ Sdc4-7IFu)2018/02/23(金) 12:07:23.73ID:fgXllc68d
gcol(rcol & 0xFF , & gcol & 0xFF ,
bcol & 0xFF)

これの意味を教えてください。

59デフォルトの名無しさん (スップ Sdc4-7IFu)2018/02/23(金) 12:08:21.32ID:fgXllc68d
>>58
gcolor(rcol & 0xFF , & gcol & 0xFF ,
bcol & 0xFF)

これの意味を教えてください。

60デフォルトの名無しさん (ブーイモ MM5a-g8a7)2018/02/23(金) 12:15:11.26ID:uhME+YqbM
>>57
呼出側が責任持つのがc流で、だから可変引数が実装出来る
って習ったんだが、最近は違うのけ?

61デフォルトの名無しさん (ワッチョイ c361-MTlB)2018/02/23(金) 12:18:14.88ID:0SE2Ag1M0
>, & gcol & 0xFF ,
間違ってるような気がするけどな。
変数/関数名からRGB値取ってるだけに思えるし。

62デフォルトの名無しさん (ワッチョイ 5e8a-1Hnx)2018/02/23(金) 12:27:00.80ID:yhtAX1ye0
呼出し側の引数や戻り値の扱いを規定するのは呼出規約
x86/x64上のC言語ではcdeclが一般的だけど組み込み系の処理系の一部には独自実装のものもある
https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84

63デフォルトの名無しさん (スップ Sdc4-7IFu)2018/02/23(金) 12:36:44.19ID:fgXllc68d
>>61
それは変数宣言で
rcol gcol  bcol =64です。
&16進数なのはどうしてですか?

64デフォルトの名無しさん (ワッチョイ 1549-x4Or)2018/02/23(金) 13:51:39.54ID:lIelkvwO0
>>60
可変引数?
void func(double);
void (*ptr)() = func;
ptr(1); //1.0で渡すべきところ1が渡される
void func(double arg) //スタック構造の不一致が起きる
{
//全然関係ねえだろ
}

65 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/23(金) 14:15:00.31ID:mpvgXBL20
>>63
8 bit 幅分だけ &(and) 演算子で切り取っているのではないですか?

66デフォルトの名無しさん (ワッチョイ 2a23-x4Or)2018/02/23(金) 14:21:37.49ID:vnQpXFI50
>>60
可変引数なら可変引数として書かないとだめでしょ

67 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/23(金) 14:22:41.05ID:mpvgXBL20
>>55
なるほどねえ
https://ideone.com/hVdYWa

68デフォルトの名無しさん (ブーイモ MM5a-g8a7)2018/02/23(金) 14:35:58.87ID:uhME+YqbM
>>64
そうか、良かったな。

所で、最近はそういうのも可変引数って言うように
なったのか。varargs.hは廃盤か。

69デフォルトの名無しさん (アウアウカー Sa0a-sySv)2018/02/23(金) 14:59:14.82ID:0k9d4/ABa
>>63
君が何を言っているのかよくわからない。

70デフォルトの名無しさん (ワッチョイ 1549-x4Or)2018/02/23(金) 15:09:04.10ID:lIelkvwO0
>>68
あれが可変引数?
俺は全然関係ねえだろって書いたんだが

71デフォルトの名無しさん (ワッチョイ c361-MTlB)2018/02/23(金) 15:44:15.83ID:0SE2Ag1M0
ID:fgXllc68d は必要な情報書かな過ぎ。

72デフォルトの名無しさん (ワッチョイ d0ea-a3bs)2018/02/23(金) 15:47:17.83ID:V7qyvSbE0
可変個引数は va_start() するときに番兵となる引数が必要なので
最低でも1個は固定の引数が欲しいんだよね
func(int , ...) とかになる

73デフォルトの名無しさん (アウアウカー Sa0a-sySv)2018/02/23(金) 16:06:00.23ID:0k9d4/ABa
可変長引数なんて認めなければよかったのにな。
またはJavaみたいにシンタックスシュガーにしておいて実は配列に変換して要素数と共に渡すみたいにしておけばもっとましな感じになったのに。

74デフォルトの名無しさん (ワッチョイ 1549-x4Or)2018/02/23(金) 16:43:48.45ID:lIelkvwO0
Bの頃からあったprintfの実装テクニックだし
だいいちCは簡潔さを売りにしてたんで
理想論に走って複雑さを増すようなことを嫌ったんだよ

75デフォルトの名無しさん (ブーイモ MMfd-g8a7)2018/02/23(金) 16:48:19.38ID:yeKpu5OYM
>>72
せやな。
で、func(int,....) な関数ポインタは作れるよね。
それを汎用的に使うことは出来る。ってのが56への回答じゃね?

76デフォルトの名無しさん (ワッチョイ 1549-x4Or)2018/02/23(金) 17:03:04.90ID:lIelkvwO0
void func(int, double);
void (*ptr)() = func;
ptr(1, 1); //1.0で渡すべきところ1が渡される
void func(int top, double arg) //スタック構造の不一致が起きる
{
va_list ap;
va_start(ap, top);
assert(va_arg(ap, double) == arg); //通るわけねえだろ
va_end(ap);
}

77デフォルトの名無しさん (ワッチョイ d0ea-a3bs)2018/02/23(金) 17:11:03.17ID:V7qyvSbE0
>>75 いいや ポインタだけじゃ片手落ち
(キャストじゃだめで)関数の実体側の引数も同じ引数で実装しなければならない

78デフォルトの名無しさん (ワッチョイ 969f-hFc/)2018/02/23(金) 17:26:46.79ID:UgOkn/Bq0
スタートアップは argc,argvをスタックに積んで _mainを呼ぶ
_mainが int main(void)だとしても問題ない

7955 (ワッチョイ 2f93-IXLF)2018/02/23(金) 17:49:49.55ID:Ska5zxPe0
>>67 はエラーなくコンパイル・実行できてるようだから、もう少し検証。
ideone.com でなくローカルのgccで実験。

どうやら func() 定義の引数リストに制限があるみたい。
void f(double x) ... エラーなし ( >>67 の例と同じ)
void f(int x) ... エラーなし
void f(void* x) ... エラーなし
void f(char x) ... 警告:「互換性のないポインタ型」
void f(short x) ... 警告:「互換性のないポインタ型」
void f(float x) ... 警告:「互換性のないポインタ型」

警告は void (*pfunc)() = f; の行で発生。
実引数の自動拡張よりも狭い幅の仮引数の型を使おうとすると警告かな?
コンパイラによって動作が異なる部分で、深追いする価値は無いのかも。

80デフォルトの名無しさん (ブーイモ MMfd-g8a7)2018/02/23(金) 18:00:16.52ID:yeKpu5OYM
>>77
78が正解。更に言えばmainの引数には envp もある

81デフォルトの名無しさん (ワッチョイ 969f-hFc/)2018/02/23(金) 18:25:51.38ID:UgOkn/Bq0
envpはANSI C 標準に対する Microsoft の拡張機能
https://msdn.microsoft.com/ja-jp/library/k104fy6h.aspx

82 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/23(金) 18:42:59.00ID:mpvgXBL20
>>81
posix にもある、推奨されているわけではないが

8355 (ワッチョイ 2f93-IXLF)2018/02/23(金) 19:10:50.73ID:Ska5zxPe0
補足というか訂正。
>>55 で「long(*pfunc)() = func; の行がエラーになる」
と書いたけど警告だった。よって >>25 のソースもコンパイル可能。

ちなみに結果は期待の 6 とは桁違いのデカい数値だった。

84デフォルトの名無しさん (ブーイモ MM5e-1x+Q)2018/02/23(金) 20:24:30.86ID:mFkXyQ34M
void*でええやん

85デフォルトの名無しさん (アウアウウー Sa83-x4Or)2018/02/23(金) 21:15:05.64ID:JKrDz8Gza
 ヘ_ヘ
ミ・・ ミ
(   )〜

86デフォルトの名無しさん (ワッチョイ 3fb3-a3bs)2018/02/23(金) 21:32:39.13ID:my0767Fs0
void から ヘミ猫 て fj かよ

87デフォルトの名無しさん (アウアウウー Sab5-Oo+E)2018/02/24(土) 00:57:58.46ID:ar5NnKGja
>>83
>>25の書き方そのままじゃlong aの部分しか渡されてないからb, cは不定値になってるのでは?

88デフォルトの名無しさん (ワッチョイ 2f93-IXLF)2018/02/24(土) 06:40:32.39ID:agv5rOmv0
>>87
param には「long幅の共用体3要素の配列」が含まれるから、
値渡しすればスタックに (sizeof(long) * 3) byteのデータが積まれるはず。

というか、main()でparamの各要素をlong解釈で表示させたら
見事にaやbの上位ビットにゴミが入っていた。

89デフォルトの名無しさん (ワッチョイ 749e-2pQG)2018/02/24(土) 09:43:12.88ID:uX3sJRXI0
structにstaticつけ忘れてましたとか

90デフォルトの名無しさん (アウアウウー Sab5-Oo+E)2018/02/24(土) 15:58:01.09ID:dhHE2VyNa
>>88
> 各要素をlong解釈で表示させたら見事にaやbの上位ビットにゴミが入っていた。
それは初期化の問題では?

確かに値渡しはスタックにコピーされるけど、関数の引数にはもう一回コピーはいるから、そこで関数不一致の弊害が発生すると思う
>>25のコードそのままだとaしか正しく渡されてなくて、b,cは明後日の方向からデータ取ってきてるかと

9188 (ワッチョイ 2f93-IXLF)2018/02/24(土) 16:57:25.47ID:agv5rOmv0
>>88 に「期待の6」と書いたせいで誤解させてしまった。
もちろん実際の動作で6が表示されると思っていたわけじゃないのだ。
この流れの発端の質問 >>25 と、それに追加された >>52 の、
「実行結果も期待通りだった」て記述を受けての「期待の6」でね。

むしろ共用体への代入で、
 param.u[0].a = 1; // charの代入 byte転送命令
 param.u[1].b = 2; // shortの代入 word転送命令
 param.u[2].c = 3; // longの代入 dword転送命令
てな具合にアセンブルされ a, b の上位ビットに未初期化のゴミが残り、
関数に実引数の値として渡されるときもゴミごとコピーされるのは当然。
>>52 で期待通りに動いたのは、paramの未初期化での状態が
たまたま全部ビットで0だったんだなぁ、というお話。

>>25 のリストで、関数 func() の仮引数 a, b, c の型と、
共用体の要素 a, b, c の型が食い違ってる点にも注目して頂きたい。


…長々と失礼。誤解の余地なく説明しようとするとクドくなってしまう。

92デフォルトの名無しさん (スップ Sdc4-7IFu)2018/02/24(土) 18:41:41.80ID:7mL/bBDwd
#include <stdio.h>
#include <string.h>
#define BUF_SIZE 80

void* my_realloc( void* p, size_t bytes, int line ) {
if( (p = realloc(p, bytes)) == NULL ) {
fprintf(stderr, "realloc failure called at line %d\n", line);
exit(EXIT_FAILURE);
}
return p;
}
int main () {
FILE *fp;
char *file = "data.csv";
char buf[BUF_SIZE], input[BUF_SIZE], format[20];
char **result, *s;
int i, size = 50, count = 0;

if( (fp = fopen(file, "r")) == NULL ) {
perror(file);
exit(EXIT_FAILURE);
}
sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1);
scanf(format, input);

result = my_realloc(NULL, sizeof(*result) * size, __LINE__);

while( (fgets(buf, sizeof buf, fp)) != NULL) {
if( strstr(buf, input) == NULL ) continue;

93デフォルトの名無しさん (スップ Sdc4-7IFu)2018/02/24(土) 18:42:06.22ID:7mL/bBDwd
s = my_realloc(NULL, strlen(buf) + 1, __LINE__);
strcpy(s, buf);
result[count++] = s;
if( count >= size ) result =my_realloc(result, sizeof(*result) * (size += 20), __LINE__);
}

for( i = 0; i < count; i++ ) {
printf(result[i]);
free(result[i]);
}
free(result);

return 0;
}

94デフォルトの名無しさん (スップ Sdc4-7IFu)2018/02/24(土) 18:45:40.89ID:7mL/bBDwd
上記のコードから追加でしたいことが2つあります。
@検索単語を2つにしたい。
Aフォルダないの全ての.csvファイルを検索かけたい。

sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1);
scanf(format, input);

result = my_realloc(NULL, sizeof(*result) * size, __LINE__);

ここの文の意味が分かりません。

95片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-uTGm)2018/02/24(土) 21:35:03.63ID:h1W1dcA8d
>>94
クソコードだ。あまり参考にせず、自分で考えた方がいい。
my_reallocはreallocをラップした関数形式マクロのようだ。リファレンスのreallocを参照。
__LINE__は現在の行番号を表し、デバッグなどに使う。
sprintfはprintfを文字列出力にしたものだ。%%は%になって出力される。

96片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-uTGm)2018/02/24(土) 21:47:22.04ID:h1W1dcA8d
sprintfで出力した文字列をscanfに書式として渡している。でもこのようなscanfの使い方はオススメできない。

97片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-uTGm)2018/02/24(土) 21:56:26.92ID:h1W1dcA8d
%dは整数を表す文字列になるので、%%%dsは%(何らかの整数)sになる。これは文字列出力の幅指定だ。
幅指定には、別の直接的な方法があるので、こんなことしなくてもいい。
scanfの使い方は引数の個数がちょっと間違っているように見える。

98片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-uTGm)2018/02/24(土) 21:59:21.39ID:h1W1dcA8d
バグや不具合の元になるscanfなんて使うな。fgetsとsscanf使えば充分で分かりやすくて確実だ。

99デフォルトの名無しさん (ブーイモ MM5e-1x+Q)2018/02/24(土) 22:25:03.02ID:tEhbLaK5M
>>94
@else ifでええやん
Areaddirでええやん

myreallocみたいなモンはマクロにしとけ
reallocみたいな糞ライブラリ使うな
sprintfみたいな糞ライブラリ使うな

100デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/24(土) 22:45:22.29ID:PDjCLuF50
特定のフォルダ(dir)内のファイルを順次処理したいときは
Unix系ならばopendir()、readdir()、closedir()を使う。
VCならばFindFirstFile()、 FindNextFile()、FindClose()を使う。

101 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/24(土) 23:27:16.76ID:yWQ45jBy0
たしかに realloc() はいろいろまずいところがあって、
一番悪いのは、やり直しができない、ということ

102デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/24(土) 23:34:03.13ID:PDjCLuF50
一致した行をそのままファイルに書き出す方が簡単な気がする

103デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/25(日) 01:42:29.02ID:XjF3qDop0
>>99>>101
え? realloc() が糞?じゃあ malloc() で確保したメモリ領域の大きさを変えるのは何を使えばいいの?
自分で確保し直して中身を自分で全部コピーしろと?

104デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/25(日) 01:43:39.45ID:XjF3qDop0
>>101
てか、やり直しができないってどういう意味?幾らでもできると思うが。

105デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/25(日) 01:50:49.81ID:I4H7O+d10
1バイトでもメモリ消費量を節約する事が求められた世代と
湯水の如く無尽蔵にメモリが使える世代のバトルが始まる?

106デフォルトの名無しさん (ワッチョイ df9f-IDeO)2018/02/25(日) 03:25:39.33ID:XjF3qDop0
>>105
そういうことなの?w

107デフォルトの名無しさん (ワッチョイ 2f93-IXLF)2018/02/25(日) 06:04:48.57ID:Jqo0wCIZ0
>>92 >>94
sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1);
の行では input[BUF_SIZE] で BUF_SIZE が80であることから
format[] に "%79s%*[^\n]%*c" (\nは改行コード) が格納される。
よって scanf(format, input); は scanf("%79s%*[^\n]%*c", input); の動作。
変換指定の "%79s%*[^\n]%*c" の意味や妥当性は別のお話。

>>96
scanf() の変換指定文字列を sprintf() で生成するやり方は
『プログラミング作法』(カーニハン&パイク)に載ってる。
BUF_SIZE の定義を変えたときにscanf()の変換指定の文字数指定部分も
自動的に追随させる便法(片方だけ修正忘れの防止)として、悪くないかと。

バッファサイズは固定なのに変換指定を動的に作るのは非効率だ、
という気持ちも分かるけどね。

108デフォルトの名無しさん (ワッチョイ 8a15-x4Or)2018/02/25(日) 07:37:51.66ID:HIxgC6KA0
片山氏はscanfがまともに使えず
自分のミスを道具のせいにする手合いか

109デフォルトの名無しさん (ブーイモ MM5e-1x+Q)2018/02/25(日) 08:49:08.43ID:vTPpNH4CM
>>103
そう
糞と言った理由は冪等性がないから
冪等性よりも結果整合性を重視するならrealloc使えば良いと思うよ

110デフォルトの名無しさん (ワッチョイ 2f93-IXLF)2018/02/25(日) 09:18:29.86ID:Jqo0wCIZ0
>>109 「冪等性がない」の意味を補足してくれまいか。
realloc()に冪等性がない、結果整合性はある、という意味が分からないのだ。

111デフォルトの名無しさん (ワッチョイ 3fb3-a3bs)2018/02/25(日) 09:35:20.85ID:miEl51/Z0
失敗したとき NULL を返しつつ 「引数で渡したポインタは開放されない」
あたりに引っかかりを感じてるんでない?

NULL 返すなら 引数で渡したポインタを開放しろと?
※ 使いにくいかもなぁ…

112デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/25(日) 11:58:37.90ID:XjF3qDop0
俺も意味がわからん。

113デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/25(日) 12:17:48.32ID:XjF3qDop0
>>111
それはメモリ確保に失敗してるんだから解放したらダメだよね。
自分で malloc() 使って新規にメモリ確保しようとした場合でも NULL 返されたら元の方は free() しないだろう。

114デフォルトの名無しさん (ブーイモ MM5e-1x+Q)2018/02/25(日) 12:28:06.03ID:vTPpNH4CM
>>110
結果整合性って言葉が悪かったな
reallocの機能を重視するなら使えば良いと思うよって書けば良かった

冪等性の意味が分からないならググってくれとしか

115デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/25(日) 12:33:20.87ID:XjF3qDop0
あ、もしや >>109 の言ってる冪等性がないって引数で渡したポインタとは違うポインタを返してくることがあるって意味?
あまりにも当たり前すぎて思いつかなかったが。

しかし malloc() の実装にもよるだろうがこれを許さないと効率は悪くなるのではないか?

116デフォルトの名無しさん (ブーイモ MM5e-1x+Q)2018/02/25(日) 13:13:10.59ID:vTPpNH4CM
>>115
そう
違うアドレスを返して初めて発現するバグをボケナスビがやらかしてから俺は戒律で禁じた
他にも初期化やアライメントの点もある

メモリ効率を重視するなら自分で管理構造作るべきだと思ってる

冪等性を最重視する俺はこのスレじゃ少数派みたいだからあまり気にせんでくれ

117デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/25(日) 13:20:16.07ID:L5EpKLxx0
>>115
× 効率は悪くなる
○ まともな実装は無理(ほぼ全ての場合に失敗する)

>>116
気持ちは分からんでもないが、
reallocはそれが仕様で、いやならstd::stringみたいにラップするしかない。

118デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/25(日) 13:22:50.04ID:I4H7O+d10
(流れが質問者を放置しているように感じる)

119デフォルトの名無しさん (ワッチョイ c2f9-2orQ)2018/02/25(日) 13:26:41.23ID:qARxqxts0
>>118
質問者の疑問を解決する事より自分の主張したいことに論点がシフトしちゃうのはよく見る光景だね。
質問スレでそれじゃダメだと思うが。

120デフォルトの名無しさん (ブーイモ MM5e-1x+Q)2018/02/25(日) 13:38:08.00ID:vTPpNH4CM
>>118>>119
確かにそうだな
俺は安価ついた分しかレスしないつもりだったけど、この話題についてはもう止めとく

スレ汚しすまんかった

121 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/25(日) 13:44:15.14ID:9iGYkY9C0
>>103 >>104
c++ には realloc() は取り入れられなかった

ちょっと例が悪いが
concat3(char *a, char *b, cha *c) 文字列a と 文字列b と文字列c を連結して文字列a に返す関数を書こうとする
ここで 2 回の realloc() を行うとする
1 回目の realloc() は成功するが、2回目の realloc() は失敗したとする
このとき「関数 concat3() が失敗したときは状態は不変、成功したときだけ状態を変更する」という原則を満たせない

我ながらちょっと例が悪いとは思うが、
realloc() を暢気に使っていると、エラー処理が一手ばったりになってしまう。

122デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/25(日) 13:49:23.19ID:L5EpKLxx0
>>120
俺はいいと思うぞ。
むしろ無理に「質問者様が神様だ」的にしたがるゆとりは死ねと思うが。

そもそも質問には回答つきまくってるし、質問者側が何らかの反応しないと話は進まないだろ。
流れも読めない癖に流れを主張するゆとりは殺すしかない。

123デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/25(日) 14:39:52.01ID:XjF3qDop0
なるほど。まあ確かに使い方や使い所を間違えればハマるものではあるな。

そういや以前 realloc() で渡すポインターがNULLではなくサイズの指定が0だとfree()されるってのでハマったことがあった。w

124片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-uTGm)2018/02/25(日) 14:51:26.22ID:nm5odapXd
ANSI準拠のreallocは、mallocとfreeの代わりになる。

125デフォルトの名無しさん (ワッチョイ 8a6e-x4Or)2018/02/25(日) 15:46:21.99ID:s5td7qK+0
未だにANSIの規格票を読んでる日本人いたのか

126デフォルトの名無しさん (ワッチョイ 6e23-Rch6)2018/02/25(日) 15:51:12.25ID:DMbXpP0c0
俺も読んでる

127デフォルトの名無しさん (アウアウカー Sa11-CD0d)2018/02/25(日) 15:59:51.76ID:NsuolzGja
未だにANSI使う理由って何だろう?

128デフォルトの名無しさん (ワッチョイ 8a6e-x4Or)2018/02/25(日) 16:00:08.18ID:s5td7qK+0
ISOではなくANSIか?

129デフォルトの名無しさん (ドコグロ MM02-Y1mi)2018/02/25(日) 18:48:53.57ID:bdk82RzyM
>>121
それはプログラムの組み方が悪いだけでrealloc()のせいじゃないだろ

130デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/25(日) 18:55:32.39ID:I4H7O+d10
>>121
最初から文字列3つ分の領域確保すれば良いんでないの?

131デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/25(日) 19:23:06.76ID:L5EpKLxx0
>>121
reallocではなく、自前でmalloc+memcpy+freeでやればいいだけ。
ただその前に、指摘されているとおり、
3つの「同時に変更される」生ポインタを掴ませるのが問題。
その場合には普通は一つの構造体に入れてそれ経由で使い、
「同時に変更される」という条件が外部に見えないようにする。(隠蔽)
勘違いしている奴も多いが、OOPは文法の話ではない。

132デフォルトの名無しさん (ワッチョイ 0637-rG1w)2018/02/25(日) 20:09:18.52ID:fbPK05Px0
reallocをmallocとmemcpyでやろうとするともとのメモリサイズわからずに詰まない?

133デフォルトの名無しさん (スップ Sdc4-7IFu)2018/02/25(日) 20:41:49.10ID:p0obWBJzd
結果何をどうすればいいんですか?レベルが高すぎて何を言ってるのかさっぱりです

134デフォルトの名無しさん (アウアウウー Sab5-Oo+E)2018/02/25(日) 20:48:37.39ID:Fc1MjilIa
だからreallocはいまいちって話なのでは?

>>132
malloc_usable_size, _msize

135デフォルトの名無しさん (アウアウウー Sab5-Oo+E)2018/02/25(日) 20:58:36.53ID:H8bVBKR7a
>>133
reallocに関してはひとまず気にしなくて良いかと

136デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/25(日) 21:15:09.00ID:I4H7O+d10
>>133
見つかった行の保持ってメモリー上でやりたいの?

137デフォルトの名無しさん (ワッチョイ fc9b-7IFu)2018/02/25(日) 21:58:18.03ID:EC2T/8ze0
>>136
別にこだわりがあるわけではないです。

明日やろうと思うので、調べるあたりこれ見とけとかあります?

138デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/25(日) 22:15:41.07ID:I4H7O+d10
メモリ上に保持しなくても良いなら、検索して見つかった行をそのままファイルに書き出してしまう方が簡単だと思う。
あと、どういう環境で実行するか分からないんだが、もしも正規現が使えるなら、それを利用する方が簡単だと思う。
複数のキーワードで探したいときは一括で指定できるし。

139デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/25(日) 22:23:36.04ID:L5EpKLxx0
>>137
1. grep/sedでおk
2. AWK/Perl/Ryby/Pythonでもおk
3. つかその用途でC使うとか正気じゃねえ。メモリ上でゴリゴリやるにしても普通はスクリプト言語。
4. それも分かっててC使う覚悟のある奴がここでこんなアホな質問する訳ねえ。>>138

140 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/25(日) 22:51:32.71ID:9iGYkY9C0
>>139
>用途でC使うとか正気じゃねえ。メモリ上でゴリゴリやるにしても普通はスクリプト言語。
その判断をするのには、一定の C での経験が必要だと思います
python なんかでやったほうがいい仕事をあえて C で書く経験はあったほうがいいでしょう

141デフォルトの名無しさん (ワッチョイ fc9b-7IFu)2018/02/25(日) 23:44:30.89ID:EC2T/8ze0
VBでは出来るんですがCの勉強をかねてトライしてます。
いろいろとありがとうございました!明日頑張ってみます!

142デフォルトの名無しさん (ワッチョイ aab3-Y1mi)2018/02/26(月) 11:24:56.97ID:0MjsGOBH0
>>132
メモリーサイズを知る必要はない
そもそも確保されてるサイズと strlen(a) が同じかどうかはわからんし

143デフォルトの名無しさん (ワッチョイ 66e1-imWJ)2018/02/26(月) 12:24:58.22ID:4Dp3S/v30
>>142
concat3とかいうQZのボケたろくでもない例のことは忘れろ

144デフォルトの名無しさん (ワッチョイ 8a05-x4Or)2018/02/26(月) 12:38:44.35ID:lxlU26hn0
>>132
メモリサイズは非公開というだけで、内部的には持っている
だからreallocの作者=mallocの作者が詰むことはない

それ言い出したらfreeも解放量わかんなくて詰むだろ

145デフォルトの名無しさん (ドコグロ MM36-Y1mi)2018/02/26(月) 13:29:20.63ID:zI4VKzz4M
>>143
お前は何を言ってるんだ?

146デフォルトの名無しさん (ワントンキン MMb8-Clm8)2018/02/26(月) 17:32:30.23ID:e+KVEn7XM
K&Rで説明されている筈なんだが

147デフォルトの名無しさん (スップ Sd00-7IFu)2018/02/26(月) 17:41:14.36ID:vVA9DKIbd
結果出来ませんでした...

148デフォルトの名無しさん (ワッチョイ 0637-rG1w)2018/02/26(月) 20:20:31.75ID:4PPe6ndQ0
>>144
reallocの作者がmallocの作者と違う場合なんだが

149デフォルトの名無しさん (アウアウカー Sa0a-sySv)2018/02/26(月) 20:38:25.45ID:9Qy36xi2a
違うかなあ?まあ、ソース公開されてれば違う人が書くことは楽だが。

150デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/26(月) 22:00:57.86ID:Z8+ASG310
>>147
どの辺がどうできなかったかを書いてみて

151デフォルトの名無しさん (ワッチョイ 8a05-x4Or)2018/02/26(月) 22:08:57.21ID:lxlU26hn0
>>148
俺は、それを空想論と断言してみる
おまえさん恥をかかせてくれることはできるかな?

152デフォルトの名無しさん (ワッチョイ fc9b-7IFu)2018/02/26(月) 23:37:18.28ID:Il2cKkTC0
>>150
単純に自分でやってみようと思い一から書き始めたんですけど

CSVファイルのカンマ区切りで、行は日々増える形式で、13列の固定。それぞれ数字だったり文字だったり混合。
ファイルを開いて読み込んで一行ずつ検索文字列と比較して一致したら表示列を指定して表示させ、一致しなかったら次へを繰り返していこうと思って始めたんですけど。
配列に入らずうまいこといきませんでしたね。ネットの参考もいいのが見つからなくて...

前載せたコードを読みといた方が近道ですかね?

153デフォルトの名無しさん (ワッチョイ c2f9-2orQ)2018/02/26(月) 23:49:55.49ID:KRl4xBEA0
>>151
もともと標準mallocやfreeを使って自前realloc作るならという話の流れだっただろ

154デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/26(月) 23:57:50.74ID:Z8+ASG310
>>152
CSVファイルを読み込むプログラムは作った事ありますが
CSVの仕様をどの位受け入れるかで複雑さも変わると思います。
この辺は汎用的に作るか、自分が処理したいCSVの仕様の範囲にするかで違うとは思います。

scanf系の処理はとても癖が強く、
よっぽど仕様に精通していないと填まります
私ならその道を行くのはやめます

155デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/27(火) 00:01:01.54ID:uYnnRgds0
>>152
grepでおk、マジで
そんなことをCでやる馬鹿はいないから、ろくな参考情報がないのも当たり前。

156デフォルトの名無しさん (ワッチョイ 3fb3-a3bs)2018/02/27(火) 00:04:33.43ID:vDZ6bRaj0
"と , のエスケープと 1要素の中に改行を含む文字列周辺 RFCみて頭いたくなった

157デフォルトの名無しさん (ブーイモ MM5a-1x+Q)2018/02/27(火) 00:13:39.83ID:euQ4hghrM
>>152
俺なら間違いなくpythonつかうね
https://qiita.com/okadate/items/c36f4eb9506b358fb608

158デフォルトの名無しさん (アークセー Sx5f-jcVR)2018/02/27(火) 07:16:02.83ID:pdRg+OHax
配列とかポインタとか難しいと聞いていたから心配していたけど
とりあえず基礎の解説書レベルなら分かった。やれやれ。

159デフォルトの名無しさん (ワッチョイ 7c8a-Clm8)2018/02/27(火) 09:21:35.76ID:uskldtVs0
指定したサイズの2次元配列を確保する関数を設計してくれまいか?

160デフォルトの名無しさん (ワッチョイ 8a32-x4Or)2018/02/27(火) 10:07:05.72ID:XfJ/ct090
>>159
無理じゃね?
char (*dim_alloc(size_t width, size_t height))[width];
最後の[width]がエラーになる[*]にしてもあかん
[]にすると通るには通るが、今度は
char (*a)[3][4] = dim_alloc(3, 4); //型の不一致になる

161デフォルトの名無しさん (ワッチョイ 8a32-x4Or)2018/02/27(火) 10:08:23.25ID:XfJ/ct090
あ、失礼
char (*a)[4][3] = dim_alloc(3, 4);
結果は同じだけど

162デフォルトの名無しさん (ワッチョイ 8a32-x4Or)2018/02/27(火) 10:55:55.07ID:XfJ/ct090
できた
void dim_alloc(size_t, size_t, char (**b)[*]);
int main(void)
{
size_t width = 3, height = 4;
char (*a)[width];
dim_alloc(width, height, &a);
}
void dim_alloc(size_t width, size_t height, char (**b)[width])
{
*b = (char (*)[width])malloc(width * height);
}
これならおk

163デフォルトの名無しさん (アウアウカー Sa0a-sySv)2018/02/27(火) 11:45:45.08ID:r7ed+pq5a
ポインタの配列使っちゃえばいいじゃん。free()する時注意が必要だがアクセスがa[y][x]形式なのは同じだし。

164デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/27(火) 11:48:09.27ID:w9pRJ3lK0
二次元配列とポインタの配列だと、使い方が違うでしょう

165デフォルトの名無しさん2018/02/27(火) 12:21:42.40
mallocされたサイズが分からんとか何言ってるの?
gccもVCも確保サイズを返す関数を提供してるだろ

166デフォルトの名無しさん (アウアウカー Sa0a-sySv)2018/02/27(火) 12:27:42.17ID:r7ed+pq5a
>>164
確保時と解放時が違うが読み書きアクセスする時の表現は同じにできる。

167 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/27(火) 12:30:04.09ID:CvenUVT40
>>159
gcc6 では一筋縄ではいかなくなっているね…

168デフォルトの名無しさん (ワッチョイ 8a32-x4Or)2018/02/27(火) 12:35:33.45ID:XfJ/ct090
>>165
非標準のね

169 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/27(火) 17:51:59.04ID:CvenUVT40

170 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/27(火) 18:02:32.91ID:CvenUVT40
>>162
>>159
>char (*a)[width];
これに値をいれないといけないし、そもそも、それも含めて malloc() してほしい、のでは

171デフォルトの名無しさん (アウアウウー Sa83-x4Or)2018/02/27(火) 18:07:21.76ID:BEzsaLeta
ああ。先頭にポインタを詰め込んで一発で全部free()できるようにしたのか。

172デフォルトの名無しさん (ドコグロ MM2e-Y1mi)2018/02/27(火) 19:24:56.97ID:LuvO3mbWM
>>165
非標準だし、そもそもそんなものを使う必要は滅多にない

173デフォルトの名無しさん2018/02/27(火) 19:27:39.38
>>168,172
上の方でmalloc作者じゃなきゃrealloc作れないっていう主張があったから、普通は処理系で専用関数を提供してるだろって話

174デフォルトの名無しさん (ワッチョイ 2f93-IXLF)2018/02/27(火) 19:47:16.45ID:jvpYfXKk0
>>159
わざわざ関数を設計しなくても、例えば3次元配列なら
int ary[dim_z][dim_y][dim_x];
int (*ptr)[dim_y][dim_x] = malloc(sizeof(int) * dim_z * dim_y * dim_x);
とやれば ary と ptr は同等に扱えないかな。

ptrはfree()する必要があること、sizeofの対象にしたとき同じ値を返さないことは
別関数を作っても同じだし。

175デフォルトの名無しさん2018/02/27(火) 19:54:46.22
>>159は二次元配列を確保とは言っているがインタフェースは特に注文ないんだからxとyと型サイズを掛けて(必要ならアラインメント考慮も入れて)mallocしてvoidポインタを返せばいいよな

176デフォルトの名無しさん (ワッチョイ 8a32-x4Or)2018/02/27(火) 20:35:43.21ID:XfJ/ct090
>>174
別関数を作っても同じとは思わないな
void dim_alloc(size_t, size_t, char (**)[*]);
void dim_free(size_t width, char const volatile (*head)[width])
{
free((void *)head);
}
dim_allocが内部的に割り付けに使っている手段を
dim_freeに隠蔽する意味はあるんだから

177デフォルトの名無しさん (ドコグロ MM2e-Y1mi)2018/02/27(火) 20:42:39.05ID:LuvO3mbWM
>>173
> 上の方でmalloc作者じゃなきゃrealloc作れないっていう主張があった
そもそもその主張がおかしいだろ

178デフォルトの名無しさん (アウアウウー Sab5-Oo+E)2018/02/27(火) 21:38:07.83ID:ejzPWrTva
>>177
だから、その主張はおかしいって話の流れだったろ

179デフォルトの名無しさん (アークセー Sx10-jcVR)2018/02/27(火) 23:15:01.44ID:7DMjjd1qx
テトリスのプログラムって難しい方なの?

180デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/27(火) 23:18:17.42ID:w9pRJ3lK0
そんなには難しくはないと思う
作る人がグラフィック処理を理解していて
キー入力のリアルタイム処理をこなせればね

181 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/27(火) 23:20:17.44ID:CvenUVT40
>>179
自分で組むためにはいろいろと段取りが必要で結構難しい部類になるかと思います
一時間で組む、とかいうやつも下準備はしてあったと思います

182デフォルトの名無しさん (アークセー Sx10-jcVR)2018/02/27(火) 23:26:02.43ID:7DMjjd1qx
PetiteTech にあるテトリス
ブロックパズルの作り方 だと これはどうなの?

183デフォルトの名無しさん (アークセー Sx10-jcVR)2018/02/27(火) 23:31:30.01ID:7DMjjd1qx
高校生ぐらいが無理なく取り組めるゲームプログラムって
無いですかね?もちろん初心者。

184デフォルトの名無しさん (ワッチョイ d023-MTlB)2018/02/27(火) 23:54:04.69ID:8YslYmAQ0
パズル系は楽そうに見えるけど、判定部分を作るのがキツいと思う

まずは固定画面でブロック崩し
次は横スクロール画面でスーパーマリオもどきぐらい

描画ライブラリを自作出来なかったら dxlib とかのフリーライブラリが使える
2Dに慣れたらUnityのフリー版で3Dゲーム作ってみるのもいい

185デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/28(水) 00:04:51.75ID:8c8qszi40
ここに来て何でこんなに初心者が沸いているのか分からんが、
スレ分けた方がいいんじゃないか?
というか、上級者用のスレがあったら紹介してくれ。俺がそっち行くから。


>>183
高校生なら学校の勉強しとけ。特に数学。

俺はゲーム畑ではないが、今ですらエンジンは統合されつつあり、
フレームワーク化は今後ますます進む。というか、そうならない理由がない。
そのとき、中途半端にCが出来ても使い物にならない。
ゲームプログラミングは上位のフレームワーク上の部分と
下位のゲームエンジンの部分に分離され、Cが担当するのは後者で、
当たり前のように座標を使いこなし、ゴリゴリにチューニングすることが求められる。

つっても通じないだろうが、多分高校生の考えるゲームプログラミングなら、
C#でunity使うのが今風なんじゃね?そっちやっとけよ。

186デフォルトの名無しさん (ワッチョイ d023-MTlB)2018/02/28(水) 00:42:29.18ID:QXjyWHPf0
そもそも枯れた技術のC言語スレで上級者なんているのかな・・・?

187 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/28(水) 00:49:49.08ID:8h6/NeTB0
>>186
>>159 をサクッと解ける人は上級者かもしれません、私は size(int)=sizeof(int *) を仮定していたために酷くはまりました

188デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/28(水) 01:07:30.80ID:8c8qszi40
>>186
むしろお前含めて一通りも使えない馬鹿が沸きまくっていることが問題だ。
それでも初心者は初心者同士で好きにやればいいが、
元々居た連中は逃げるしかない。

大体、>>184も間違いだ。
そもそもプログラミングすら出来ない奴がCから始めることが間違っている。
今は昔みたいにCしかない状況ではない。他に適した言語がいくらでもある。
だから「C初心者」は許容するとして、「プログラミング初心者」はお帰りください、でいい。
というか、それが本人の為だ。

「判定部分」は言語に依らない。
だから「判定部分を作るのがキツい」のなら、まずその程度簡単に出来るまで他言語で鍛えろ、でしかない。
それで、速度的に問題がある場合はそこをCに切り替えていくわけでさ。
(俺は使ったこと無いから推測だが、)普通の当たり判定ならエンジン側で当然持ってるだろ。
落ちゲーもそれなりの歴史はあるし、判定ルーチンがエンジンにあってもおかしくない。
そもそもテトリスの判定(一列埋め)が難しいという時点で論外だし。
お前は>>184が本人の為になるとでも思ってるのか?

高校生なら学校のお勉強しとけ、がよっぽどマシだろ。
そもそも高校生が2chするのが間違っていると思うし。

189デフォルトの名無しさん (アウアウカー Sa11-CD0d)2018/02/28(水) 01:09:56.20ID:3MQnmRRma
>>188
そんなに不満ならスレ立てれば良いのでは?
上級者が集まったらどんな話題が出るのか興味あります

190デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/28(水) 01:15:14.33ID:m1ANm8An0
上級者かそうで無いかは、どの辺で分けるの?
もしかして年齢?

191デフォルトの名無しさん (ワッチョイ d023-MTlB)2018/02/28(水) 01:20:42.25ID:QXjyWHPf0
ここにいる自称上級者の人達は、C++やC#なら標準で使える様な物を何で再発明しているんだろう?

ポインタ返すだけの関数だとメモリオーバーランが検知出来ないから業務では危なくて使えないし、
バッファへのポインタは別ソース内にstaticで隠蔽してintとかのハンドルだけ返して、
引数範囲チェック付きのget,setと、ハンドルでfreeする関数まで作らないと正解とは言えない

192デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/28(水) 01:45:42.72ID:8c8qszi40
とりあえず他の人の反応見て週末にでも俺が立てるよ。
テンプレは>>1踏襲だが、以下に変える予定。


スレタイ:C言語相談室
C言語の話題のみ取り扱います C++の話題はC++スレへ
上級者専用です。
10,000行程度のソースを取り扱ったことがない人は以下スレへどうぞ。
(このスレ)


>>190
Cなら10k行で切っても人数集まるんじゃないかな?と思っている。
ゆずって5k行くらいにしとくか?
或いはC++も混ぜとくか?C++スレも「上級者専用にしていいんじゃないか」って話も出てたし。
ポシャったけど。

>>191
そもそもそういう思想ではないし、C++やC#がいいと思うのならそれらを使えばいいだけ。
個人的にはC使いは無駄に頑張りすぎていて、
もうちょっと上手く手抜きをすることも覚えるべきだとは思うが、
わざわざCスレで「何回目だよそれ?」をぶちかますお前も頭おかしいと思う。

193 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/28(水) 01:53:16.04ID:8h6/NeTB0
>>192
1万行ですか…気が遠くなりますね…
こんなのなら書いたことがありますが…
https://code.hackerearth.com/431130T
https://code.hackerearth.com/7b7b82s

194デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/28(水) 01:54:28.86ID:ifAjmiIg0
作ったよ。

C言語上級者スレ
http://2chb.net/r/tech/1519750371/

195デフォルトの名無しさん (ワッチョイ df9f-x4Or)2018/02/28(水) 01:57:04.78ID:ifAjmiIg0
あ、ごめん。リロードしてなかった。そういうテンプレは入れてないな。
じゃあ俺の作った方は放置でいいよ。新しいのできたら削除依頼しとこう。

196デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/28(水) 02:06:17.61ID:m1ANm8An0
>>192
1CU1ソースって仕事を昔してた。
モジュール分割すら認めてないサイトだった
ソースはそれぞれ1万行越えてたな
最大2万行あったと思う

1日に600行書いたことはある
でも自分を上級者だとは思っていない
そんな自信はありません
書くソースは500行程度だな
どんなに詰め込んでも2000行が限界だわ

197デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/28(水) 02:13:49.37ID:8c8qszi40
>>193
これ何故コードに展開したんだ?何かの実験か?
それにしても意味があるとは思えないが。

さすがに手打ちとは思えないから、当然自動コード生成として、
その場合は入力は木データなのだから、歩くのが普通だろ。
100行程度で済む内容だと思うが。

198 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/28(水) 02:19:55.16ID:8h6/NeTB0
>>197
同じ課題についた別解答は次のとおりです
https://ideone.com/vNZWaH
まあこの程度の内容ではあるのです

199デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/28(水) 02:38:51.42ID:8c8qszi40
>>198
どういう課題かは知らんが、
データとして処理するべき案件をcase文にしてしまうという発想が間違っていると思うけどな。
普通は bool flags[6] でありなしを管理し、10行程度で書ける内容だぞこれは。

200 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/28(水) 02:47:13.06ID:8h6/NeTB0
>>199
ああ、それは説明が必要でしたね
確かにこの課題内容の「縛り」は理解不能でしたが、当時、それに知恵を絞った者も複数いたようです、宿題スレ、粘着の嵐でもう見る影もなく廃墟になってしまったんですが

課題内容
C言語で、
#include <stdio.h>

int main(void){
char n;
/*
ここを埋める。変数の新たな定義
や,printf,scanf以外の関数の呼び出しは禁止
*/

}
な場合で、
1から6までの数字をキーボードから最小で5回受ける
(同じ文字の入力や範囲外の文字の入力は
「無視しました」と出力)
残り一つの数字がわかる場合はキーボード入力
を待たずに決めてよい
最終的に、入力された順番とは逆順に入力
された文字を出力

201デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/28(水) 03:11:31.80ID:8c8qszi40
>>200
クソ問題はやるだけ無駄だぞ。
大体そういうのを考えた奴は実際はプログラマではないことが多い。
だからどういう事が実際に必要なのか分かってないのさ。
K&Rにしても禿本にしても、演習課題付けてくれてるだろ。あれをやる方が1万倍マシ。
或いはテトリスなりを実際に自分で作った方がいい。
少なくともそこでは「実際に必要なこと」しか要求されないわけでさ。

スタックを1バイトも使ってはいけない状態で、
展開したコードならどれだけ大きくてもいいとか、あり得ないよ。
スタックは128バイトまでな、とかならまだ分かるが。

202 ◆QZaw55cn4c (ワッチョイ ea60-MTlB)2018/02/28(水) 03:20:22.48ID:8h6/NeTB0
>>201
あはは…そのとおりですね
非常識・無常識でウケを狙ったりもして楽しかったんですが
今残っているスレとしては、ここが雰囲気が似ていますね
http://2chb.net/r/tech/1514772904/

C 言語の宿題に対して執拗に prolog で書いていた人もいました、いつも凄いとおもっていました

203デフォルトの名無しさん (ワッチョイ 969f-7+Pf)2018/02/28(水) 04:52:04.37ID:u7A4CcwO0
>>199 bool ?

204デフォルトの名無しさん (ワッチョイ d061-POFq)2018/02/28(水) 05:21:30.33ID:sJxURYwy0
普通の有限オートマトンやんな

205デフォルトの名無しさん (ワッチョイ 2a23-x4Or)2018/02/28(水) 08:56:58.23ID:57y2KSxK0
無限オートマトン ってどんななの?

206デフォルトの名無しさん (ブーイモ MMfd-m/r1)2018/02/28(水) 09:12:27.49ID:MJOJ5lH0M
状態数が有限じゃないってことだけど、解析できないし分類上も有用じゃないので、現実には扱わないよ

207デフォルトの名無しさん (ワッチョイ 1651-x4Or)2018/02/28(水) 09:52:53.28ID:eOQjYTv40
>>183
市販品=プロの作品を真似しようったってそんなの無理だ

必要なのはアイディアの発想力、つまり遊びのセンスだ
たとえばキーボードを壁に吊して射的ゲームとかなら
プログラム的には簡単だろ

208デフォルトの名無しさん (ワッチョイ 2f93-IXLF)2018/02/28(水) 11:17:44.41ID:A9USqIB/0
>>183
「ヒット・アンド・ブロウ」や「ハングマン」あたりかな。
乱数ベースの当て物に飽きたらテキストアドベンチャーに移行。
自然言語処理に至る。

…真に受けないでくれよ。

209デフォルトの名無しさん (アウアウカー Sa0a-sySv)2018/02/28(水) 12:31:00.24ID:ZStODBz1a
キーボードを壁に吊るしてって、斬新なアイディアだな。

210デフォルトの名無しさん (アウアウカー Sa0a-sySv)2018/02/28(水) 12:47:25.24ID:ZStODBz1a
そういや昨日秋葉に行ったらUSB接続で反対側が何にも繋がってないやつで、自分でスイッチ繋げて入力用の何かを自作できるっていうの売ってたな。(確か東映無線にあった)
一応ハードウェア工作を含んで尚且つOS経由でUSBからの入力をしなければならないが、キーボードを壁に吊るすぐらいでは飽き足らない人はやってみたらどうかな。

211デフォルトの名無しさん (アウアウカー Sa11-2orQ)2018/02/28(水) 14:13:55.34ID:nUmzOd5xa
>>186
グラフィカルなものとかアクション性のあるものとかは敷居が高いから、
まずはオセロや五目並べあたりをCUIで作ってみるのが取っつきやすいかな。

212デフォルトの名無しさん (アウアウカー Sa11-2orQ)2018/02/28(水) 14:15:02.50ID:nUmzOd5xa
>>186ではなく>>183だった

213デフォルトの名無しさん (ワッチョイ 749e-2pQG)2018/02/28(水) 20:10:01.78ID:DO+q01hP0
getch使ってザッザッザッザッザカリテ

214デフォルトの名無しさん (アウアウウー Sa83-x4Or)2018/02/28(水) 21:12:07.60ID:sIMYGGyya
cursesだな。

215デフォルトの名無しさん (ワッチョイ 0104-je3A)2018/02/28(水) 22:05:24.10ID:5kf5T6va0
テトリスとぷよはそんなに難しくなかったなぁ。
省メモリで作ると果てしなく大変だけど、富豪的に作れば大したことない。
オセロとかもそうやな。富豪的に作れば難易度は各段に下がる。

216デフォルトの名無しさん (ワッチョイ eff2-x4Or)2018/02/28(水) 22:10:23.35ID:LDTKKB+20
>>208
高校生というか中学生レベルかもしれんが、パソコン買ってBASICで最初に作る定番だな。懐かしい。
ヒット・アンド・ブロウ(マスターマインド)って簡単な割に意外と遊べるんだよな。
あとブラックボックスなんかも。

217デフォルトの名無しさん (ワッチョイ 0104-je3A)2018/02/28(水) 23:46:39.93ID:5kf5T6va0
対戦マスターマインドとか簡単で面白いカモな。
伏せられた一つの答えを解きあう感じの。
敵作る経験にもなるし。

218デフォルトの名無しさん (アークセー Sxdb-TGtH)2018/03/01(木) 00:11:06.23ID:Ajqb03Rpx
それぞれありがとうございます。ヒットアンドブロウって初めて聞きました。

確かに学校の勉強も大事ですね。数学検定準2も終わったので(多分合格)
中3・高1のメンバーですが。2級までの間、AO入試にプログラム使えないかと
思って(将来的にも使えるようにしたい)勉強し始めています。
(立命館のあいちゃれとか参加してみたいとか・・・)まあそんな感じ。

219デフォルトの名無しさん (アウアウウー Sa2b-m1UI)2018/03/01(木) 09:43:11.48ID:O9YoI3Ipa
>>216
BASICで・・・30年以上前の話かな・・・

220デフォルトの名無しさん (ワッチョイ 474c-m1UI)2018/03/01(木) 09:57:54.68ID:KMinam3V0
BASICか。。。
始めて作ったのは
敵がいないパックマンに
バック走行のレーシング

マシン語おぼえて任意方向のスクロールができるようになったら
ボスコニアンとかゼビウス

敵キャラはマシン語より難しい
完全にランダムな動きはすぐできるが
自機を狙ってくるやつの思考ルーチンは奥深い

221デフォルトの名無しさん (ドコグロ MM9f-9Bkh)2018/03/01(木) 13:15:16.58ID:vHclpfSxM
ハングマンはわりと簡単に作れてわりと楽しめるよ
英語の勉強にもなる(かもしれない)

222デフォルトの名無しさん (ワッチョイ 6793-fJrP)2018/03/01(木) 13:42:17.24ID:EAWoI55s0
>>220
「バック走行のレーシング」て発想はなかった。
俺は「風船を背負って縦穴を落下する」という設定だった。
…そういや、今のプログラム初心者は「とりあえずスター・トレック」で
ゲーム作り始めないのね。

真面目な話、BASICでINPUT命令を使うのに比べると
Cでユーザーからのキーボード入力を受け取るのは面倒なんだよね。
そのせいで同じネタでもプログラム課題としての難度がいくらか上がる。

223デフォルトの名無しさん (ワッチョイ 6704-PLqx)2018/03/01(木) 14:39:39.65ID:pSYCUqTH0
conio.hを発見して非標準に絶望するまでが一セット。
俺、発見するのに数年かかったんだぜ。
BASICで3日でできたことがなんでできんのじゃーって悶えたわ。

224デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/01(木) 15:52:58.39ID:AvQj/v1Qa
cursesライブラリの方が対応している端末が多くてほぼ標準なんじゃないかな

225デフォルトの名無しさん (ワッチョイ 474c-m1UI)2018/03/01(木) 16:10:34.41ID:KMinam3V0
非標準ておまえら。。。
// basic_like.h
int inkey(void);
こんなん一発作っときゃ終わりだろうがよ

226デフォルトの名無しさん (ワッチョイ 7fea-poP5)2018/03/01(木) 17:04:57.73ID:3FNdba4V0
自分の使ってるコンパイラの枠組みの中だけで実装できればまだいいんだが…
めんどくさいので既存のものを探すことにになる

227デフォルトの名無しさん (ワッチョイ df9d-wl/W)2018/03/01(木) 18:26:02.35ID:AzZlAoZA0
CよりC++使うべきでは?

228デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/01(木) 18:33:42.83ID:AvQj/v1Qa
今さらC++使う気にはなれないな

229デフォルトの名無しさん (アウアウエー Sa9f-NBPA)2018/03/01(木) 18:46:09.21ID:5P8YUW6ka
マスターマインドは
正解にたどり着くまでの
最短最速最適な質問の仕方
を次の一手で出すアルゴリズム考えたな
4列だったら最大7手未満とかそんなやつ

230デフォルトの名無しさん (ワッチョイ 6704-PLqx)2018/03/01(木) 21:26:58.79ID:pSYCUqTH0
>>224
ウインドウズで開発してるから、VCはconioもってるんだよな。
ただ、布教できなくて悶える。ソース配布できない。
GCCも持ってない環境あるからなぁ。

231デフォルトの名無しさん (ワッチョイ 6704-PLqx)2018/03/01(木) 21:28:15.90ID:pSYCUqTH0
マスターマインドのAIはダサいのは作ったことある。
正解にはたどりつけるけど、パーミテーションでグルグル回す奴だから回答がキモイ。
そして遅い・・・。

232デフォルトの名無しさん (ワッチョイ df5d-W8CT)2018/03/02(金) 05:26:58.29ID:btKfsNEv0
>>230
まあ、非標準だから仕方ない。そういうのは条件コンパイルとか、たくさんあるなら環境ごとに別のソースファイルにしてビルド時に選択とか。
そういうことをちゃんとやってるオープンソースソフトウェアが参考になるかも。

233デフォルトの名無しさん (ワッチョイ df52-m1UI)2018/03/02(金) 06:44:50.16ID:bNTu0vGw0
待機なしの1キャラ入力は標準に欲しいね

234デフォルトの名無しさん (ワッチョイ 078a-Jyeh)2018/03/02(金) 07:35:26.90ID:Ht5IxdGD0
日本語どうやって入力するんだ?

235デフォルトの名無しさん (ワッチョイ ff23-m1UI)2018/03/02(金) 09:02:00.75ID:7oxMlhUX0
>>225
にいさんむむむ でキーリピート解除

236デフォルトの名無しさん (ワッチョイ 679f-3iyT)2018/03/02(金) 22:53:07.31ID:PBdn8yjo0
>>192
立てた。

C言語相談室(上級者専用)
http://2chb.net/r/tech/1519998483

老害が来てもウザイので「10,000行程度のソースを扱えない人は」と現在状態に変更した。
上級者には一朝一夕では成れない。
初心者は文法事項にばかりに目が行きがちだが、
今日覚えれば明日から使える文法事項で練度を測るのはナンセンスだ。
これを含めて、意見については新スレで受け付ける。

>>195
削除よろ

237デフォルトの名無しさん (ワッチョイ 6704-PLqx)2018/03/02(金) 23:05:02.75ID:Wy5zsGfp0
>>234
UTF-8型というものはない。
wchar_tにウニコードかOSの文字コードが入ってることを期待しよう。
まぁ、stdinをgetchで読んで解析とかかな。またはfgetsで全部読むとか。
世知辛いのじゃー。

238デフォルトの名無しさん2018/03/03(土) 19:55:40.33
>>237
一定のchunk sizeでreadして1byteずつ解析やな

239デフォルトの名無しさん (ワッチョイ 6704-PLqx)2018/03/03(土) 20:06:25.92ID:B47zIri70
あ、そうか。
UTF-8って生バイトfreadしないといけないのか。
失念してた。

240デフォルトの名無しさん (ワッチョイ e79f-m1UI)2018/03/03(土) 20:54:25.83ID:usZqppoC0
>>236
削除依頼出して誘導の書き込みしておいた。

241デフォルトの名無しさん (アウアウウー Sa2b-OZjy)2018/03/04(日) 09:51:40.56ID:/AI+3Uf1a
おまいらってすごいね
C検定の1級とか余裕なんだろね

242デフォルトの名無しさん (ワッチョイ 7f5f-m1UI)2018/03/04(日) 17:53:13.34ID:9DD6RFWE0
いやいや、これでもISO/IEC 9899:2011のつまみ食いをしてるだけですよ
昔のCと違い、今のCは付き合ってらんないところが結構あるんで

243デフォルトの名無しさん (アークセー Sxdb-TGtH)2018/03/04(日) 23:51:40.13ID:8NE8Y0sUx
10,000行程度のプログラムで何ができるのか想像が出来ん。

244デフォルトの名無しさん2018/03/05(月) 00:51:13.54
10000行程度を書いた経験だろ

全体だと30万行とかだろ

245デフォルトの名無しさん (ワッチョイ 6704-PLqx)2018/03/05(月) 01:04:58.69ID:FpxBMBRn0
一プロジェクトで1万行はないな。趣味だから。
トータルならそれ以上書いてるけど。

246デフォルトの名無しさん (ワッチョイ e79f-m1UI)2018/03/05(月) 01:26:13.77ID:LCMEVuoA0
>>241
それってここに書いてある一級?
https://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%83%BD%E5%8A%9B%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93
だったら特に検定受かってなくてもそういう人だらけじゃないかな。

247デフォルトの名無しさん (ワッチョイ e79f-m1UI)2018/03/05(月) 01:35:06.01ID:LCMEVuoA0
一万行ねえ。しかしあまりに行数が多くなるとするとC言語を使うこと自体が適切ではなかった可能性も出てくるよな。
あるいは何か設計がまずいか、書き方がまずいか。

何れにしてもプログラムが多くなればなるほど人間がバグを作り込んでしまう率が高くなり更に全体の把握が困難になってくる。

248デフォルトの名無しさん (ワッチョイ 6704-PLqx)2018/03/05(月) 02:35:53.76ID:FpxBMBRn0
最高効率で1万行ってやりたくないなぁ。
ぜったゲシュタルト崩壊起こす。

249デフォルトの名無しさん (ワッチョイ 4781-atej)2018/03/05(月) 02:49:21.31ID:udBqLrh50
普段から1万行程度書いてる上級プログラマが
今から模範演技を見せてくれそうな予感

250デフォルトの名無しさん (ワッチョイ 7f9f-Xchi)2018/03/05(月) 06:35:47.20ID:wW3xLIx70
int
MyFunc
(
int param
)
{
return param * param;
}

251デフォルトの名無しさん (ワッチョイ bfe7-PLqx)2018/03/05(月) 07:59:23.92ID:DUciPmz40
一万行パクった事がある。

252デフォルトの名無しさん (ワッチョイ 0723-wl/W)2018/03/05(月) 09:53:37.62ID:9If1UATd0
行数で評価とかいまだにあるのかcobolの習慣持ち込むな

253デフォルトの名無しさん (ワッチョイ ff23-m1UI)2018/03/05(月) 10:35:59.73ID:6dt0Sqct0
生涯ではたぶん 書いた行数より消した行数の方が多い

254デフォルトの名無しさん (アウアウカー Sabb-pjv1)2018/03/05(月) 10:56:09.00ID:vC0ni0wma
>>249
一万行の上級者様は上級者様専用スレに行ったみたいだから、実演はしてくれないだろう

255デフォルトの名無しさん (ワッチョイ 2761-wl/W)2018/03/05(月) 16:04:50.85ID:/FWFrph00
voidポインターの足し算は未定義なんだってね。
charのポインターみたいに1バイトずつ増えるからつかえると思ってた。

256デフォルトの名無しさん (アウウィフ FF2b-wl/W)2018/03/05(月) 16:10:41.91ID:QTTd7ohZF
どうせキャストして使うんだし

257デフォルトの名無しさん (ワッチョイ a7b3-5Piu)2018/03/05(月) 17:54:44.07ID:V+sS+FxI0
C言語初心者向けのスレって結局ここでいいんだろうか?

258デフォルトの名無しさん (ワッチョイ 4781-atej)2018/03/05(月) 17:59:13.03ID:udBqLrh50
いいとも

259デフォルトの名無しさん (スップ Sd7f-C52f)2018/03/05(月) 18:07:26.38ID:VG/uZnqZd
フォルダ内の複数のエクセルシートの決まったシートをtext形式1つにまとめるのって出来ます?

260デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/05(月) 18:10:45.91ID:qBuz+lExa
>>255
gccもそうなってて以前それ前提に書いてあるソースを見てビックリしたことがある。
特別扱いしているらしい。

261デフォルトの名無しさん (スププ Sdff-mvGf)2018/03/05(月) 19:32:31.91ID:cQ8T6f3ad
プリプロセッサで
#define foo(n) foo_##__typeof__(n)(n)

double a;
foo(a);

って展開したら
foo_double(a)
になって欲しかったのに
foo___typeof__(n)(n)

になりました
良い方法はないでしょうか?

262片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK)2018/03/05(月) 20:05:03.11ID:N7KbDTrZd
>>261
型名の解釈は、プリプロセッサのレイヤーでは無理です。

263デフォルトの名無しさん (ワッチョイ 67b3-poP5)2018/03/05(月) 20:09:24.78ID:SJt3Y40r0
__typeof__ って 演算子っぽいけど
(プリプロセッサ処理の段階では解釈されない:sizeof と同じで
 リテラルの整数に展開されているわけではない)

264デフォルトの名無しさん (スププ Sdff-mvGf)2018/03/05(月) 20:10:41.84ID:cQ8T6f3ad
がーん

_Genericも二箇所に分けて書こうとするとredefineって言われて先に定義したほうが消えるし、ジェネリックは結構厳しいんですね……
ありがとうございます

265デフォルトの名無しさん (ササクッテロレ Spdb-ON3X)2018/03/05(月) 22:18:31.83ID:gAM47Ihup
1万行なんて、きちんと設計してないんじゃね?

266デフォルトの名無しさん (ワッチョイ 6704-PLqx)2018/03/05(月) 22:28:13.08ID:FpxBMBRn0
sizeof(void)って未定義?
未定義ならそのポインタの加算幅も未定義だな。
void* p = (((void*)(&i))++);

267デフォルトの名無しさん (ワッチョイ 47dc-m1UI)2018/03/05(月) 23:16:20.23ID:THwFwnSk0
キミは正しい

268デフォルトの名無しさん (ワッチョイ e79f-8pbW)2018/03/06(火) 03:28:05.03ID:ln7SJGum0
本当は void * に対しては足すことも引くこともできない。

269デフォルトの名無しさん (ワッチョイ 6793-fJrP)2018/03/06(火) 06:45:37.01ID:r6wtBatS0
今ならuintptr_tにキャストして足し算引き算した後でvoid*に戻すのかな。
uintptr_t以前はchar*へのキャストだったかも知れんけど。

しかし実際のところvoid*に対してポインタを進めたり戻したりしたいって、
どういう場面で必要になるんじゃろうか?

270デフォルトの名無しさん (ワッチョイ dfe3-k3ZN)2018/03/06(火) 09:29:43.76ID:vOSWGXrq0
char *でいいじゃん
構造がわからないものはバイト列って認識でしょ?

271デフォルトの名無しさん (ワッチョイ 4781-atej)2018/03/06(火) 10:18:02.26ID:5/zKekdl0
分からない物を適当に扱うって、すごいな

272デフォルトの名無しさん (アウアウカー Sabb-JHL/)2018/03/06(火) 12:31:29.65ID:aP2GFEvqa
しかも符号まであると決めつけてるな

273デフォルトの名無しさん (ガックシ 068f-mvGf)2018/03/06(火) 12:40:00.86ID:KV/wZ8PJ6
GCCとかchar*と同じ挙動じゃなかったっけ?

274デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/06(火) 12:50:23.18ID:Hdg+O/12a
gccはね。

275デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/06(火) 12:54:06.75ID:Hdg+O/12a
そういやポインタ演算と言うと8086用のCコンパイラはfarとか拡張キーワード作ったりして面倒だったな。TurboCだったか。
ああいうなんとも言えないCPUコンパイラだと特殊な決まりがあったりするから要注意だ。

まあ、二度とあんなの市場に出ないような気はするけどな。

276デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/06(火) 12:54:48.33ID:Hdg+O/12a
用のが抜けた。CPU用の、な。

277デフォルトの名無しさん (ワッチョイ 078a-Jyeh)2018/03/06(火) 12:56:39.10ID:3EYe6qQ70
ハーバードアーキテクチャだとdmとかpm修飾なんてのも

278デフォルトの名無しさん (ワッチョイ e75b-m1UI)2018/03/06(火) 13:31:13.79ID:PuW1uuBL0
farはTurbo Cに限ったことじゃない
8086用である限り必要になる

279デフォルトの名無しさん (アウウィフ FF2b-wl/W)2018/03/06(火) 14:52:33.73ID:03FKlPoEF
tinyモデルでも使えるfar最強

280 ◆QZaw55cn4c (ワッチョイ df60-k3ZN)2018/03/06(火) 15:01:22.33ID:xvhpcg6j0
>>279
でもコード64KBの制限はどうしようもない

281デフォルトの名無しさん (ワッチョイ e75b-m1UI)2018/03/06(火) 16:57:53.89ID:PuW1uuBL0
64KBしかいらないときに使うのがtiny
tiny使いながら64KBじゃきついとか発想が逆
だったら端っからlarge使えつーの

282デフォルトの名無しさん (アウウィフ FF2b-wl/W)2018/03/06(火) 17:18:40.34ID:03FKlPoEF
>>281
それは根本的な間違い
誤解産むからやめれ

283デフォルトの名無しさん (ドコグロ MMff-qUXR)2018/03/06(火) 21:11:42.80ID:0OC43do0M
>>272
charか符号付きかどうかは処理系とかによる
なので決めつけてるのはお前ってオチ

284デフォルトの名無しさん (ワッチョイ 67b3-poP5)2018/03/06(火) 21:46:56.01ID:7Z5LV7MX0
整数の差分じゃなくてポインタの差分じゃろ?

285デフォルトの名無しさん (ワッチョイ df80-zeCZ)2018/03/06(火) 21:52:27.71ID:GCrMS1Np0
char は、符号付き・符号なしの、どちらか分からないから使うな!

エラーに、-1 を使っていたら、0〜255 しか表現できない事もある

286デフォルトの名無しさん (ワッチョイ 078a-Jyeh)2018/03/06(火) 21:58:50.50ID:3EYe6qQ70
>>285
9bitなの?(T_T)

287デフォルトの名無しさん (ササクッテロレ Spdb-ON3X)2018/03/06(火) 22:17:46.38ID:3SdWrwMmp
例外を範囲外の値で判定する様なインターフェースが悪い。
はっきり戻り値は動作結果、値は出力用の引数に入れる。
みたいな設計にすべき。
ちな、C#みたいに戻り値を構造体にするって手もあるぞ。

288デフォルトの名無しさん (ワッチョイ df80-zeCZ)2018/03/06(火) 23:01:01.51ID:GCrMS1Np0
素人が、char型の-1 を、エラー値に使っていると、
OS・コンパイラが変わって、その環境では、char型が0〜255 になってる

char型は、符号付き・符号なしの、どちらか分からない

289 ◆QZaw55cn4c (ワッチョイ df60-k3ZN)2018/03/06(火) 23:07:35.07ID:xvhpcg6j0
>>288
言語内の話と環境(シェルやOS)の話を混同してはならない

290デフォルトの名無しさん (ワッチョイ 4781-atej)2018/03/06(火) 23:46:04.03ID:5/zKekdl0
signed char って書けば?

291デフォルトの名無しさん (ワッチョイ dff9-5eZn)2018/03/07(水) 02:24:03.38ID:Tq6bvCAq0
>>288
charの使い方が間違っていることが問題なのであって、charを使うこと自体が悪いのではない。

292デフォルトの名無しさん (ワッチョイ 6704-jpR6)2018/03/07(水) 02:45:29.86ID:kGjiUMXW0
はいー。
1バイト整数を使いたかったら、stdintを使いましょう。
int8_tは内部がcharかもしれないけど便宜上charではありません。
ハイ、復唱。int8_tはcharではありません。
ちなみにC++でバイト表現専用のstd::byteが入りました。すごく使いにくいけど。

293デフォルトの名無しさん (ワッチョイ e75b-m1UI)2018/03/07(水) 10:31:28.26ID:ylRgY7un0
>>282
どこか間違っているか?

294デフォルトの名無しさん (ワッチョイ 2761-wl/W)2018/03/07(水) 12:28:33.48ID:maM/8pnG0
gets_sのsは何の略か教えてください。

295デフォルトの名無しさん (ワッチョイ 078a-Jyeh)2018/03/07(水) 12:31:25.66ID:/Jrz1mw60
secure

296デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/07(水) 12:53:17.89ID:vftXHA5La
>>294
Windows用のコンパイラの話?
知らないけど、多分 size の s じゃない?

297デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/07(水) 12:53:35.53ID:vftXHA5La
>>295
あ、それか。

298デフォルトの名無しさん (アウアウエー Sa9f-wl/W)2018/03/07(水) 12:59:49.73ID:L+d1J7Rsa
stopper

299デフォルトの名無しさん (ワッチョイ 0761-k3ZN)2018/03/07(水) 13:42:40.79ID:r9zWShH00
昔はpc-98DOS用に作ったソフトがハード依存コードが無ければ
DOS/V機やTOWNSでも動くって聞いて驚いた。

300デフォルトの名無しさん (スップ Sd7f-b+My)2018/03/07(水) 13:49:17.29ID:9HCtzU4sd
safe

301デフォルトの名無しさん (ワッチョイ df5d-W8CT)2018/03/07(水) 16:58:54.65ID:+xlstTJJ0
N5200 で LSI C-86 試食版を使ってた……ような気がする。昔のことだから記憶が曖昧だ。

302デフォルトの名無しさん (ワッチョイ e75b-m1UI)2018/03/07(水) 17:13:49.35ID:ylRgY7un0
vz?

303デフォルトの名無しさん (ワッチョイ 4781-atej)2018/03/07(水) 17:14:24.12ID:GwlIl+h20
MS-DOSが動作していれば使えるはず

304デフォルトの名無しさん (ワッチョイ e75b-m1UI)2018/03/07(水) 17:17:05.15ID:ylRgY7un0
dispelしなきゃ無理じゃね?w

305デフォルトの名無しさん (ササクッテロレ Spdb-ON3X)2018/03/07(水) 17:21:00.28ID:XsGIcGwmp
secureじゃねーだろ。
暗号化だってされてねーんだからw
safetyくらいな感じじゃね?

306デフォルトの名無しさん (アウアウカー Sabb-g3Yl)2018/03/07(水) 17:25:48.32ID:Rf3JBuAda
DOSのシステムコール(なんて言うんだっけ?DOSコール?忘れた)だけを呼び出しているプログラムならハードウェアが違っても動く。

しかしMS-DOSはCUIしかサボートしてないのでグラフィックスは使えない。

当時のプログラムはみんな勝手にOS無視してグラフィックスのVRAMに直接アクセスして絵を出していた。
すると当然他の機種に持っていくと意図した通りに動かない。

307デフォルトの名無しさん (アウアウエー Sa9f-wl/W)2018/03/07(水) 17:26:24.22ID:L+d1J7Rsa
int21

308デフォルトの名無しさん (ワッチョイ 7fea-poP5)2018/03/07(水) 17:27:45.62ID:rG21M89G0
INT 21H なら ファンクションコールだったかの

309デフォルトの名無しさん (ワッチョイ 4781-atej)2018/03/07(水) 17:28:50.29ID:GwlIl+h20
伝統のCALL 5

310デフォルトの名無しさん (ワッチョイ e75b-m1UI)2018/03/07(水) 17:29:37.78ID:ylRgY7un0
DOSCALLS.DLLてのもあったなあw

311デフォルトの名無しさん (アウアウエー Sa9f-wl/W)2018/03/07(水) 17:55:21.18ID:L+d1J7Rsa
CP/M か
0066 とかもあったっけ

312デフォルトの名無しさん (ドコグロ MM6b-qUXR)2018/03/07(水) 19:19:15.79ID:Zw7oeE4wM
>>296-298, >>300, >>305
お前らがどう思おうとマイクロソフトはセキュリティ強化版って言ってるから

313デフォルトの名無しさん (アウアウウー Sa2b-m1UI)2018/03/07(水) 21:48:34.17ID:mAtFjoDLa
super man

314デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/08(木) 05:46:05.86ID:Eav/q7cG0
#define a(b) c##b##d
というマクロでcdを出力したいのですが
a()を呼び出すとエラーになります
解決策ありますでしょうか?

315デフォルトの名無しさん (ワッチョイ fb93-ao9L)2018/03/08(木) 07:45:03.75ID:/HWAGXcB0
>>314 俺のところはエラー出ないみたい。環境によるのかな。
コンパイラのバージョンを示せば詳しい人が現れるかも。

316デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/08(木) 07:52:57.57ID:Eav/q7cG0
ありがとうございます。
解決しました。

317デフォルトの名無しさん (ブーイモ MM8a-7yGo)2018/03/08(木) 08:09:34.78ID:Ed7uI0ohM
どう解決したか書くのが礼儀ってもんだ。

318デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/08(木) 08:29:41.94ID:Eav/q7cG0
コンパイラーのエラーが出ないという意見をきいて
試してみたら別のところ―がエラーになっていたということでした。
そして自分が悪質なコンパイラーに騙されていたことに気づきました。

319デフォルトの名無しさん (ササクッテロレ Sp33-Y2nf)2018/03/08(木) 09:10:26.22ID:lHBKoGy1p
エラーの文章くらい読めよ。

320デフォルトの名無しさん (アウウィフ FF1f-0aB1)2018/03/08(木) 10:10:36.36ID:ue18PqKiF
Cのエラーはエラーの発生個所を教えてくれるけど原因個所は教えてくれない

321デフォルトの名無しさん (ワッチョイ cb5b-uQtz)2018/03/08(木) 10:25:51.65ID:0lNTHbnP0
おそらく警告とエラーを混同していると思われ

> warning C4003: マクロ 'a' に指定された実引数の数が少なすぎます。

322デフォルトの名無しさん (ワッチョイ fb93-ao9L)2018/03/08(木) 17:10:32.81ID:/HWAGXcB0
関数型マクロの使用時、カッコの内側が空の場合に、
「引数が指定されていない」と解釈して警告を出すか、
「1個の引数(内容はヌルストリング)が指定されている」と解釈するか、
そういう問題みたいね。

323デフォルトの名無しさん (ワッチョイ bbf2-uQtz)2018/03/08(木) 23:40:10.76ID:nwTnwFPU0
>>292
>int8_tは内部がcharかもしれないけど便宜上charではありません。

普通はsigned charだな。当たり前。「charかもしれない」なんてこともありえない。

324デフォルトの名無しさん (ワッチョイ 4a5d-uQtz)2018/03/09(金) 00:58:31.73ID:U4YZHGfl0
そういう一般仕様から外れるコンパイラの使用を強制させられたことあるの?

325デフォルトの名無しさん (ワッチョイ cb5b-uQtz)2018/03/09(金) 06:39:09.84ID:K2/JY7Cc0
cout << typeid(__int8).name(); //char

326デフォルトの名無しさん (ササクッテロレ Sp33-Y2nf)2018/03/09(金) 10:59:36.49ID:rlkWp7/Ip
誰だよCの話題に別言語持ち出してんの。

327デフォルトの名無しさん (ワンミングク MMda-GEnZ)2018/03/09(金) 12:10:45.59ID:WqdE+VIZM
いやらCね

328デフォルトの名無しさん (アウアウカー Sa7b-vvOV)2018/03/09(金) 12:13:57.64ID:LlK9d7kba
頭おかC

329デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/09(金) 16:36:39.04ID:AbBnYUJz0
符号なし64ビット整数を64ビット右シフトすると
0にならないでそのままの時や変な別の値になるときがあるんですけど
コンパイラーのバグですか?

330デフォルトの名無しさん (アウアウウー Sa1f-whik)2018/03/09(金) 17:10:28.27ID:aCtfd81Na
>>329
もしかしてですが、
悪質なコンパイラに騙されているのでは?

331デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/09(金) 17:10:41.68ID:AbBnYUJz0
http://fast-uploader.com/file/7076138459666/
2つのファイルが無いと再現できなかったのでソースファイルを
アップロードしました
コンパイルしてなぜ0にならないのか教えてください。

332デフォルトの名無しさん (ワッチョイ fb93-ao9L)2018/03/09(金) 17:11:34.80ID:er4JdT2d0
>>329
a >> b で、bの値がaの型のビット数「以上」のときは未定義動作、
に該当するから、コンパイラのバグではない。…と思う。

本当は規格の引用をすべきなんだが、どなたか頼む。

333デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/09(金) 17:12:19.58ID:AbBnYUJz0
コンパイラーは
gcc version 7.3.0 (Rev1, Built by MSYS2 project)
で試しました。
悪質なコンパイラーに騙されているのかもしれませんね。

334デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/09(金) 17:25:01.13ID:AbBnYUJz0
ファイル1
#include<stdio.h>
#include<stdint.h>
uint64_t f(uint8_t a,uint64_t b){
printf("%llx\n", b>>(64-a));
return b>>64-a;}
void e(uint8_t a){ f(0,0x8318318318318318);}
void g(uint8_t a){ f(a,0x8318318318318318);}
ファイル2
#include<stdint.h>
uint64_t f(uint8_t a,uint64_t b);
void g(uint8_t a);
void e(uint8_t a);
int main(void) {
g(0);
e(0);
return 0;
}
この二つのファイルをコンパイルして実行してみてください。
よろしくお願いします。

335デフォルトの名無しさん (ワッチョイ cb5b-uQtz)2018/03/09(金) 17:27:15.48ID:K2/JY7Cc0
その昔、CPUのバグで16bitレジスタを32bitシフトすると0にならないとかいうのなかったっけ

336デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/09(金) 17:45:47.23ID:AbBnYUJz0
これからは64ビットのシフト使ってるコードは全てバグの温床になるな。

337デフォルトの名無しさん (ブーイモ MMd6-7yGo)2018/03/09(金) 18:10:27.57ID:Z9n7UPH0M
C11の6.5.7の3より。
If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.

338332 (ワッチョイ fb93-ao9L)2018/03/09(金) 20:12:23.00ID:er4JdT2d0
>>337 フォローありがとう。この部分ですわ。
6.5.7 Bitwise shift operators ビットシフト演算子 の項。

もしも右オペランドの値が負、または汎整数拡張後の左オペランドの(ビット)幅より
大きいか等しい場合、振る舞いは未定義である。

と言った感じかな。
promoted left operand の部分が「汎整数拡張後の左オペランド」で
合ってるのか自信ないけど。

339デフォルトの名無しさん (ワッチョイ 6a80-csLy)2018/03/09(金) 21:17:55.13ID:ysNVe5/v0
64bit 符号なしを、64bit シフトするって、そもそも無意味だろ

元のビットが残っていない。
全部のビットが変わっている!

意味があるのは、63bit まで

340デフォルトの名無しさん2018/03/09(金) 22:22:53.87
>>339
0になってくれれば余計な分岐やら演算やらを省けるかもしれないだろ

341デフォルトの名無しさん (ワッチョイ be81-6YPG)2018/03/09(金) 22:57:22.97ID:dpc+cSNT0
0クリアする最適な方法なの?

342デフォルトの名無しさん (ワッチョイ 6a80-csLy)2018/03/09(金) 23:23:40.83ID:ysNVe5/v0
1010 XOR
1010
----
0000

n は任意のビットで、n XOR n で、全ビット0にできる

343デフォルトの名無しさん2018/03/09(金) 23:25:22.45
>>342
そんなん全ビット読まなきゃいけないじゃん

344デフォルトの名無しさん (ワッチョイ cf8a-GEnZ)2018/03/09(金) 23:29:26.36ID:9IZd/e860
n and 030 とかで任意ビットのonはわからないか?

345デフォルトの名無しさん (ワッチョイ 4a5d-uQtz)2018/03/09(金) 23:47:39.35ID:U4YZHGfl0
>0クリア
つ ゼロレジスタ

346デフォルトの名無しさん (ワッチョイ 0b9f-uQtz)2018/03/10(土) 00:03:47.54ID:a2p+alti0
1 bit づつじわじわシフトするなら何とかなるんだけどな。
https://paiza.io/projects/D9KFwMa77ifp6AOgAaO2PQ

347デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/10(土) 05:55:47.17ID:jel/5KgH0
定数リテラルにullって使ってなくてもだいじょうぶなんだっけ?

348デフォルトの名無しさん (ワッチョイ 3fac-3aOH)2018/03/10(土) 12:12:18.84ID:Z1L9sOVC0
>>343
xor は少サイクルなのが利点ですね。

349デフォルトの名無しさん (ワッチョイ 7361-0aB1)2018/03/10(土) 13:08:59.94ID:qojMr6PP0
アセンブリコードの0にする方法はxorやのう

350デフォルトの名無しさん (ワッチョイ 1780-7yGo)2018/03/10(土) 13:24:16.81ID:+HpaswK40
CPU依存すぎる

351デフォルトの名無しさん (ワッチョイ 6ab3-3fsH)2018/03/10(土) 13:47:45.54ID:f+B2oLbA0
Z80時代の爺だろ、放置してやれ

352デフォルトの名無しさん (ワッチョイ be81-6YPG)2018/03/10(土) 14:18:47.85ID:J/EnQN8G0
パチンコ屋さん

353デフォルトの名無しさん (ワッチョイ 6baa-Y2nf)2018/03/10(土) 15:25:43.76ID:ps/htySn0
今じゃ乗除演算さえワンサイクルの時代に何アホな話してんだ?

354デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/10(土) 16:20:41.72ID:HvD6qwC3a
アセンブラについてはどうしても自分でアセンブリ言語で書かねばならない事態に陥らない限り書くことはないだろうなあ。

355 ◆QZaw55cn4c (ワッチョイ 8a60-hn8E)2018/03/10(土) 16:50:09.76ID:+Ww908Qw0
>>354
そうそう、printf デバッグでは力不足でもう否が応でも gdb に行くのを逃げ回っているのと同じです

356デフォルトの名無しさん (ワッチョイ 0b9f-RK0z)2018/03/10(土) 17:18:49.50ID:a2p+alti0
gdb は普通に使うなあ。

357デフォルトの名無しさん (アウウィフ FF1f-0aB1)2018/03/10(土) 17:35:13.89ID:5pXC+BOTF
printfなめたらいかん

358デフォルトの名無しさん (ワッチョイ 6baa-Y2nf)2018/03/10(土) 17:41:43.93ID:ps/htySn0
割り込みん中でprintf使って暴走してデバッグが出来なかった思い出。

359デフォルトの名無しさん (ワッチョイ 0b9f-uQtz)2018/03/10(土) 18:10:52.64ID:a2p+alti0
俺はシグナルハンドラの中でログ出力しようとして FILE * 経由で fprintf() 等で出力したら
そのライブラリの中でデッドロックしてハマった。 kill -ABRT で core dump させて gdb
で core ファイルと共に読ませてようやっと停止箇所がわかった。

360デフォルトの名無しさん (ブーイモ MMd6-KXGk)2018/03/10(土) 20:11:43.97ID:fNi+2/6HM
gdbマスターしてからprintデバッグバカにしてたけど
printデバッグ自動化してからprintデバッグ信者になった
無論レアケースデバッグはgdb使うけどね

361デフォルトの名無しさん (ワッチョイ 0b9f-uQtz)2018/03/11(日) 01:20:23.17ID:ry5KQfC80
printf() をデバッグで使う時はバッファリングを考慮していないとハマる事がある。
それと stdout と stderr と両方に出る可能性がある場合にその順序が食い違う可能性もある。
シグナルハンドラ内やマルチスレッドプログラムで使ってうまく行かない事もある。

その辺を全て考慮するならいいだろうが、しかし、それなら初めからログファイルに出力される
ように作った方が良いような気もする。

362デフォルトの名無しさん (ブーイモ MMd6-KXGk)2018/03/11(日) 02:00:44.19ID:22CnVBlaM
printデバッグなら専用モジュール作るべきだな
俺は時刻、関数名、コンテキストIDを付けて
標準出力かファイルにはかせてる

363デフォルトの名無しさん (ワッチョイ 8f23-0aB1)2018/03/11(日) 09:19:44.59ID:zWe+i43K0
そこまでするならsyslog

364デフォルトの名無しさん (ワッチョイ 2e23-uQtz)2018/03/11(日) 10:20:33.73ID:szqHStkk0
>>361
setvbuf忘れなければ済む話だよパパ

365デフォルトの名無しさん (ワッチョイ 0b9f-uQtz)2018/03/11(日) 14:10:54.85ID:ry5KQfC80
>>363
そだねー

>>364
本当にそれだけで大丈夫かね?

この頃のライブラリは多分マルチスレッドでもちゃんと動くように内部でロック掛けている部分があると
思うんだけどね、例えばシグナルハンドラの中でそのロックを掛けている最中にまたシグナルが来て
同じシグナルハンドラに入ると同じロックを掛けようとしてデッドロックするなんてことが起こり得ると
思うんだが。(まあその程度のことでデッドロックしてしまうこと自体がバグかも知れんが。それ以前に
シグナルハンドラの中でprintf()は使うなって話でもあるか…)。

366デフォルトの名無しさん (ワッチョイ 2e23-uQtz)2018/03/11(日) 15:06:05.16ID:szqHStkk0
>>365
ロケールがCならprintfだってスレッドセーフだしぎりぎりシグナルセーフだよパパ

367デフォルトの名無しさん (ワッチョイ 0bb5-Y2nf)2018/03/11(日) 15:33:10.91ID:UYIqocxw0
世の中には完全なCライブラリを実装していないタイニーなマシン用のサブセットだってあるんだよ坊や。

368デフォルトの名無しさん (ワッチョイ 23b3-lJdD)2018/03/11(日) 16:08:45.67ID:sEfAJdP70
それはCじゃないから、このスレで話し合っても無駄では。

369デフォルトの名無しさん (ワッチョイ 0bb5-Y2nf)2018/03/11(日) 16:12:01.01ID:UYIqocxw0
Cは言語仕様であって、ライブラリ仕様は別枠だろ?

370デフォルトの名無しさん (ワッチョイ be81-uQtz)2018/03/11(日) 16:46:35.93ID:iUqzSqql0
30年以上前だったかな、あるメーカーのプリンタファーム開発用Cコンパイラが配列要素上限が255だった
当時アスキーネットでこれを聞いたvoid氏が呆れていたようだ。

371デフォルトの名無しさん (ワッチョイ 23b3-lJdD)2018/03/11(日) 17:10:10.38ID:sEfAJdP70
インストラクションに8ビットまでの即値を組み込めるなら、その制限によって(そのような最適化が必要なプロセッサにとって)強烈な最適化をかけられるから、アリやナシやと問われればアリのような感がある。

372デフォルトの名無しさん (ワッチョイ 7e32-uQtz)2018/03/11(日) 17:20:27.39ID:Dtt3qpb50
Cライクって言っときゃいいのにCと名乗ってしまうから
イチャモンつけたいヤツの標的になる

373デフォルトの名無しさん (ワッチョイ 23b3-lJdD)2018/03/11(日) 17:33:57.41ID:sEfAJdP70
本場ドイツ直輸入ポークソーセージを買ったら魚肉ソーセージだったような感じですね。
つまり詐欺です。

374デフォルトの名無しさん (ワッチョイ 2e23-uQtz)2018/03/11(日) 17:36:14.99ID:szqHStkk0
>>369
それ言ったらバッファリングの話題もCの話にならないだろぉオヤジィ

375デフォルトの名無しさん (ワッチョイ be81-uQtz)2018/03/11(日) 17:37:59.08ID:iUqzSqql0
何が正当な教義かについて議論したければ、上級者スレでやってね

376デフォルトの名無しさん (ワッチョイ 23b3-lJdD)2018/03/11(日) 18:04:00.35ID:sEfAJdP70
こういう掲示板で宗教対決を規制したら過疎化するんじゃないだろか。

377デフォルトの名無しさん2018/03/11(日) 18:26:39.19
>>370
まるでUvaみたいな制限だな(藁

378デフォルトの名無しさん (ワッチョイ cf8a-GEnZ)2018/03/11(日) 18:45:46.67ID:QedwXA9H0
>>366
マルチスレッド版のライブラリーがあるかと
行出力中にスレッドが切り替わらない

379デフォルトの名無しさん (ワッチョイ cf8a-GEnZ)2018/03/11(日) 18:48:04.93ID:QedwXA9H0
>>374
なお初代K&Rにはライブラリーの仕様は含まれない。
WhiteSmithとかはprintfが実装されてない

380デフォルトの名無しさん (アウアウエー Sae2-0aB1)2018/03/11(日) 20:24:48.92ID:1mhcZmSWa
>>372
セントロニクス

381デフォルトの名無しさん (ワッチョイ 7e32-uQtz)2018/03/11(日) 21:13:40.31ID:Dtt3qpb50
5Vシングルエンドがそのままコネクタに出てるアレか
アレを基板に直付けするアフォが多くて頭クラクラした

382デフォルトの名無しさん (ワッチョイ 6ac6-lLam)2018/03/11(日) 23:26:14.78ID:3FTmPjnp0
for(i=0;i<10;i++)
scanf("%d",&num[i])

で入力した変数がiに入ってしまうことがあるのですがなぜですか?

383デフォルトの名無しさん (ブーイモ MM97-7yGo)2018/03/11(日) 23:59:04.31ID:Sn9rQkOCM
numのサイズが10ないとか。

384デフォルトの名無しさん (ワッチョイ eae3-hn8E)2018/03/12(月) 00:02:45.79ID:9wDOvV2B0
ソース全部晒せ

385デフォルトの名無しさん (ワッチョイ 26e7-Osi7)2018/03/12(月) 07:51:36.03ID:6B2Hj+UH0
do whileはいらない子?

386デフォルトの名無しさん (ブーイモ MM97-7yGo)2018/03/12(月) 08:04:24.78ID:uoSNo/WDM
アルゴリズムによってはdo whileの方が素直なときがある。まれだが。マクロを本当の関数っぽく使うのにdo while (0)使うハックがある。まれだが。
コンパイラによってはdo whileの方が速いコード出す。まれだが。

387デフォルトの名無しさん (ドコグロ MMbb-3fsH)2018/03/12(月) 08:36:16.07ID:SpziwmuNM
>>370
プリンタっつーてもピンキリだからなぁ
レシートプリンタとかならその程度で充分かもしれん

388デフォルトの名無しさん (ワッチョイ 2fe9-uQtz)2018/03/12(月) 09:25:52.84ID:kO6Vn+sG0
>>385
んなこたーない
whileのほうが使用頻度は高いけど
本質的に後判定なロジックはそんなに珍しくもない

389デフォルトの名無しさん (ワッチョイ 0bb5-Y2nf)2018/03/12(月) 09:30:32.07ID:Cd8AY8RG0
do〜whileは、必ず一回は処理してくれるから便利。

390デフォルトの名無しさん (ワッチョイ 2fe9-uQtz)2018/03/12(月) 09:31:53.62ID:kO6Vn+sG0
繰り返し対象処理が実行される条件がブレるから気をつけないといけないけどね

391デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/12(月) 10:16:52.94ID:Igle62xq0
do{continue;}while(false); で無限ループになるのウケる。

392デフォルトの名無しさん (ワッチョイ 2fe9-uQtz)2018/03/12(月) 10:19:34.77ID:kO6Vn+sG0
391 error: undeclared symbol 'false'

393デフォルトの名無しさん (アウアウウー Sa1f-whik)2018/03/12(月) 10:42:19.80ID:wLVR4ID4a
>>389
女に見習わせたいな

394デフォルトの名無しさん (ワッチョイ 8f23-0aB1)2018/03/12(月) 12:03:54.32ID:A4+OWJSs0
こんな書き方たまにする

do{
・・・
条件
break;
・・・
条件
break;
・・・
条件
continue;
・・・
条件
break;
・・・
条件
continue;
・・・
}while(0);

395デフォルトの名無しさん (ワッチョイ be81-uQtz)2018/03/12(月) 12:10:22.44ID:rLGzoMUT0
>>387
一応汎用のレーザープリンターなんだ
30年って一寸行き過ぎだな
95が出てきた頃だから、20年前か

396デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/12(月) 12:11:48.84ID:Igle62xq0
>>394
GOTOを怖がるな。
俺は反GOTO教は抜けた。
まぁ乱用しようとも思わんけど。

>>392
文脈で察してくれ。
boolはいったことだし。

397デフォルトの名無しさん (ワッチョイ beea-mjGY)2018/03/12(月) 15:52:19.83ID:bCYSOHOV0
B 判定 A B 判定 A B … みたいに
do { } while () のブロックの途中に飛び込んで開始するようなのが悩ましい

goto ENTER;
do {
 A();
ENTER:
 B();
} while(条件);

398デフォルトの名無しさん (JP 0H9b-7yGo)2018/03/12(月) 17:04:49.51ID:Ro63JAiYH
出口が複数は可だけどエントリーポイントが変なとこにあるのは読みにくいからやめたほうがいい。
この例の場合はB Aの無限ループにして、Bのあとの条件で脱出するのが定石。

399デフォルトの名無しさん (ワッチョイ beea-mjGY)2018/03/12(月) 17:15:21.51ID:bCYSOHOV0
for(;;) {
 B();
 if (条件) break;
 A();
};
こんな感じですか。
やっぱり頭から入っていくほうが読みやすいし…

400デフォルトの名無しさん (ワッチョイ be81-uQtz)2018/03/12(月) 17:24:28.52ID:rLGzoMUT0
処理内容がそうならそういうことなんだろうが、
見ていて気持ちが悪くなるロジックだな、すまん

401デフォルトの名無しさん (ワッチョイ 2fe9-uQtz)2018/03/12(月) 17:31:42.39ID:kO6Vn+sG0
エントリーポイントが変なとこって、mainだって1行目にはまずならないしな
実装されることなく廃止になったキーワードにentryつーのがあって
そいつがおそらくは1行目に
entry main;
とか持ってこれるようにするつもりだったのかもな

402デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/12(月) 17:41:10.71ID:mlDQMbRTa
>>397
昔の BASIC を思い起こさせる goto の使い方だなw

403デフォルトの名無しさん (アウーイモ MM1f-swbP)2018/03/12(月) 17:58:00.69ID:DBOT0xK9M
gotoは禁止はしないが、異常系の終了処理にジャンプするパターンだけ許容だな。

404デフォルトの名無しさん (アウウィフ FF1f-0aB1)2018/03/12(月) 18:04:50.67ID:FajbO2mAF
exceptionさえあれば

405デフォルトの名無しさん (ワッチョイ beea-mjGY)2018/03/12(月) 18:06:32.58ID:bCYSOHOV0
コンストラクター/デストラクターのような機構があれば
異常時の後始末は割と楽に書けるっすね

406デフォルトの名無しさん (アウウィフ FF1f-0aB1)2018/03/12(月) 18:09:46.06ID:FajbO2mAF
atexit()はあるぞ

407デフォルトの名無しさん (ワッチョイ be81-uQtz)2018/03/12(月) 18:25:47.87ID:rLGzoMUT0
異常の場合は,例外処理をしてから続行したい

408デフォルトの名無しさん (ワッチョイ cf8a-GEnZ)2018/03/12(月) 19:11:12.71ID:HQXq1VOq0
つ setjmp

409デフォルトの名無しさん (アウーイモ MM1f-swbP)2018/03/12(月) 19:32:23.64ID:6OIrRNruM
>>408
volatileをつけ忘れて最適化で暴走するなんてよくあること。

410デフォルトの名無しさん (ドコグロ MMbb-3fsH)2018/03/12(月) 20:42:20.27ID:SpziwmuNM
>>395
1995年頃でLBPだと16bitから32bit CPUに移行する頃だから配列サイズが最大255なんて言うのはさすがに見たことないわ
ちなみにうちはSH-2+独自モニタからR3000+VxWorksへの移行期だった
コンパイラもチップベンダーかOSベンダーのものを使ってた

411デフォルトの名無しさん (ササクッテロレ Sp33-Y2nf)2018/03/12(月) 21:14:21.91ID:hz29p2j/p
gotoを後始末以外の使い方して変な所に飛ばしたりするから禁止って言われるんだよな。

412デフォルトの名無しさん (ワッチョイ 2fe9-uQtz)2018/03/12(月) 22:09:38.43ID:kO6Vn+sG0
昔のBASICにはON ERROR GOTOとかON ERROR GOSUBつーのがあって
異常系から復帰できたんだよな、それがCやC++にはない

413デフォルトの名無しさん (ワッチョイ be81-uQtz)2018/03/12(月) 22:12:32.16ID:rLGzoMUT0
setjmp longjmp

414デフォルトの名無しさん (ワッチョイ 2fe9-uQtz)2018/03/12(月) 22:16:55.21ID:kO6Vn+sG0
RESUME NEXTに相当する処理はsetjmp.hにはない

415デフォルトの名無しさん (ワッチョイ 7ee9-NINk)2018/03/12(月) 23:49:45.06ID:+NwoaeJY0
gfortranで言うところのfcheck=allを設定した時のように配列の範囲外アクセスを検知したいのですが、いい方法はありますか?

416デフォルトの名無しさん (ワッチョイ cf8a-GEnZ)2018/03/13(火) 00:26:13.95ID:zisSqBer0
boundschecker 使えばよろし

417デフォルトの名無しさん (ワッチョイ 7ee9-NINk)2018/03/13(火) 00:43:16.47ID:LMrPxj1+0
Linuxなので代用を探していたらvalgrindに辿り着きました
ありがとうございます

418デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/13(火) 03:11:31.37ID:a0aOTtHi0
大域ジャンプはダメだ。

419デフォルトの名無しさん (ワッチョイ 8f61-hn8E)2018/03/13(火) 07:50:52.88ID:H/7hRIr60
初期化

タイトル
...
GOTO 本編

GAME OVER
...
GOTO タイトル

ゲーム本編
...
GOTO GAME OVER

420デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/13(火) 08:44:52.34ID:a0aOTtHi0
>>419
よくあるダメなゴトーさん。

421デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/13(火) 10:00:11.49ID:mZm9h8PZa
>>412
まあ、ないけど、エラーになったら自分でif文使って分岐すれば良いだけでは?
C言語は単に言語レベルでのそういう便利機能が少ないってだけで実現する方法は内部的な動作まで考えたら結局は同じにしかならんと思うよ、

422デフォルトの名無しさん (ササクッテロレ Sp33-Y2nf)2018/03/13(火) 10:29:21.12ID:FbdkMN9Up
C言語はマクロアセンブラから派生した感じなんで、言語体系はお世話にも良いとは言えないんだよな。
当時はマシン語で演算結果フラグで条件ジャンプや条件コールしてた煩わしさから開放されただけでも有り難かったんだ。
そんなチープな言語にオブジェクト指向だの例外処理だのとか求めて迷走したのがC++
ええい、いっそ作り直してしまえって出したのがJavaやC#
だからC言語使う時点で諦めれ。

423デフォルトの名無しさん (ワッチョイ cb38-uQtz)2018/03/13(火) 11:04:12.06ID:92t/zLSk0
>>421
そのif文でゴチャゴチャしだしたら「例外処理」を名乗れない

424デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/13(火) 11:54:23.49ID:a0aOTtHi0
基本的にウオーターフォールを守るのが大事やな。
そのうえでどこに飛びたいかって感じ。

425デフォルトの名無しさん2018/03/13(火) 12:12:14.52
フォールウオーバー機構を言語レベルで用意すべき

426デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/13(火) 12:16:24.04ID:a0aOTtHi0

427デフォルトの名無しさん (アウーイモ MM1f-swbP)2018/03/13(火) 12:26:22.54ID:CTGLDN6cM
漢字で書くと闘婆

428デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/13(火) 13:00:28.56ID:5qOlO1LIa
>>423
名乗らんでいいのでは?

Cが不便なら他の言語使えばいいじゃない。

429デフォルトの名無しさん (ワッチョイ cb38-uQtz)2018/03/13(火) 13:12:03.18ID:92t/zLSk0
>>428
ああ、議論できないのね
いいよ話さなくて

430デフォルトの名無しさん (ワンミングク MMda-GEnZ)2018/03/13(火) 13:20:12.96ID:lXm9DcKjM
SIGUSR1/2じゃ駄目なのか?

431デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/13(火) 15:58:05.78ID:LC30GjQRa
>>429
議論?何の?新言語の?

432デフォルトの名無しさん (ワッチョイ cb38-uQtz)2018/03/13(火) 16:39:07.67ID:92t/zLSk0
>>431
いいよ、無理に話さなくて

433デフォルトの名無しさん (ブーイモ MM3f-KXGk)2018/03/13(火) 19:35:09.64ID:WMMjj2eHM
聞く耳持たんらC

434デフォルトの名無しさん (ドコグロ MM22-3fsH)2018/03/13(火) 20:04:26.12ID:/ChP+Vc3M
突っ込まれて遁走だろ w

435デフォルトの名無しさん (ワッチョイ 0b9f-uQtz)2018/03/14(水) 02:09:35.30ID:IiyiuIPr0
ここで幾ら議論してもC言語は変わらない。

Cから派生した言語を新たに作るというのであれば議論することには意味があるだろうが、そうでないならそれはただの愚痴だ。

436デフォルトの名無しさん (ワッチョイ ea6e-uQtz)2018/03/14(水) 06:44:38.33ID:4nqAllCK0
おまえさあCの例外処理が言語のビルトインとか思っているわけ?
Cは変わらないとか言っちゃってるけど、
その現状のCがわかってないのに変わったかどうか気付けるのか?

437デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/14(水) 07:02:59.95ID:M7iHvccR0
一応errnoだったかっていう、失敗理由を示す変数がある事はある。忘れられてるけど。
C言語で唯一トラブルシューティングに使える変数。

438デフォルトの名無しさん (ドコグロ MM22-3fsH)2018/03/14(水) 08:03:51.30ID:ylQhqnt4M
>>436
> その現状のCがわかってないのに
お前だけだろ w

>>437
ライブラリレベルの話を入れるかどうかは悩ましいな
普通の言語なら入れなくてもいいと思うがC言語にはsetjmp/longjmpなんて言うとんでもないものもあるからなぁ

439デフォルトの名無しさん (ワッチョイ ea6e-uQtz)2018/03/14(水) 08:15:23.77ID:4nqAllCK0
errnoだってwww あれが例外処理なのか

setjmpがどうとんでもないのか具体的には言えないんだろうな
だから聞かない

440デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/14(水) 08:25:02.15ID:M7iHvccR0
>>439
大域ジャンプするとエラー処理したところが戻ったりして変数グチャグチャになることがあるからな。
まぁ、C++の例外も大域ジャンプだし。個人的には使わないな。
古き良き-1やら_boolであきらめる方が精神的には良い。
んで、趣味位のケースなら正常系だけ書いておけば大体問題ない。
エラー系は大体ロジックエラーだからデバッグで落とす。

441デフォルトの名無しさん (ドコグロ MM22-3fsH)2018/03/14(水) 08:29:46.90ID:ylQhqnt4M
>>439
> setjmpがどうとんでもないのか具体的には言えないんだろうな
他の言語でライブラリレベルで実装してる例はないから
まともな頭があれば理解できるはず

442デフォルトの名無しさん (スフッ Sd8a-nIhD)2018/03/14(水) 08:31:33.24ID:6wuH32OAd
高級アセンブラの名前は伊達ではないよね。

443デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/14(水) 08:32:17.72ID:M7iHvccR0
あれジャンプじゃなくて、スタックロールバックだからな。どっちかっていうとリセットの類。
他の言語でこれは実装できない。というかやりたくはないだろう。

444デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/14(水) 08:35:45.72ID:M7iHvccR0
大域ジャンプ+動的メモリアローケート。あぁおそろしい。
なので、大域ジャンプはやめましょう。

445デフォルトの名無しさん (ドコグロ MM22-3fsH)2018/03/14(水) 08:37:30.11ID:ylQhqnt4M
>>440
> 大域ジャンプするとエラー処理したところが戻ったりして変数グチャグチャになることがあるからな。
それはお前の能力が足りないだけの話だろ w

> まぁ、C++の例外も大域ジャンプだし。
C++はデストラクタとかの処理も要るからライブラリレベルでは実現できない
そう言う処理を全てプログラマに押し付けられるC言語だからできるってことでもある

446デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/14(水) 08:41:34.04ID:M7iHvccR0
>>445
あーすげー。この人、他人がいじった変数全部把握してるんだな。すげー。
メモリ確保したのなかったことになっても正常系に戻せるんだな。
超人か!!

447デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/14(水) 08:45:22.60ID:M7iHvccR0
C++のクラス機構をライブラリで実装するときは、構文糖入れたりとか、イベントモデル入れたりとか。
エネルギーばかりかかって収穫がない。

448デフォルトの名無しさん (アウアウウー Sa1f-uQtz)2018/03/14(水) 09:25:24.96ID:ZphqLecba
>>436
Cには言語レベルでの例外処理はないのでは?何のことを指してそう言っているのか?

449デフォルトの名無しさん (ワッチョイ 0bb5-Y2nf)2018/03/14(水) 09:28:14.80ID:ooB4nY3v0
Cにだって例外処理はある。
でもそれって、CPUの例外割り込みの事だけどね。
あー結局言語仕様じゃ無いじゃんw

450デフォルトの名無しさん (アウアウウー Sa1f-uQtz)2018/03/14(水) 09:29:50.23ID:ZphqLecba
>>449
ほら。ないよな?

451デフォルトの名無しさん (アウアウウー Sa1f-uQtz)2018/03/14(水) 09:32:49.61ID:ZphqLecba
割り込みっていうならシグナルがあるがしかしOSの問題だよな?
てか標準じゃないか。それにシグナルのために特別な言語仕様が作られてもいない。

452デフォルトの名無しさん (ワッチョイ 0bb5-Y2nf)2018/03/14(水) 09:35:13.20ID:ooB4nY3v0
所詮Cは高級アセンブラだからなぁ

453デフォルトの名無しさん (ワッチョイ ea6e-uQtz)2018/03/14(水) 10:19:21.23ID:4nqAllCK0
>>441
現状のCの話じゃなかったのか?
なんで他の言語が出てくるんだ

俺はてっきりsetjmpの仕様がとんでもないと言っているのかと思ったが
実装方法がとんでもないと言っているのか?
あれか動作保証のないマイクロ診断命令でも使っていると言いたいの?

454デフォルトの名無しさん (ワッチョイ ea6e-uQtz)2018/03/14(水) 10:20:28.21ID:4nqAllCK0
>>448
言語を定義する規格票が定義しているライブラリのことだよ
まさか知らんのか?

455デフォルトの名無しさん (ワッチョイ fb93-ao9L)2018/03/14(水) 11:44:11.11ID:jowRUKsS0
何やら雰囲気が悪くなってるように感じるけど、カレンダー絡みかな。

456デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 12:08:39.92ID:L/3+Hz1H0
やたら突っかかってくるやつを構ってやっているだけだが

457デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 12:22:56.52ID:e7inwI4na
>>454
知らんなあ。Cの例外処理ってなんなの?

458デフォルトの名無しさん (ワッチョイ be81-uQtz)2018/03/14(水) 12:24:13.25ID:y6ADsCAy0
ここは遊び場ではありません

459デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 12:52:15.53ID:L/3+Hz1H0
>>457
そうか、知らんのか
じゃあ話にならんな

460デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 12:53:42.74ID:e7inwI4na
>>459
何のことなのかぜひ書いてくれ。

461デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 12:53:55.90ID:L/3+Hz1H0
人の話の腰を折ることに専念せざるを得ない防戦一方なつまらんやつ

462デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 12:55:02.45ID:L/3+Hz1H0
>>460
おまえ、そこで3回まわってワンといえ
書いてやるかも知んねーからw

463デフォルトの名無しさん (ドコグロ MM22-3fsH)2018/03/14(水) 12:55:16.50ID:x85VLsABM
>>446
むしろそう言うのを把握せずにどうやってプログラム組んでるんだよ?
動けばラッキーってか? w

464デフォルトの名無しさん (ドコグロ MM22-3fsH)2018/03/14(水) 12:58:38.88ID:x85VLsABM
>>453
> 現状のCの話じゃなかったのか?
> なんで他の言語が出てくるんだ
どんだけ理解力がないんだよ...

> 俺はてっきりsetjmpの仕様がとんでもないと言っているのかと思ったが
> 実装方法がとんでもないと言っているのか?
だから他の言語ではライブラリでは実装しづらい機能って話な

> あれか動作保証のないマイクロ診断命令でも使っていると言いたいの?
背伸びしてマイクロ診断命令とか言い出すとか w

465デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 13:00:11.52ID:e7inwI4na
もしやこんなやつの事を言ってるのか?
http://d.hatena.ne.jp/htz/touch/20090216/1234774418

466デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 13:02:30.29ID:e7inwI4na
自作関数からのlongjmp()利用するなら似たようなものは作れるが、それは言語レベルで例外処理をサポートしている状態とは違う。

467デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 13:02:58.32ID:e7inwI4na
>>462
言ったぞ。早く書け。

468デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 13:04:49.57ID:e7inwI4na
あ、関係ないけどホーキング博士が死んだという速報が入った。

469デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/14(水) 13:35:20.49ID:M7iHvccR0
>>463
大域ジャンプなんぞつかわんので。GOTOくらいは使うけど。
戻った変数と戻ってない変数把握するの無駄すぎる。
んで、どうやってって関数かくときにifで入力要件位書くだろ。無駄な引数減らしたりとか。

470デフォルトの名無しさん (ワッチョイ cf8a-GEnZ)2018/03/14(水) 13:43:20.07ID:Ul+PcfeA0
HDLCの状態遷移を大域jump無しで書くのは大変だろうなぁ

471デフォルトの名無しさん (ワッチョイ fb04-Osi7)2018/03/14(水) 13:48:42.43ID:M7iHvccR0
さぁ、未経験だからね。

472 ◆QZaw55cn4c (ワッチョイ 8a60-hn8E)2018/03/14(水) 14:09:18.81ID:J4jCJ0kF0
>>468
うん、確認した

473デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 14:51:40.09ID:L/3+Hz1H0
>>467
そんな約束してねえぞゲーハー

474デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 14:54:07.64ID:L/3+Hz1H0
>>469
gotoじゃなくGOTOね
Cに限らない一般論ということだな
しかしlongjmpやthrowなんか大域ジャンプだろ
おまえさんはそう思わないのか?

475デフォルトの名無しさん (アウウィフ FF1f-0aB1)2018/03/14(水) 15:26:30.92ID:2cAisCwCF
>>452
それな
Cのソース書きながらアセンブラのソースが思い浮かぶ

476デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 17:04:58.74ID:buZ+p9lOa
>>473
早く書けよ。こっちゃあ昼からずっと回ってワンワン言いっぱなしなんだからよ。もう千回ぐらい回ったぞ。

477デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 17:08:34.94ID:L/3+Hz1H0
>>476
よかったな
ほら、もう1000回

# アホ

478デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 17:14:31.52ID:buZ+p9lOa
他の人でこいつの言うことわかってるやつ居るのか?

479デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 17:24:39.97ID:L/3+Hz1H0
犬に邪魔されて説明どころではない状態だからなあ

480デフォルトの名無しさん (JP 0H9b-7yGo)2018/03/14(水) 18:08:46.89ID:m9sKyebjH
情報持ってるふりして出し惜しみするのがマウンティングの基本

481デフォルトの名無しさん (アウウィフ FF1f-0aB1)2018/03/14(水) 18:24:47.12ID:2cAisCwCF
朝日新聞ですねわかります

482デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 18:29:37.08ID:L/3+Hz1H0
煽れば出ると本気で思っているならやってみな
この程度の話、マジこの程度にも付いて来れないアホの泣き声は物笑いの種だぜ

483デフォルトの名無しさん (ドコグロ MM22-3fsH)2018/03/14(水) 18:30:37.68ID:uMO7yRavM
>>469
無駄じゃねーよ、把握しろ
把握しやすく設計するのも能力のうち

484デフォルトの名無しさん (ドコグロ MM22-3fsH)2018/03/14(水) 18:32:36.61ID:uMO7yRavM
>>480
持ってるふりすらできてないだが...
どうみてもいっぱいいっぱいやん w

485デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 18:41:41.61ID:buZ+p9lOa
ま、どうでもいいから>>436で書いたC言語の例外処理についてどういうものなのか書けよ。

486デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 18:52:07.48ID:L/3+Hz1H0
>>485
それよりあと1000回だぞ
急がないと日付が変わっちまうぞw

487デフォルトの名無しさん (アウアウカー Sa7b-joIP)2018/03/14(水) 19:21:46.36ID:buZ+p9lOa
わかったわかった。もう書かなくていいよ。かわいそうなやつだな。合掌。

488デフォルトの名無しさん (ガックシ 06e6-NINk)2018/03/14(水) 19:45:37.85ID:IogLKo4e6
ID:L/3+Hz1H0に構うな

489デフォルトの名無しさん (ワッチョイ cb74-uQtz)2018/03/14(水) 21:53:59.94ID:L/3+Hz1H0
収穫ゼロで引き下がる、みじめなヤツw

490デフォルトの名無しさん (スップ Sdb7-fYnq)2018/03/15(木) 06:38:35.49ID:z1/gBAj5d
Cでエクセルの指定シートだけテキスト化できます?

491デフォルトの名無しさん2018/03/15(木) 07:11:47.68
>>490
できますん

Excelがインストールされている環境で動かす前提であれば
COMコンポーネント (Microsoft Excel Object Library) を使えばいいが
C++じゃないとダメかも

自前でExcelフォーマットを解析して変換することも
膨大な工数を費やせば理論的にはできるだろうが
現実的には選択肢に入らないな
xlsx限定ならまだ楽かも知れんが

Excelを扱う部分は他の言語で開発してCからはそれを呼び出すのが普通かな

492デフォルトの名無しさん (ドコグロ MMeb-tgc5)2018/03/15(木) 07:16:10.04ID:BwZLx9bwM
>>490
できるけど結構面倒だよ
ところでなんでC縛りなの?
なんかの苦行とか?

493デフォルトの名無しさん (ワッチョイ 5b9f-SmQe)2018/03/15(木) 07:53:33.32ID:/GlmcHqY0
Cにあっていると思う
バイナリを呼んでキャストして
キャスト後も分岐ルートが色々あって
構造体はほとんど可変長
細かいものを組み上げるのは、たぶん Cが最適

494デフォルトの名無しさん (ササクッテロロ Spe9-N79+)2018/03/15(木) 09:54:54.80ID:W95zVRhkp
FIFO(名前付きパイプ)で、大量データを分割して送受信したいです。



送信側
---------------------------
buff=malloc(datalen);
len=512;
pos=0;

do{
w=write(fifo,buff+pos,len);
pos+=w
datalen-=w
len=datalen < 512 ? datalen : 512
}while(0<datalen)
---------------------

こんなんでok?

495デフォルトの名無しさん (ワッチョイ d7ea-fr1+)2018/03/15(木) 10:35:33.07ID:v5sVsR9k0
・最初に飛び込んでくる段階で datalen が 分割サイズ(512) より小さい時の考慮
 (ループ中と同じ記述で良いのでは?)

・書けなかった時(w=0 だったとき) の脱出をケアする
ぐらいでしょうか

496デフォルトの名無しさん (ワッチョイ fbee-Iqdo)2018/03/15(木) 10:45:14.98ID:lf1N2aO70
SIGPIPEで死ぬぽ。

497デフォルトの名無しさん (ササクッテロレ Sp6f-ywpa)2018/03/15(木) 10:49:38.59ID:c+umNtGLp
マジックナンバー使うな。

498デフォルトの名無しさん (ワッチョイ 1323-hKdO)2018/03/15(木) 11:01:51.80ID:OczprsBK0
>>496
シグナルは悪い文明! 粉砕する!

499デフォルトの名無しさん2018/03/15(木) 12:00:46.26
>>494
実用的にするなら非同期送受信でいろいろケアしたほうがいいけど
学習用とか数人で使うテストツールとかならいいんじゃね?

500デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)2018/03/15(木) 12:19:33.36ID:KGbgKLI3a
>>494
エラー処理が抜けてる。

501デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)2018/03/15(木) 12:21:39.25ID:KGbgKLI3a
>>496
そうそう。しかしその辺はOSや接続先によって違うかも。

502デフォルトの名無しさん (ワッチョイ 25d4-N79+)2018/03/15(木) 16:10:59.70ID:CR6uT/FI0
>>494
これの受信側read()のコードを求むm(__)m

503デフォルトの名無しさん (ワッチョイ ddd2-0FUd)2018/03/15(木) 16:16:36.38ID:umqIWKjV0
【守銭奴】  株・FX・トレーダー  <キリストW再臨″>  史上初テレパシー演説  【救世主】
http://2chb.net/r/liveplus/1521080734/l50

504デフォルトの名無しさん (ワッチョイ d7ea-fr1+)2018/03/15(木) 17:42:18.79ID:v5sVsR9k0
プロトコルなんか無しに来たものを読みきるだけの話なら

allocsz = blocksz = 512
buff = malloc(allocsz);
use = 0;

for (;;) {
 w = read(FIFO, buff+use, allocsz-use);
 if (w == 0) { /* もう来ない */
  break;
 } else if (w > 0) {
  use += w:
  if (use >= allocsz) {
   // 器が尽きた
   allocsz += blocksz;
   buff = realloc(buff, allocsz); // 手抜きで realloc
  }
} else { /* エラーケアしてね */ }
}

buff に use バイトだけ収まってる

505デフォルトの名無しさん (ワッチョイ fbee-Iqdo)2018/03/15(木) 17:56:13.79ID:lf1N2aO70
>buff = realloc(buff, allocsz)

リークするからやめなよ。

506デフォルトの名無しさん (ササクッテロレ Sp6f-ywpa)2018/03/15(木) 18:05:35.40ID:c+umNtGLp
ヒープなんか使わずに配列にして自己管理せい。

507デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)2018/03/15(木) 18:12:47.89ID:yyzFA25Ma
ヒープに配列用のメモリを確保しているわけで・・・

508 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)2018/03/15(木) 18:18:50.14ID:xYxZI4zx0
>>505
ん?realloc() はリークするのか?

509片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd2f-5vKF)2018/03/15(木) 18:24:18.46ID:mTrAuuczd
>>508
割り当てに失敗したらリークするよ。

510 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)2018/03/15(木) 18:34:07.27ID:xYxZI4zx0
>>509
確認した
buff = realloc(buff, allocsz) という書き方は、たしかに realloc() に失敗すると buff が null で上書きされてしまうのでまずいね

511デフォルトの名無しさん (ワッチョイ 21b3-fr1+)2018/03/15(木) 18:43:54.61ID:T5+tR1ew0
戻りを別の変数で受けて確認してから代入

512片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd2f-5vKF)2018/03/15(木) 18:51:29.92ID:mTrAuuczd
前、ANSI準拠のreallocは、mallocとfreeの代わりになるって話をしたよな。
だから、最初のmallocは、NULLに対するreallocで置き換えできるんだよ。

513片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd2f-5vKF)2018/03/15(木) 18:52:49.68ID:mTrAuuczd
それから、この場合はintよりもsize_tを使った方がいい。

514デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)2018/03/15(木) 20:39:48.98ID:yyzFA25Ma
>>512
最初だけ、な。

515デフォルトの名無しさん (アウアウカー Sa09-agSD)2018/03/15(木) 23:54:08.20ID:NmT4VXxza
素朴な疑問なんですが、Cでメンバ関数を関数ポインタで定義して、そのメンバ関数から引数なしにメンバ変数を参照することってできませんか?

516デフォルトの名無しさん (ワッチョイ e19f-hKdO)2018/03/16(金) 00:14:09.63ID:LkWvbaD00
>>515
メンバ関数ってなんですか?

517デフォルトの名無しさん (ブーイモ MM3f-WReF)2018/03/16(金) 01:02:32.36ID:w3tL3lE3M
>>516
C++でいうところのメンバ関数を構造体の関数ポインタのメンバで実装したいという意味だろ。読解しろ。
>>515
むり。C++で見かけ上引数がなくても内部で引数で渡してる。

518 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)2018/03/16(金) 01:37:32.81ID:GsmhGHn70
>>515
http://2chb.net/r/tech/1434079972/39
メンバ関数 h() を返す メンバ関数 g() を定義
メンバ関数へのポインタ f を定義
メンバ関数へのポインタ f にメンバ関数 g() の返り値を代入
ここでメンバ関数へのポインタ f にはメンバ関数 h() が格納されている
->* 演算子を使用してメンバ関数へのポインタ f が指すメンバ関数 h() を実行、 h() ではメンバ変数 C::a を出力する

519デフォルトの名無しさん (ブーイモ MM3f-WReF)2018/03/16(金) 02:08:17.17ID:w3tL3lE3M
>>518
スレタイ見ろ

520デフォルトの名無しさん (ワッチョイ 4fb3-LmTb)2018/03/16(金) 04:14:48.79ID:3pmuZEr10
ポインタ構造体変数をポインタ変数で扱いたい時って
&p(ポインタ変数構造体変数)-> member(メンバ名)
みたいにわざわざ一回通常変数に直してからアドレスになおさないかんの?

521デフォルトの名無しさん (ワッチョイ 6102-hKdO)2018/03/16(金) 05:57:40.20ID:PrpOQ5WH0
(&p)->memberなんてまずやらん
p.memberで同じことができる

522デフォルトの名無しさん (ワッチョイ 4fb3-LmTb)2018/03/16(金) 06:50:12.92ID:3pmuZEr10
>>521
それやったらコンパイラにそんな構造体変数ないぞって言われた

523デフォルトの名無しさん (ブーイモ MM3f-WReF)2018/03/16(金) 08:05:49.18ID:w3tL3lE3M
>>522
質問するときは変数の宣言も使う文脈も省略せずに書け

524デフォルトの名無しさん (ブーイモ MM61-X854)2018/03/16(金) 08:16:43.56ID:6+mGA4RRM
>>522
&p->membar
(&p)->membar

525デフォルトの名無しさん (ササクッテロレ Sp6f-ywpa)2018/03/16(金) 10:27:00.36ID:DfshN/+jp
型教えないと何やっても無理だろ。
あと。下手に型変換させると、奇数バイトからワード処理とかさせてしまい、石によっては例外処理が走るか暴走するよな。

526デフォルトの名無しさん (アウアウカー Sad3-+EIL)2018/03/16(金) 11:29:31.94ID:07ayGtU0a
cのコンパイラ作るのにアセンブラの知識は必要?

527デフォルトの名無しさん (ワッチョイ 9f8a-/CVT)2018/03/16(金) 11:38:22.80ID:ObjPIdw20
今なら、LLVMがあるからコード生成はそちらに任せるという
選択肢があるね。

528 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)2018/03/16(金) 11:59:50.08ID:GsmhGHn70
>>526
コンパイルというくらいだから、最後に機械語に落とし込むのにアセンブラの知識は必要になるのではないか?

529デフォルトの名無しさん (ワッチョイ d7ea-fr1+)2018/03/16(金) 12:01:10.57ID:rupS10t30
C++ to C コンパイラとか 生成物が機械語で無いのもあるんじゃね?

(昔そういうの欲しかった)

530デフォルトの名無しさん (アウアウカー Sa09-agSD)2018/03/16(金) 12:19:28.27ID:56A/2jiga
>>517
Cには無理なんですね
ありがとうございます

531 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)2018/03/16(金) 12:33:16.00ID:GsmhGHn70
>>530
>>515 でメンバ関数という言葉を使うのだから C++ を仮定している、というのならば C++ では >>518 で可能
C で可能かどうかを問題にしているのであれば、>>515 のメンバ関数という言葉が自己矛盾

532デフォルトの名無しさん (ワッチョイ d7ea-fr1+)2018/03/16(金) 12:43:32.01ID:rupS10t30
C言語の範囲では 構造体のメンバ中に関数のポインタをもつまで
C++言語のメンバ関数の機構(暗に this ポインタが渡ってくる) のを
C言語でやりたけりゃ自前で引数に渡すしかない&その関数はポインタを引数で受けなきゃいけない

533デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)2018/03/16(金) 12:47:14.28ID:0ILmeguTa
>>529
C++の初期のコンパイラはそういうやつだった。つまり、Cへのコンバータだった。

534デフォルトの名無しさん (ササクッテロレ Sp6f-ywpa)2018/03/16(金) 13:59:12.95ID:DfshN/+jp
ああ、各ファイルの先頭に構造体の領域宣言とか関数にいちいち構造体のポインタが追加されるんだよな。

535デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)2018/03/16(金) 14:00:33.86ID:ITdJ1YV3a
そういや昔々のX68000のBASICにもCへのコンバータがあったな。

536デフォルトの名無しさん (ササクッテロレ Sp6f-ywpa)2018/03/16(金) 14:26:36.05ID:DfshN/+jp
俺は、6502アセンブラコードをCに変えるコンバータ作ったけどな。

537デフォルトの名無しさん (ワッチョイ 4d04-Ue6H)2018/03/16(金) 15:25:35.34ID:relEB8IL0
アセンブリをprintfにパースするのって大変なのかな。

538デフォルトの名無しさん (アウアウカー Sa09-agSD)2018/03/16(金) 15:57:57.02ID:ScqC3AYEa
>>531
ではどういう言葉なら齟齬なく伝わりましたか?

539デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)2018/03/16(金) 16:00:12.76ID:HNnsk+Eya
>>538
「関数へのポインタ」では?
それが構造体のメンバとしてあるわけだし。

540 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)2018/03/16(金) 16:12:40.83ID:GsmhGHn70
>>538
コード断片で示すのもよい、誰かがコードを補完してくれるだろう

541デフォルトの名無しさん (エムゾネ FF2f-0FUd)2018/03/16(金) 16:25:31.83ID:3ma6aQHvF
アスペとの会話ってつかれるよな

542デフォルトの名無しさん (ワッチョイ 6102-hKdO)2018/03/16(金) 16:57:51.61ID:PrpOQ5WH0
Cスレで「メンバ関数」だぜ?
それをアスペとか、どんだけボキャ貧なんだよ

543デフォルトの名無しさん (エムゾネ FF2f-0FUd)2018/03/16(金) 16:59:08.32ID:3ma6aQHvF
>> 542
おまえがアスペか

544デフォルトの名無しさん (アウアウカー Sa09-agSD)2018/03/16(金) 20:29:17.66ID:56A/2jiga
>>539
> Cでメンバ関数を関数ポインタで定義して
一応そのつもりで書いたんだけどなあ

アスペ基準に合わせようとした俺が悪かったのか

545 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)2018/03/16(金) 21:09:53.74ID:GsmhGHn70
>>544
・関数ポインタとは別に「メンバ関数」というテクニカルタームが C++ にあった
・C/C++ の区別がついていない人の質問も、ここではよくみかける

という背景があって小さな誤解が発生したまでのこと、気にするでない、苦しゅうないぞ

546デフォルトの名無しさん (ドコグロ MMdf-tgc5)2018/03/16(金) 21:13:51.61ID:nemrSVupM
>>526
どうやってコード生成部分を作るつもりなんだよ...

547デフォルトの名無しさん (アウアウカー Sad3-AQFW)2018/03/16(金) 21:59:39.71ID:PPQOkRTja
マシン語があれば充分のんじょのいこの

548デフォルトの名無しさん2018/03/16(金) 22:33:58.96
Cコンパイラがマシン語を出力しなきゃいけないって誰が決めたの?🙄

549デフォルトの名無しさん (ワッチョイ 8781-hKdO)2018/03/16(金) 22:51:53.37ID:SxfrRBUw0
ラノベ出力してくれるコンパイラってステキ

550デフォルトの名無しさん (ワッチョイ 13b3-tgc5)2018/03/16(金) 22:53:03.55ID:d0lIgzUw0
誰も決めてないしマシン語じゃなくてアセンブラのソース出すコンパイラはいくらでもあるし

551デフォルトの名無しさん (ワッチョイ 9f8a-/CVT)2018/03/16(金) 23:46:17.13ID:ObjPIdw20
VHDL出してもいいよね〜

552デフォルトの名無しさん2018/03/17(土) 00:28:10.69
シェルスクリプトとまでは言わないからPerlスクリプトを出力して欲しい

553デフォルトの名無しさん (ワッチョイ 5b9f-JSsP)2018/03/17(土) 03:07:05.34ID:ZFtG2t0c0
C++の非仮想関数 == Cの普通の関数
C++の仮想関数 == structの項(vtbl)の項

554デフォルトの名無しさん (アウアウエー Sa93-0FUd)2018/03/17(土) 04:35:29.26ID:YYJgzE2Qa
>>553
違うね

555デフォルトの名無しさん (ワッチョイ 9f8a-/CVT)2018/03/17(土) 07:17:45.03ID:qzfhHg+K0
>>553
上の方の関数。普通の関数pointerで保持出来るの?

556デフォルトの名無しさん (ワッチョイ 6102-hKdO)2018/03/17(土) 07:35:06.72ID:zYYcg2u/0
C++のextern "C"関数 == Cの関数
Cに普通じゃない関数ってあるんだっけ

557デフォルトの名無しさん2018/03/17(土) 07:51:22.83
>>555
そんなの当たり前じゃん
まさかできないと思った?

558デフォルトの名無しさん (ワッチョイ 9f8a-/CVT)2018/03/17(土) 08:58:53.90ID:qzfhHg+K0
>>557
先生、非仮想なメンバー関数をcの構文では保持出来ません。
例をご教示願います

559デフォルトの名無しさん2018/03/17(土) 09:00:39.42
>>558
「上の方の関数」すなわち「Cの普通の関数」を
「普通の関数pointerで保持出来るの?」
→Cの普通の関数は、普通の関数ポインタで保持できます

質問文に忠実に答えただけだが、何か問題でも?

560デフォルトの名無しさん (ワッチョイ 11b5-ywpa)2018/03/17(土) 13:08:05.54ID:8xjJdoU40
Cにゃメンバーって言語レベルの概念は無いから、そういうのはコーディング時に人様がメンバーのつもりになる書き方を明示的にやらないとならないんだよな。

561デフォルトの名無しさん (ワッチョイ 21b3-fr1+)2018/03/17(土) 13:47:23.11ID:8tKqJ0BR0
namespace のことを脇においとけば
非仮想関数って FILE 構造体と その関数だべ

562デフォルトの名無しさん (ワッチョイ 4d04-Ue6H)2018/03/17(土) 13:51:13.91ID:V9AqDEvW0
LLVMはまずパースレイヤーが中間言語出力して中間言語を解釈するレイヤーが各種コードに吐き分けるということができる。
3段階のコード最適化ができるはずだったが、ちょっと迷走してる。

563デフォルトの名無しさん (ワッチョイ a3e2-hKdO)2018/03/17(土) 16:56:54.32ID:x+XAbvy+0
>>557
struct A
{
void func() {} //C++の非仮想関数
};
void (*ptr)(); //普通の関数pointer
ptr = &A::func; //まさかできると思った?

564 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)2018/03/17(土) 18:20:57.82ID:qqOQsVrX0
>>555
できませんね
https://ideone.com/5sW1lw

565片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF)2018/03/17(土) 18:25:10.24ID:6umCop+Md
クラス内部の関数をstaticにすると、、、

566片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF)2018/03/17(土) 18:26:02.67ID:6umCop+Md
普通の関数みたいに参照できる。

567デフォルトの名無しさん (ワッチョイ a3e2-hKdO)2018/03/17(土) 20:05:40.42ID:x+XAbvy+0
ここはCスレということをお忘れなく

568デフォルトの名無しさん (ワッチョイ 7761-7BQk)2018/03/18(日) 08:12:11.88ID:5MZOkfmV0
https://ideone.com/gSWZOR
上のコードを見てください。
sprintfを続けて使うと文字が一つも出力されません
なぜですか?

569デフォルトの名無しさん (ワッチョイ 7761-7BQk)2018/03/18(日) 08:14:12.57ID:5MZOkfmV0
ちょっと間違えました。
上の投稿は無視してください


lud20180319192421
このスレへの固定リンク: http://5chb.net/r/tech/1519046038/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C言語なら俺に聞け 145 ->画像>4枚 」を見た人も見ています:
C言語なら俺に聞け 150
C言語なら俺に聞け 144
C言語なら俺に聞け 143
C言語なら俺に聞け 151
C言語なら俺に聞け 140
C言語なら俺に聞け 149
C言語なら俺に聞け 146
C言語なら俺に聞け 147
C言語なら俺に聞け 142
C言語なら俺に聞け 152
C言語なら俺に聞け 153
C言語なら俺に聞け 148
C言語なら俺に聞け 155
C言語なら俺に聞け 157
C言語なら俺に聞け 156
C言語なら俺に聞け 139
C言語なら俺に聞け 160
C言語なら俺に聞け 154
C言語なら俺に聞け 159
C言語なら俺に聞け
C言語なら俺に聞け 163 (511)
C言語なら俺たちに聞け パート0001
●●●●TCL/TKなら俺に聞け 4●●●●
C++ Builderなら俺に聞け [無断転載禁止]©2ch.net
CORBAなら俺に聞け
ゲームプログラムなら俺に聞け32
ゲームプログラムなら俺に聞け31
キャンプの事なら俺に聞け! [無断転載禁止]
ゲームプログラムなら俺に聞け33©2ch.net
【長文爺】オーディオのことなら俺に聞け【真希波】
LinuxカーネルはC言語なのにオブジェクト指向
パソコンのことなら何でも俺に聞け [無断転載禁止]
プログラミングを始めたい。どの言語ならこの先生きのこれる?
steamに関する質問なんでも答えます わからないことは俺に聞け
機械語なら俺に質問しろ!その2
C言語上級者スレ
c言語的にjavaを教えて
C言語相談室(上級者専用)
C言語でRADって作れるんでしょうか?
C言語でテトリス作れる人来て!👾
1行ずつC言語を書いてくスレ(目標なし)
C言語の設計ミスった危険な関数トップ10決めようぜ
【プログラミング】止まらないC言語の下落 - 12月言語ランキング [無断転載禁止]
C言語の第一歩
ソケット通信なら俺に任せろ
C言語 誰か教えて
SQLなら俺に訊け [無断転載禁止]
C言語をやりたいんですが
ラズパイ4でc言語開発する方法教えてくれ
韓国 文在寅、ついに検察を恫喝 『これ以上、俺の可愛いタマネギをいじめるなら俺にも考えがあるぞ』
c言語教えてくれ (9)
C言語で関数を書いていくスレ (42)
C言語を学びたいんやが、まず何からやればいい? (43)
D言語 Part35
■改竄なら俺にまかせろ(すが)■
あかりちゃんなら俺にもチョコくれると思う
■隠蔽なら俺にまかせろ(すが)■
Amazonに返品された商品の多くが廃棄処分となっていることが明らかに。いらないなら俺にくれよ
06:26:31 up 8 days, 16:50, 0 users, load average: 7.47, 7.84, 8.02

in 0.030815124511719 sec @0.030815124511719@0b7 on 122020