C言語なら俺に聞け 137 [無断転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 1b7b-m9GF)
2016/10/04(火) 20:23:58.44ID:iEd5oTSN0質問するなら環境(OS/コンパイラ)とエラーメッセージ(あれば)を最低限書く
数行に収まらないソースは以下を適当に使って晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
前
http://echo.2ch.net/test/read.cgi/tech/1468154937/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0002デフォルトの名無しさん (ワッチョイ 973c-oF7n)
2016/10/04(火) 21:42:49.68ID:YG+Zkcgg00003デフォルトの名無しさん (ワントンキン MMcf-Xr8z)
2016/10/04(火) 22:26:07.73ID:b4l9l8B3M今となってはほぼわかってることだけど
新しい発見もいくつかあって読物として面白かった
日本語が変なのでソースから意味を読み取れないと厳しいかもね
0004デフォルトの名無しさん (ワッチョイ 477b-eUFH)
2016/10/04(火) 23:09:56.96ID:MLgwtfwZ0式の評価が、確実に終了している場所を、副作用完了点と言うが、この4つには副作用完了点がある。
これら以外は、どこが先に評価されるか決まっていない
x[a] + a++
この式で、x[a]がインクリメント前か後か、どちらのaを使うか、分からない。未規定
MISRA-C 2004 12.2
a = ++a
副作用完了点間において、同一の変数を、2回以上更新しているから、未定義
MISRA-C 2004 5.1
0005デフォルトの名無しさん (ワッチョイ 477b-eUFH)
2016/10/04(火) 23:20:52.79ID:MLgwtfwZ0素人がコーディングすると、未規定・未定義になりやすいから
MISRA-C 2004 12.13
Go では、これらは式じゃなく文になっていて、単独でしか使えない
0006デフォルトの名無しさん (ドコグロ MM27-rzru)
2016/10/05(水) 09:16:44.50ID:9+CuacNrM0007デフォルトの名無しさん (アウアウ Sa77-S8iu)
2016/10/05(水) 09:48:02.71ID:i3PbFTOfafd = open(〜);
close(0);
dup2(fd, 0);
close(fd);
というのを見かけますが、あえてデフォルト値での0,1,2の標準入出力エラーを潰す必要性がある場合があるんでしょうか?
これしてしまうと画面に出力したくなった場合にどうやって出力するのでしょうか?0,1,2は取っておいて3〜assignしてあげたほうがいつでも標準入出力出来るし良いと思うのですが
0008デフォルトの名無しさん (ワッチョイ 6b7b-7Sel)
2016/10/05(水) 10:45:14.02ID:EaKfNvzs02 あえて標準入出力を変更する意味があるからやっている
でもそのソースは不要なclose(0)してるのでシロウトが意味を理解せずにマネだけしてる可能性もある
その場合はdup2じゃなくてdup使えば空いてるFDを割り当ててくれる
0009デフォルトの名無しさん (アウアウ Sa77-S8iu)
2016/10/05(水) 12:17:59.11ID:oUFckdfla初心者なのでバカな質問かもしれませんが、変更する意味があるとはどの様な場合でしょうか?簡単な例えには出来ないですかね?
0010デフォルトの名無しさん (ドコグロ MM27-rzru)
2016/10/05(水) 13:11:55.91ID:9+CuacNrMシェルが標準入出力をリダイレクトする場合とか
webサーバがCGIプログラムを起動するときとか
0011デフォルトの名無しさん (ワッチョイ c37b-7Sel)
2016/10/05(水) 13:12:00.77ID:g1EfRYOl00012デフォルトの名無しさん (ワッチョイ 1f13-kUAU)
2016/10/05(水) 19:38:51.18ID:VUH0FpmF00, 1 を潰すことはあっても 2 を潰すことはないな‥
0013デフォルトの名無しさん (スフッ Sda8-xaNP)
2016/10/06(木) 16:58:52.07ID:VkVdfdR0d0014デフォルトの名無しさん (ワッチョイ f97b-Nuoi)
2016/10/06(木) 17:08:42.17ID:eAWsHHNz00015デフォルトの名無しさん (ワッチョイ b1dc-lo/1)
2016/10/06(木) 17:15:28.15ID:5ou6x1p80質問が漠然としすぎてて答えられないよ。
Cで「スタックを操作する」と言われて俺でもすぐ思いつくネタがいくつもある。
可変引数関数、スタックマシンのエミュレータ、Luaなんかとの連携...
もっと具体的に絞り込んでくれ。
0016デフォルトの名無しさん (ワッチョイ 98ff-psoB)
2016/10/06(木) 17:15:43.44ID:qjp5uqHo0コレクションの話なのかメモリエリアの話なのか
0017デフォルトの名無しさん (スフッ Sda8-xaNP)
2016/10/06(木) 18:49:22.65ID:VkVdfdR0dすいません
popとキーボードで入力したらスタックをポップする
pushだとスタックをプッシュするといった感じのものです
0018デフォルトの名無しさん (ワッチョイ ab6f-xaNP)
2016/10/06(木) 18:54:54.41ID:cxWhlLpu00019デフォルトの名無しさん (ワッチョイ c63c-lsIp)
2016/10/06(木) 18:56:01.73ID:fmiAnVuG0入力操作により 何を詰み 何を取り出すのか
0020デフォルトの名無しさん (JP 0Ha5-xaNP)
2016/10/06(木) 18:56:16.43ID:nqog8BGgH0021デフォルトの名無しさん (ワッチョイ c67d-yd9a)
2016/10/06(木) 19:12:22.12ID:RCNTdGW500022デフォルトの名無しさん (ドコグロ MM94-xaNP)
2016/10/06(木) 19:32:51.60ID:pwZHamuxM昔、68000 で実装したわ
(a0)+ みたいなアドレッシングモードがあるので結構相性よかった
0023デフォルトの名無しさん (アウアウ Sac5-xaNP)
2016/10/06(木) 20:20:06.40ID:PohpMD2Qa質問も説明もめちゃくちゃだな。もうちょい勉強頑張れ。
1配列を作る
2pushでポインタをインクリメント
3popでポインタをデクリメント
あとは自分で考えよう。
0024デフォルトの名無しさん (ワッチョイ beb2-lsIp)
2016/10/06(木) 20:25:15.02ID:BuOsO87Q00025デフォルトの名無しさん (アウアウ Sac5-xaNP)
2016/10/06(木) 21:08:53.95ID:PohpMD2Qa質問者の語彙を見るとその質問の意味が伝わんない気がする。。。
0026デフォルトの名無しさん (ワッチョイ c63c-xaNP)
2016/10/06(木) 21:59:36.18ID:Xaq9g6kU0http://capm-network.com/?tag=C%E8%A8%80%E8%AA%9E%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF
0027デフォルトの名無しさん (ワッチョイ c67d-yd9a)
2016/10/06(木) 23:22:58.97ID:RCNTdGW50CP/MでFORTHを使ったことがある。
FORTHで、実数計算ができると便利だとおもうのですが、
実数計算のできるFORTHってあるのでしょうか。
0028デフォルトの名無しさん (ワッチョイ 6b7b-xaNP)
2016/10/06(木) 23:29:54.79ID:+4a+9Smq00029デフォルトの名無しさん (スプッッ Sdf8-xaNP)
2016/10/06(木) 23:44:42.58ID:WOr5awvqd0030デフォルトの名無しさん (ワッチョイ 3041-pu+C)
2016/10/07(金) 00:16:03.31ID:WyrSxLB800031デフォルトの名無しさん (ブーイモ MMa8-9w9I)
2016/10/07(金) 00:37:11.84ID:rPaqbGGGM0032デフォルトの名無しさん (ワッチョイ 15c1-99xo)
2016/10/07(金) 01:31:44.62ID:4M3j5gXh0子 write ‘1’ ←中身
親 read ‘1’
子 write ‘2’
親 read ‘2’
親 write ‘3’
子 read ‘3’
このような通信したときにプロセスは並列に動いてるので、場合によっては
子 write ‘1’
子 write ‘2’←親が読む前にまた書き込んでしまった
親 read ‘1’ ‘2’
この様になると困るので、区切り文字の様なものが入ってるのでしょうか?
‘1’区切り文字’2’とすることによって1ずつreadできるのでしょうか? EOFですか?
0033ot (ワッチョイ c63c-lsIp)
2016/10/07(金) 01:52:11.03ID:wePoJpkC0手入力の時 一気に入力しようが 1文字づつ ゆっくり入力しようが区別がつかない
それがストリームってもん
区別したければ区切りもwriteする約束にする (よくあるのが テキストベースで \n を区切りにするようなの
read する側は 区切りが来るまで 1文字づつ受ける
TCP通信でのパケットの分断
"1234" "567" と 2回 send したのに "12" "345" "67" と 3回 recv することだってある
と同じこと (並び順は保障するけど、1回の操作で得られる塊は不定長)
0034デフォルトの名無しさん (ワッチョイ 15c1-99xo)
2016/10/07(金) 02:00:37.43ID:4M3j5gXh0なるほどテキストベースだと¥nを区切りにして
バイナリーだと区別のつけようがないのでsizeofで指定されたバイトいっぱいか終端くるまで読み込むんですかね?
0035デフォルトの名無しさん (ワッチョイ c63c-lsIp)
2016/10/07(金) 02:08:19.70ID:wePoJpkC0固定長なら その長さ単位で
可変長さなら ヘッダに長さを置いて 続けてバイナリ本体を
ってな具合
0036デフォルトの名無しさん (ワッチョイ c63c-lsIp)
2016/10/07(金) 02:17:08.42ID:wePoJpkC0ひたすらうけっぱなしにしてくだけ だな
0037デフォルトの名無しさん (ワッチョイ 15c1-RF7M)
2016/10/07(金) 03:20:16.46ID:4M3j5gXh0なるほど有難うございます
0038デフォルトの名無しさん (ドコグロ MM5c-xaNP)
2016/10/07(金) 08:18:39.49ID:H2xXfCEOMfloat 使えないって、いつの時代だよ。
FORTH94 から標準化されてるぞ。
0039デフォルトの名無しさん (ワッチョイ c67d-yd9a)
2016/10/07(金) 10:27:34.54ID:oA26EQDq0そうでしたか。
情報有難うございます。
なにしろ8BitのCASIO FP-1100の時にFORTHをやっただけで、
今のWindows 7のパソコンでは、やっていないものですから。
さっそく、試してみます。
0040デフォルトの名無しさん (ガラプー KKdb-zJSo)
2016/10/07(金) 10:31:07.97ID:NRQfl7yKKそれはストリームの前にバッファがあるから
問題が少し違うんじゃね
0041デフォルトの名無しさん (アウアウ Sac5-RF7M)
2016/10/07(金) 14:12:20.56ID:vDcoLEHxa>>32です。
それもお聞きしたかったです。
あるプロセスでバッファを用意してそこにデータを貯めてストリームに流そうが、単発でどんどんストリームに流そうがデータを受けるプロセスがいつストリームから読んでくれるか分からない以上ストリーム内部にバッファする機能があると思うのです。これのサイズとかってどうやって決められているんでしょうか?
0042デフォルトの名無しさん (ドコグロ MM9b-xaNP)
2016/10/07(金) 18:13:13.16ID:I3WlgDG5Mread(2), write(2)だとFILEのストリームは使われない
FILEのバッファならsetvbuf
0043デフォルトの名無しさん (ガックシ 0639-99xo)
2016/10/07(金) 19:11:15.85ID:dwW+5xo06read,writeでファイルディスクリプタに流すときはバッファ機能はないんですか?
004442 (ワッチョイ ab6f-Ea/d)
2016/10/07(金) 22:14:58.54ID:gWzjBkAk0read(2)やwrite(2)はシステムコールなので、プロセス空間にバッファはない。
もしかしてパイプのことをバッファと言ってるのかもしれない。
カーネル空間(ファイルシステム)にあるバッファと言えなくもない。
ストリームのバッファとは違うけど。
そのサイズはOS依存だけど、Linux の場合は pipe(7)によると
4096バイト (2.6.11より前)、65536バイト(2.6.11以降)
0045デフォルトの名無しさん (ワッチョイ b17b-lsIp)
2016/10/08(土) 00:33:15.92ID:n14d8Sf501対1なんで、各PCがサーバ兼クライアントみたいになると思うんですが
クライアント用のソケットとサーバ用のソケットの同居が難しくて
サーバ用はacceptすると待機状態になってプログラムの進行が止まって
クライアント用はサーバがacceptしていないとそもそも接続が成り立たないみたいで
サーバとして待機するか、クライアントとして接続しに行くかの二者択一状態にあります
なので、クライアントの対向のサーバへの接続を、自己のサーバでのacceptと同時並行する
みたいな方法があれば便利なのですが、ありますかね?
それともそもそもクライアントとサーバのプログラムは別々にしていた方がやっぱり楽なのでしょうか?
0046デフォルトの名無しさん (スッップ Sda8-xaNP)
2016/10/08(土) 00:36:17.84ID:VHjsKdufdスレタイ読める?
winsockは言語に依存しないAPIだぞ
0047デフォルトの名無しさん (ワッチョイ 5b00-BQsb)
2016/10/08(土) 00:38:12.24ID:c/yhHh8V0ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1414709836/
0048デフォルトの名無しさん (ワッチョイ b17b-lsIp)
2016/10/08(土) 00:41:21.91ID:n14d8Sf50>>47
すみません、C言語で使ってたもんで
0049デフォルトの名無しさん (ワッチョイ 15c1-RF7M)
2016/10/08(土) 04:22:04.60ID:3dit4BZy0有難うございます。
まさにそれでした。パイプの管の中に入れるサイズが知りたかったので
0050デフォルトの名無しさん (ワッチョイ fc7b-glPk)
2016/10/08(土) 11:01:23.54ID:cRcu85q40本に書いてあるサンプル程度なら、たいてい、C/S は1つのファイルに書いてある
本格的なものなら、別ファイルにする
0051デフォルトの名無しさん (ワッチョイ 15c1-99xo)
2016/10/12(水) 01:50:49.60ID:mIKkq4MD0二つのプロセスで共有メモリを使ってデータのやりとりをする場合
int shmget(key_t, size_t size, int shmflg);
で、第一引数に共有メモリをプロセスが使うためのパスワード?みたいなものを設定し、第二引数に確保する共有メモリのサイズ、第三引数にパーミッションとフラグをセットする
プロセスA ←メモリを確保するプロセス
shmget(12345, 100, 0777 | IPC_CREAT);
プロセスB
shmget(12345, 100, 0777);
プロセスBはAの作った共有メモリにアタッチするだけなのに、サイズの指定とパーミッションを指定しなければならない意味がわかりません。
mem = ????(ket_t);
の様に既に確保されたメモリにアタッチするだけのシステムコールが用意されてるならわかるのですが…
また、webにあるサンプルでは両方のプロセスでIPC_CREATが設定してあったりするのですが、IPC_CREATは共有メモリを新規確保するためのフラグですよね?片方だけで良いのではないでしょうか?
0052デフォルトの名無しさん (ワッチョイ fc7b-glPk)
2016/10/12(水) 04:06:50.15ID:bPYmxR+A0shmget(12345, 0, 0);
それと、そのサンプルが正しいとは限らないので、違うサンプルも見た方がいい
0053デフォルトの名無しさん (ワッチョイ 9ec0-mVVp)
2016/10/12(水) 07:16:10.95ID:sC2BZgb300054デフォルトの名無しさん (ワッチョイ 5b00-BQsb)
2016/10/12(水) 07:53:23.13ID:3Wyv7hu00どう実用的な意味があるのかは分からないけど、このAPIは例えばAが100バイト確保したのを
Bは50バイトだけ共有するというのを許しているのでサイズは指定する必要あり。
パーミッションは、そのプロセスの読み書きの意思表示を指定するになる。 Bが例えば書く
パーミッションを指定しても、Aが許してなければBはこのコールでEACCESエラーになる。
0055デフォルトの名無しさん (アウアウ Sac5-RF7M)
2016/10/12(水) 13:46:51.99ID:22p18m+ma>>53
>>54
なるほど。回答有難うございます
0056デフォルトの名無しさん (ワッチョイ 2187-TInN)
2016/10/12(水) 18:53:55.97ID:Ecy043Us0ttp://www.geocities.jp/m_Hiroi/linux/clang12.html
上記サイトの最後の「プログラムリスト1」の連結リストのプログラムで、
List *ls = malloc(sizeof(List));
と書かれた部分は
List l;
List *ls = &l;
と書いてもよいのではないか、と思って書き換えたら実行時にSegmentation fault(コアダンプ)が起きました
ls.topをprintfで調べた所、どうやら関数に渡される事でls.topの値(つまり指すポインタ)が書き換わっているようです
(ポインタに関する知識レベルはC言語ポインタ完全制覇を途中で挫折したレベルで、更にそれから数ヶ月空いてるので忘れてる部分もあるかもしれません)
何故こういう事が起こるのか、解説お願いします
0057デフォルトの名無しさん (ワッチョイ 2187-TInN)
2016/10/12(水) 18:59:27.30ID:Ecy043Us0insert_nth関数の
cp->next = make_cell(x, cp->next);
で起きるようです
0058デフォルトの名無しさん (アウアウ Sac5-xaNP)
2016/10/12(水) 19:10:35.69ID:5VjkdN+Gaはローカル変数だからmake_listから抜けた時点で破壊されるから
0059デフォルトの名無しさん (ワッチョイ 2187-TInN)
2016/10/12(水) 19:21:54.37ID:Ecy043Us0レスありがとうございます!
その場合関数を飛び越えても構造体が破壊されない領域にポインタが指す構造体が記憶されるっていうことでしょうか。
もしそうならその場所はヒープ領域で合ってますか?
0060デフォルトの名無しさん (ワッチョイ 2187-TInN)
2016/10/12(水) 19:22:26.45ID:Ecy043Us00061デフォルトの名無しさん (ワッチョイ 2187-TInN)
2016/10/12(水) 19:35:00.26ID:Ecy043Us0ただローカル変数が生き残らないというのは自分じゃ解決できなかったと思います。ありがとうございました。
0062デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 10:22:56.64ID:pWVjxgqB0場合はどうしたらよいのでしょうか、型はQWORDです。
0063デフォルトの名無しさん (ワッチョイ 1b7b-Oa01)
2016/10/13(木) 10:29:44.71ID:H3/IB+RL01 0 判定なら & だけど
0064デフォルトの名無しさん (ワッチョイ 874f-8qPS)
2016/10/13(木) 10:31:01.18ID:Ld+W/t4G0QWORD って型で、それをどう記述するかは知らない
int 型変数 i なら
i & (1 << j)
j は特定の位置 0 〜 int 型のビット数-1 まで
0065デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 10:33:45.02ID:pWVjxgqB00066デフォルトの名無しさん (ワッチョイ 1b7b-b88/)
2016/10/13(木) 10:46:18.01ID:H3/IB+RL01 だよ;
}
0067デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 10:56:51.84ID:pWVjxgqB00068デフォルトの名無しさん (JP 0H1f-Oa01)
2016/10/13(木) 11:05:01.05ID:nvgFGz34H0069デフォルトの名無しさん (ワッチョイ e300-n62S)
2016/10/13(木) 11:27:25.75ID:FTZZo7+T0C では != 演算子の方が & より優先度が高いので
if ((a & 0x0008) != 0) {
1 だよ;
}
としないとだめだよ。
0070デフォルトの名無しさん (ワッチョイ 1b7b-Oa01)
2016/10/13(木) 11:33:31.41ID:H3/IB+RL00071デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 11:50:33.60ID:pWVjxgqB00072デフォルトの名無しさん (ワッチョイ cba1-97v9)
2016/10/13(木) 11:54:02.21ID:mw9SJIVD0int b = 1;
int k = 0;
int MASK[MASK_SIZE];
MASK[k] = b;
for(k = 1; k < MASK_SIZE; k++) {
b = 2 * b;
MASK[k] = b;
}
/* &をして比較 */
b = n & MASK[bit];
b = b == MASK[bit] ? 1 : 0;
http://echo.2ch.net/test/read.cgi/tech/1198344909/274-275
0073デフォルトの名無しさん (ワッチョイ 237b-2yk0)
2016/10/13(木) 12:18:26.27ID:ord6mGIn0石器人かよ
0074デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 12:46:26.42ID:pWVjxgqB00x20A40000というバイナリがaに入っていた場合に
if(a & 0x20)で0x20があるかという意味になるのでしょうか
勘違いをしていたらすいません
0075デフォルトの名無しさん (ワッチョイ 6f9f-vjb2)
2016/10/13(木) 12:51:41.22ID:ARQtMSWi0> if(a & 0x20)で0x20があるかという意味になるのでしょうか
Yes
ちなみに0x20A40000 に 0x20 のビットは無いぞ
0076デフォルトの名無しさん (ワッチョイ 1b7b-Oa01)
2016/10/13(木) 12:55:39.30ID:H3/IB+RL0論理積、論理和、排他的論理和
勉強してみてちょ
0077デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 14:17:24.60ID:pWVjxgqB0これで0x20A40000の中に0x20000000があるかという意味になりますでしょうか
0078デフォルトの名無しさん (ワッチョイ 874f-8qPS)
2016/10/13(木) 14:36:58.67ID:Ld+W/t4G04ビットまとまりが 0010 になってて欲しいのか
0079デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 14:51:50.71ID:pWVjxgqB0特定の8バイトがどうなっているかを知りたいです
0080デフォルトの名無しさん (アウアウ Sa97-Oa01)
2016/10/13(木) 14:58:28.96ID:gFIKAE5eaその全8バイトを比較するって普通に==でいいんじゃ…
0081デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 15:00:14.97ID:pWVjxgqB00082デフォルトの名無しさん (アウアウ Sa97-Oa01)
2016/10/13(木) 15:51:47.31ID:gFIKAE5ea(a & 0xff000000)==0x20000000
ちゃんと「ビットアンド」とかで自分で調べたほうがいいよ
0083デフォルトの名無しさん (ワッチョイ 077b-ziuw)
2016/10/13(木) 16:15:07.74ID:Uji1zuLq0その位置の8bitと比較したいのであれば0x00000000ff000000でマスクしないと
上位DWORDにビットが立っていたら判定ミスする
0084デフォルトの名無しさん (ワッチョイ 87ef-8qPS)
2016/10/13(木) 16:28:14.46ID:pWVjxgqB0ありがとうございます。なんとなくわかってきました。
やりたいことができそうです
0085デフォルトの名無しさん (ドコグロ MM37-Oa01)
2016/10/13(木) 16:42:43.33ID:N8ZLQmvbM0086デフォルトの名無しさん (ワッチョイ eb85-torC)
2016/10/13(木) 18:25:41.64ID:zUN0ltZm0の処理系を探しています
誰か心当たりはありませんか?
C++じゃなくてもいいです
0087デフォルトの名無しさん (ワントンキン MM8f-310H)
2016/10/13(木) 19:22:23.00ID:u+icdn37M(a & 0xff000000)!=0
上位8ビットの0x20だけがONを知りたい
(a & 0x20000000)==0x20000000
でもこれだと
a == 0x20000000
と同じだね
上位8ビットの0x20がONならなんでもってなら
(a & 0x20000000)!=0
0088デフォルトの名無しさん (JP 0H97-Oa01)
2016/10/13(木) 19:32:12.00ID:tbh8ZbrJHhttps://en.m.wikipedia.org/wiki/64-bit_computing
のILP64,SILP64のとこ見れば、特殊な処理系はありそうだね
入手や使用は難易度高そう
0089デフォルトの名無しさん (アウアウ Sab7-ByRo)
2016/10/13(木) 19:59:50.46ID:RHCll5oYarightとleftとかopenとcloseの文字数が違って発狂しそうなんだけどどうすればいい?
0090デフォルトの名無しさん (ドコグロ MM2f-Oa01)
2016/10/13(木) 20:06:23.07ID:TvKloCS2M精神を鍛えて気にしないようにする
0091デフォルトの名無しさん (ワッチョイ 6f9f-vjb2)
2016/10/13(木) 20:10:20.39ID:ARQtMSWi0> (a & 0x20000000)==0x20000000
> でもこれだと
> a == 0x20000000
> と同じだね
全然違う
0092デフォルトの名無しさん (ワントンキン MM8f-310H)
2016/10/13(木) 20:34:06.89ID:u+icdn37Mあ、すまん
0093デフォルトの名無しさん (ブーイモ MM4f-KUav)
2016/10/13(木) 20:47:38.84ID:GbenlpnTM長さが違うからミスに気づきやすいと前向きにかんがえる
0094デフォルトの名無しさん (ワッチョイ 9f13-torC)
2016/10/13(木) 20:53:14.10ID:iSzZT/Mz0OS に関係なく int を 64 bit にとることは可能だとは思うんですが
需要はないようですね,なんだかもったいない
0095デフォルトの名無しさん (ワッチョイ d70b-Oa01)
2016/10/13(木) 22:24:55.16ID:/hd0MmIW0intが8バイトになったらむしろメモリがもったいない
0096デフォルトの名無しさん (ワッチョイ ef3c-Oa01)
2016/10/13(木) 22:33:37.10ID:hvG1pVAX0わざわざ互換性をなくすほどのメリットないから当たり前
0097デフォルトの名無しさん (ワッチョイ d790-Oa01)
2016/10/13(木) 22:54:23.60ID:ZHmg8o8/00098デフォルトの名無しさん (ワッチョイ ef7d-dAUv)
2016/10/13(木) 23:51:05.99ID:98QyjLq508バイトの整数ならば、
Fortran 95 では、
integer(8)
と宣言することで、8バイトの整数になります。
0099デフォルトの名無しさん (ワッチョイ d70b-Oa01)
2016/10/14(金) 00:30:09.45ID:7CIQwa0300100デフォルトの名無しさん (ワッチョイ e300-n62S)
2016/10/14(金) 05:48:02.98ID:nsUszi5400101デフォルトの名無しさん (ワッチョイ ef7d-dAUv)
2016/10/14(金) 06:45:03.22ID:cSk0pU640gccで使えますか。
私は、long long intよりもlong long doubleを使いたいのですが、
long long doubleはlong doubleと同じ値になるので、
小数点以下20桁以上の数値を扱う必要上
やむをえずfortran 95を使っています。
gccでlong long doubleが使えるとうれしいのですが。
0102デフォルトの名無しさん (ワッチョイ d790-Oa01)
2016/10/14(金) 07:45:44.60ID:swVgBBHi0long long long long int は256bit?
unsigned long long long long int とかもできるのかな?
0103デフォルトの名無しさん (ドコグロ MM6f-Oa01)
2016/10/14(金) 08:46:25.11ID:QBLxORarM0104デフォルトの名無しさん (ドコグロ MM87-Oa01)
2016/10/14(金) 09:05:31.40ID:HwCvFXaSM0105デフォルトの名無しさん (ワッチョイ 8742-8qPS)
2016/10/14(金) 09:25:31.21ID:ws3u9Hag00106デフォルトの名無しさん (ワッチョイ 3b4e-x3Zw)
2016/10/14(金) 09:51:15.71ID:lawu0WKC0任意精度演算
https://ja.wikipedia.org/wiki/%E4%BB%BB%E6%84%8F%E7%B2%BE%E5%BA%A6%E6%BC%94%E7%AE%97
0107デフォルトの名無しさん (ワッチョイ ef7d-dAUv)
2016/10/14(金) 10:16:31.42ID:cSk0pU640御教示ありがとうございます。
MAPMを使ってみようかと思っています。
0108デフォルトの名無しさん (アウアウ Sab7-ByRo)
2016/10/14(金) 11:32:24.48ID:sMs61t4Ka0109デフォルトの名無しさん (JP 0Hcf-8qPS)
2016/10/14(金) 14:15:36.04ID:fG6UsqE8Hアンダースコア入れてる人いるんだけど
_getchar
getchar
何がちがうの?
0110デフォルトの名無しさん (ワッチョイ 9f13-torC)
2016/10/14(金) 21:23:59.12ID:5nO9NwFR0short int / int /long int のビット数が変わるとバグる書き方そのものがすでにおかしい
0111デフォルトの名無しさん (ワッチョイ ef3c-Oa01)
2016/10/15(土) 09:23:17.36ID:amISm65B0おかしいからって無視していいものでもない
0112デフォルトの名無しさん (ワッチョイ eb85-torC)
2016/10/15(土) 10:50:49.45ID:eBSmAB5D0バグのあるプログラムは切っていいと思う
0113デフォルトの名無しさん (ワッチョイ 8742-8qPS)
2016/10/15(土) 11:03:20.90ID:/HXJq9om00114デフォルトの名無しさん (ワッチョイ d790-Oa01)
2016/10/15(土) 11:43:55.72ID:DVENaldK0long int は32bitって決まってるんだからbit数変わったらバグっても文句は言えんだろ。
0115デフォルトの名無しさん (ワッチョイ 8390-Oa01)
2016/10/15(土) 11:50:34.93ID:fZpbICuu0誰が決めたんだよ
0116デフォルトの名無しさん (ドコグロ MM6f-Oa01)
2016/10/15(土) 12:32:05.06ID:F0NY5SKqMバグ?
移植性の話とバグの区別もつかないアホは黙ってろ
0117デフォルトの名無しさん (ワッチョイ 67d4-Vk+K)
2016/10/15(土) 12:56:01.28ID:9RFQ8dC+0その _getchar が、どこかで #ifdef〜#else 等で括られて
#define されてたら、何でそうゆうことをするのかちょっと考えてみよう
0118デフォルトの名無しさん (ワッチョイ 4fe1-Oa01)
2016/10/15(土) 14:49:32.59ID:gt76Wp9S0普通のプログラムは32bitときめつけることでプログラムを簡単かつ高速にできてる
0119デフォルトの名無しさん (ササクッテロ Spd7-DI90)
2016/10/15(土) 15:08:48.00ID:XLlIg/XVpただそれだけ
全ての環境で動かすって崇高な目的があるならその通り作ればいい
0120デフォルトの名無しさん (ワッチョイ 6f85-/yIn)
2016/10/15(土) 17:15:47.72ID:4k82dJ130これが4バイトとしてそれに依存したことやってるとそこでバグるんだよな
0121デフォルトの名無しさん (ワッチョイ 8742-8qPS)
2016/10/15(土) 17:37:15.73ID:/HXJq9om00122デフォルトの名無しさん (ドコグロ MM87-Oa01)
2016/10/15(土) 17:51:24.19ID:C50yWB55M最小で32bitだったね。
LONG_MINとLONG_MAXで毎回チェックすればいいのかな?
0123デフォルトの名無しさん (ワッチョイ 9f13-TMgs)
2016/10/15(土) 18:58:53.03ID:e9kQ2fo60決まってない
>>116
移植性を考えたプログラミングなら int のビット数が変わったくらいで挙動が変わってはいけない
0124デフォルトの名無しさん (ワッチョイ 4fe1-Oa01)
2016/10/15(土) 19:15:46.94ID:gt76Wp9S0そりゃそうだ
Cの仕様はかなり柔軟なので完全な移植性を目指すとコストがかかるし速度も遅くなる
現状だとパソコン用なら1byteは8bit、intは16bitか32bitぐらいは仮定してもいいんじゃない?
0125デフォルトの名無しさん (ワッチョイ 237b-2yk0)
2016/10/15(土) 19:32:56.04ID:v/sUl3PG00126デフォルトの名無しさん (ワッチョイ ef3c-Oa01)
2016/10/15(土) 19:50:59.72ID:amISm65B0> 移植性を考えたプログラミングなら int のビット数が変わったくらいで挙動が変わってはいけない
で、それがどうかしたのか?
まさかそれをバグって言う訳じゃないだろ
0127デフォルトの名無しさん (ワッチョイ 237b-h+jq)
2016/10/15(土) 21:13:36.49ID:OYcQDep80スタックセグメントに0x00を格納したいのですが
どのように指定すればよいでしょうか。
以下のように指定すると、0x8c 0x08 0x40まではメモリに書き込めるのですが、
null文字(\x00)が無視されて書き込まれません。
./a.out $(perl -e 'print
0128デフォルトの名無しさん (ワッチョイ 236f-EL3R)
2016/10/15(土) 21:55:32.42ID:xMvm/IeT0中途半端に用語を使ってるのか全く意味がわからん
0129デフォルトの名無しさん (ワッチョイ 237b-2yk0)
2016/10/15(土) 22:57:14.26ID:v/sUl3PG0nul文字を渡せるコマンドインタープリターは存在しないので不可能
0130デフォルトの名無しさん (ワッチョイ 0bc1-xOZv)
2016/10/16(日) 00:47:33.52ID:FFXFOptY00131デフォルトの名無しさん (ワッチョイ d70b-Oa01)
2016/10/16(日) 01:25:23.57ID:hq87OQMU0ipアドレスが分かってるなら直接sockaddr_inを作ればいい
名前解決する可能性があるならgetaddrinfo()の結果のaddrinfo構造体からsockaddrなどを取り出して使用する
0132デフォルトの名無しさん (アウアウ Sa97-xOZv)
2016/10/16(日) 11:07:21.88ID:eyN4rlMja有難うございます
0133デフォルトの名無しさん (アウアウ Sa97-xOZv)
2016/10/16(日) 11:18:46.00ID:eyN4rlMjaもうひとつ聞きたいのですが結果的にDNSに名前を問い合わせ対になるIPを取ってくるのはリゾルバだと思うのですが、となるとgetaddrinfo()の役割としては単純にリゾルバに名前を渡すだけの関数ということでよろしいでしょうか?
0134デフォルトの名無しさん (ワッチョイ 9b6c-8qPS)
2016/10/16(日) 11:49:46.62ID:8/Jh+qKx0Cクイックリファレンス 第2版
Peter Prinz、Tony Crawford 著、黒川 利明 訳、島 敏博 技術監修
2016年11月05日 発売予定 816ページ
ISBN978-4-87311-781-2
0135デフォルトの名無しさん (ワッチョイ 67d4-Vk+K)
2016/10/16(日) 12:20:59.98ID:YOn/Zl8x0汎用的なプログラムが作成できる、なんて言われたこともあったけど。
Cの規格やコンパイラの仕様が更新され続けた結果、
最新のC規格に準拠して作成したソースは、レガシーなコンパイラだと通らないことが結構ある。
Cのメリットが1つ失われた気がして、少し寂しい。
このCクイックリファレンス第2弾は、どのCをターゲットにしてるんだろう。
0136デフォルトの名無しさん (ワッチョイ d70b-Mjzk)
2016/10/16(日) 12:47:46.15ID:hq87OQMU0それがメインになるだろうけど
他にもipv4とipv6を全く区別せずに書けるとか
0137デフォルトの名無しさん (ワッチョイ d70b-Mjzk)
2016/10/16(日) 12:49:37.33ID:hq87OQMU0httpみたいなサービス名からポート番号をセットできるとか
できることは他にもあるよ
0138デフォルトの名無しさん (ワッチョイ 8742-8qPS)
2016/10/16(日) 12:53:24.66ID:Tg88YI8G0実際に使っているシステムってあるのかな
0139デフォルトの名無しさん (ワッチョイ 077b-61yj)
2016/10/16(日) 13:15:37.56ID:p5H3vybT0ping localhost
試してみると面白いものが見られるかも
0140デフォルトの名無しさん (ワッチョイ eb42-Pcks)
2016/10/16(日) 13:18:56.05ID:Oj4qTYfT0そうだったとすると、特定のコンパイラをターゲットにはしない傾向が強まるのでは?
標準準拠で。
どのコンパイラでも動かないか、保証しないが、標準だったら動くと。
0141デフォルトの名無しさん (ワッチョイ bb55-KiBM)
2016/10/16(日) 13:56:15.95ID:eTxNhckx00142デフォルトの名無しさん (アウアウ Sa97-xOZv)
2016/10/16(日) 14:09:37.47ID:eyN4rlMjaなるほど。有難うございます
socket通信は使われる変数や構造体が種類豊富で迷いますね...
0143デフォルトの名無しさん (ワッチョイ eb3f-Oa01)
2016/10/16(日) 15:15:33.53ID:EV3272f00そんなこと言われたことあったか?
BASICで特定の命令使うなってほうが遙かに汎用性あったろ
0144デフォルトの名無しさん (ワッチョイ 8742-8qPS)
2016/10/16(日) 17:19:17.26ID:Tg88YI8G0汎用性という意味では残念な面もあった
Cコンパイラは一応OS(多分CP/M)上で動かしているので、
OSさえ動く環境なら、他の機種でもそのまま動作可能だったと思う。
0145デフォルトの名無しさん (ワッチョイ 237b-2yk0)
2016/10/16(日) 17:46:40.58ID:r3gdRhV60AppStoreに登録するには対応必須だよ
0146デフォルトの名無しさん (ワッチョイ 8742-8qPS)
2016/10/16(日) 19:14:28.60ID:Tg88YI8G0知らなかったw
ありがとう
0147デフォルトの名無しさん (ワッチョイ ef7d-dAUv)
2016/10/17(月) 00:05:22.04ID:nm1KFp4F0>Cコンパイラは一応OS(多分CP/M)上で動かしているので、
>OSさえ動く環境なら、他の機種でもそのまま動作可能だったと思う。
とはいういもののUNIIX系のCでしか使わない
netinte/in.h
というヘッダーファイルは、CP/M系やMS-DOS系のCコンパイラーでは
使えなかったのではないでしょうか。
0148デフォルトの名無しさん (ワッチョイ 67d4-Vk+K)
2016/10/17(月) 01:35:59.28ID:2f4uORQM00149デフォルトの名無しさん (ワッチョイ 236f-EL3R)
2016/10/17(月) 07:46:35.66ID:TukeUWYl0UNIXはC言語で書かれていたので移植性が高かったと言われるけど
機種依存が無かったわけじゃなくて、当時一般的なオールアセンブラよりは
移植性が高かったということ
0150デフォルトの名無しさん (ドコグロ MM6f-Oa01)
2016/10/17(月) 08:27:08.74ID:RYEF4GXMM0151デフォルトの名無しさん (ワッチョイ 8742-8qPS)
2016/10/17(月) 09:07:55.58ID:rdB0GR9t0異なる環境でソースなりバイナリなりが修正無しにそのまま動作する
または、そのまま動作する様に書くこと、と理解してる
0152デフォルトの名無しさん (ワッチョイ bbfd-8qPS)
2016/10/17(月) 12:02:32.35ID:TECxXdp500153デフォルトの名無しさん (ワッチョイ 6fba-dAUv)
2016/10/17(月) 16:46:47.83ID:WCNZhonh00154デフォルトの名無しさん (ワッチョイ 0bc1-0NeI)
2016/10/17(月) 17:50:47.90ID:0X6foIUK0クライアント側
・socketでソケットを作る
・sockaddr_inソケット構造体に情報を格納する
・connectでサーバーに接続する
・ソケットを使って読み書き
サーバー側
・socketでソケットAを作る
・sockaddr_inソケットA構造体に情報を格納する
・bindでこの二つを結びつける
・listenでソケットAを使ってクライアントからの接続を受け付ける
(ここでクライアントのconnectを聴く)
・acceptでクライアントに読み書き用のソケットBを作る
・ソケットBを使って読み書き
こういう流れでプログラムを書いてみました。
書いている段階で疑問に思ったことは
・クライアント側でbindする必要はないのか?
・1つのソケットで読み書きできるのか?出来ない場合はクライアント側も読みと書きに2つソケットが必要?
・サーバー側のソケットAはクライアントからの要求を聞くためで、ソケットBで読み or 書きをするのか?
など分かりませんでした。調べてみたりしたのですがはっきりとした回答を得られなかったのでここで質問させていただきました。
クライアント
http://ideone.com/HEAmjU
サーバー
http://ideone.com/rogkwj
コンパイルエラーは出なかったですが、ローカル環境でうまく通信できませんでした。
0155デフォルトの名無しさん (ワッチョイ 0bc1-xOZv)
2016/10/17(月) 17:54:35.50ID:0X6foIUK0環境はmacOS X sierraです
0156デフォルトの名無しさん (ワッチョイ 77ff-PHo3)
2016/10/17(月) 18:06:50.80ID:4hpKEwJL0を
server.sin_addr.s_addr = inet_addr("127.0.0.1");
にして
server側の中括弧ちゃんと合わせたら動いたけどな
0157デフォルトの名無しさん (ワッチョイ 236f-EL3R)
2016/10/17(月) 19:04:12.51ID:TukeUWYl0>>・クライアント側でbindする必要はないのか?
必要はない。するのは自由。
>>・1つのソケットで読み書きできるのか?
ソケットは双方向。 read (recv) も write (send) もできる。
>>・サーバー側のソケットAはクライアントからの要求を聞くためで、ソケットBで読み or 書きをするのか?
その通り
0158デフォルトの名無しさん (ワッチョイ 0bc1-xOZv)
2016/10/17(月) 22:23:24.46ID:0X6foIUK0有難うございます!
0159デフォルトの名無しさん (ワッチョイ 0bc1-xOZv)
2016/10/18(火) 07:26:54.81ID:mznmuPbS0inet_addrについてまだよく分からなかったので取り敢えず定義されている型に合わせて代入してみたら動かなかったですね。inet_addrで動きました
0160デフォルトの名無しさん (ブーイモ MM4f-KUav)
2016/10/18(火) 23:07:58.25ID:MLPW0iClMは
3[a]=5;
と書いてもいいらしいけどなんか有意義な使い方ある?
0161デフォルトの名無しさん (ワッチョイ d741-DI90)
2016/10/19(水) 01:36:26.91ID:iujbIW5D0シンタックスシュガーだね。
*(a+3)=*(3+a)=5とか?
0162デフォルトの名無しさん (ドコグロ MM6f-Oa01)
2016/10/19(水) 07:00:34.15ID:WbU1o71PM初心者にどやるぐらいじゃね?
0163デフォルトの名無しさん (JP 0Hb7-0NeI)
2016/10/19(水) 19:56:49.81ID:pHdEkjihHサーバー
http://ideone.com/fPQ4mZ
クライアント
http://ideone.com/QZQMXY
サーバーではsizeof(ent->d_name)分渡しているのですが、クライアントでsizeof(filename) 256byte分受け取っちゃっているのでここをどうしたら良いのか分かりません。
あらかじめどんな名前のファイルが来るのかわかっていればそのサイズ指定すれば良いと思うのですが。。。
あとサーバー側ではwhile((ent = readdir(dir)) != NULL)でループの終わりを告げれるんですが、クライアント側でソケットに流したファイル名を全て取得したあとの終わり方の告げ方が分かりません。
0164デフォルトの名無しさん (ワッチョイ ef3c-8qPS)
2016/10/19(水) 20:04:47.78ID:oxtPVmq+0http://echo.2ch.net/test/read.cgi/tech/1414709836/
0165デフォルトの名無しさん (アウアウ Sa97-xOZv)
2016/10/19(水) 20:28:35.98ID:UPd0NLz2aスレチでしたか...すみません。
0166デフォルトの名無しさん (ワッチョイ 237b-2yk0)
2016/10/19(水) 22:34:35.72ID:cHR82HPh00167デフォルトの名無しさん (ワッチョイ 237b-2yk0)
2016/10/19(水) 22:50:23.21ID:cHR82HPh01-1 それ以前にもらう
1-2 個々の名前を長さをプリフィクスして
1-3 サーバー側のNAME_MAX、PATH_MAXなどで決め打ち
のどれか
終わり方
2-1 名前の後にnul文字つけて送る、クライアントはnul文字まで読む
2-2 1-2の方法で長さを読む
長さ0なら終了
0168デフォルトの名無しさん (ワッチョイ 837b-IRN/)
2016/10/19(水) 23:06:57.92ID:B7siVDNB0PATH_MAXなんて使うなよ
0169デフォルトの名無しさん (アウアウ Sa21-I3aV)
2016/10/20(木) 08:46:21.50ID:JFmVjGEOa結局さきにパスのサイズ送った後からパス名送るようにしました。出来ればまとめてヘッダ情報として送りたかったので(なんとなくカッコイイ)、このようにしてみたのですが
http://ideone.com/zyWILL
これだとヘッダの情報が1byte前提の話なので、パス名のサイズが2桁になるとおかしくなってしまいます。かといって8test.txtを入れておくバッファがchar型の配列なので先頭
buf[4byte(int), 8byte(char)]みたいな情報を送れる方法はないですよね...?
構造体だとパディングの関係やらで連続している保証もないみたいなので...
0170デフォルトの名無しさん (ワッチョイ 9f7b-CGyA)
2016/10/20(木) 09:09:34.19ID:7bfVuAd+0winsockならWSAsend
4byte(int)はhtonlでネットワークバイトオーダーに変換して送るべし
0171デフォルトの名無しさん (ワッチョイ 9f7b-CGyA)
2016/10/20(木) 09:15:43.63ID:7bfVuAd+0CPUによっては自前でアラインしないとバスエラー起こす可能性があるけど
0172デフォルトの名無しさん (アウアウ Sa21-I3aV)
2016/10/20(木) 09:28:40.12ID:JFmVjGEOa有難うございます。脳内ライブラリが少なくてすみません...
0173デフォルトの名無しさん (ワッチョイ 8053-9aor)
2016/10/20(木) 09:30:21.11ID:ltvdJv0s0パス長を数字で送るのであれば%02zuとかで桁数固定にできないかな
あとココで続ける気ならネットワークスレではココに誘導して
0174デフォルトの名無しさん (アウアウ Sa21-YT5Q)
2016/10/20(木) 10:15:16.91ID:w5wq1yEma0175デフォルトの名無しさん (ワッチョイ 1c4f-AIfR)
2016/10/20(木) 10:21:59.36ID:t3tIMcAX0多分 \n あたり
0176デフォルトの名無しさん (ドコグロ MM35-YT5Q)
2016/10/20(木) 13:19:24.08ID:T4FOXPZSMtelnetでデバッグできるし
0177デフォルトの名無しさん (JP 0H81-IXeA)
2016/10/20(木) 13:36:17.28ID:v7f/vbnmH0178デフォルトの名無しさん (JP 0H72-YT5Q)
2016/10/20(木) 13:38:30.82ID:Ckzu+IfIH0179デフォルトの名無しさん (ワッチョイ 1c4f-AIfR)
2016/10/20(木) 13:42:22.52ID:t3tIMcAX00180デフォルトの名無しさん (ワッチョイ fe9f-yj6p)
2016/10/20(木) 15:08:09.11ID:pTCG0XjY0とりあえずNTFSとext4は含められるのを確認した
たぶん殆どのファイルシステムで可能だろう
0181デフォルトの名無しさん (ササクッテロ Sp89-xWHK)
2016/10/21(金) 13:03:09.45ID:pvNanfpdpわかる方お願いします!
文字列を入力し、その文字列中の文字がすべて数字なら「数字列である」そうでなければ「数字列でない」と判定、表示するプログラムを標準関数isdisitを使ってつくる
というものです。お願いします!
0182デフォルトの名無しさん (ドコグロ MM35-YT5Q)
2016/10/21(金) 13:16:38.67ID:6b929g8wM0183デフォルトの名無しさん (アウアウ Sa21-I3aV)
2016/10/21(金) 14:24:40.36ID:+dFjXUGAasprintfってchar *sに指定フォーマットのデータを入れれるじゃないですかたとえば
char x[3] = "abc";
char z[3] = "def";
int y = 5;
char str[16];
sprintf(str, "%s%d%s", x, y, z);
みたいな感じです。けどstrはchar型で宣言されているのでこの時のstrの中身がよくわかりません。
abc5def
こうなるのは予想出来ますが、バイト数で見たときに
1114111
となるのでしょうか?
それとも'5'という文字として
1111111
になるのでしょうか?
0184デフォルトの名無しさん (ワッチョイ 1c4f-AIfR)
2016/10/21(金) 14:29:34.67ID:BK6zIiM70(4バイト?の バイナリ値5 を置いてるわけじゃなく)
数値の 5 を 文字の '5' に変換して置き換えるのが %d
0185デフォルトの名無しさん (アウアウ Sa21-I3aV)
2016/10/21(金) 14:35:38.29ID:+dFjXUGAaなるほどつまり上記のような格納の仕方をしたとして、バイナリベースで読むようなデータの扱い方をしたら
3バイト読んでabc
1バイト読んで5
3バイト読んでdef
として復元するのですね
有難うございます
0186デフォルトの名無しさん (ワッチョイ 9f7b-CGyA)
2016/10/21(金) 14:43:51.86ID:ib3L8+770> char z[3] = "def";
こんな事を教えたバカを殺して来なさい
char x[4] = "abc";
char z[4] = "def";
または
char x[] = "abc";
char z[] = "def";
0187デフォルトの名無しさん (ガラプー KK5f-7JPy)
2016/10/22(土) 05:20:26.89ID:rNB1+TneK0188デフォルトの名無しさん (ワッチョイ 81c1-SJ9Z)
2016/10/22(土) 08:04:39.68ID:LYF8Ip3O0enum list{typeA, typeB, typeC} command_list;
char command[64];
fgets(command, sizeof(command), stdin); //typeA or typeB or typeCが入力されるとする
command_list = command;
switch(command_list){
case typeA:
break;
case typeB;
break;
case typeC;
}
stdinから文字列入力してそれを列挙型に格納したいのですが…なにか良い方法ありますか?
0189デフォルトの名無しさん (ワッチョイ 81c1-SJ9Z)
2016/10/22(土) 08:08:34.19ID:LYF8Ip3O0command_list = command
の部分がダメで、例えばcommandが “typeA”と入力されたとして
文字列としての”typeA”として扱うのではなく、enumで列挙されているtypeAに変換できないものでしょうか?
0190デフォルトの名無しさん (ドコグロ MMe1-YT5Q)
2016/10/22(土) 08:44:30.03ID:vMy7orzVM0191デフォルトの名無しさん (ワッチョイ fa13-AIfR)
2016/10/22(土) 09:27:21.02ID:an9BR4xS0列挙型と文字列を直接比較することはできない
列挙型の列挙子のつづり方の情報は,コンパイル時にはすでに失われる
文字列入力されたものを列挙子に変換するアルゴリズムを自分で書くしかない
0192デフォルトの名無しさん (ワッチョイ 81c1-SJ9Z)
2016/10/22(土) 11:59:18.48ID:LYF8Ip3O0やっぱり自分で書くしかないのですね。。。
わかりました。有難うございます
0193デフォルトの名無しさん (ワッチョイ f5ee-vevC)
2016/10/22(土) 18:53:15.68ID:nuGLd0Th00194デフォルトの名無しさん (アウアウ Sa21-I3aV)
2016/10/22(土) 19:48:22.55ID:hqnRWy6Nastrcmpにしました。
C学習中なので色々使ってみるべしとenum使ってみたのですが今回のパターンはstrcmpほうが適当そうですね
0195デフォルトの名無しさん (アウアウ Sa21-f5N6)
2016/10/23(日) 04:13:58.79ID:5HTtJfpya後置演算子は次にその変数が評価されたときにインクリメントあるいはデクリメントされる
という認識で合っていますか?
例えば
int main(void) {
int a = 0; // 入力値a
if (a++ % 2)
{
printf("奇数\n");
}
else
{
printf("偶数\n");
}
printf("%d\n", a);
return 1;
}
上記のコードの場合、偶数と表示されるのは分かるんですが、偶数と表示されている時はすでにaの値は1なのでしょうか?
それともaの値を再び評価する次のprintfで1になるのでしょうか?
0196デフォルトの名無しさん (ワッチョイ 9e3c-AIfR)
2016/10/23(日) 04:35:11.06ID:Cnis12+c00197デフォルトの名無しさん (ワッチョイ 8017-AIfR)
2016/10/23(日) 07:56:46.92ID:zWe7g/vm0バッファを意識せずにいられる事がfgetc()の優位性のはずなのに。
0198デフォルトの名無しさん (ブーイモ MMb8-7tdK)
2016/10/23(日) 09:00:50.93ID:KxGiTi6wMってバッファ無かったらungetc出来ないじゃん
どういうことだってばよ
0199デフォルトの名無しさん (ワッチョイ 4090-YT5Q)
2016/10/23(日) 10:19:18.60ID:B3qNSG5L0a++ って、a をインクリメントしたいんだから、a が増えるのを副作用と呼ぶのは変な気がするよね。
0200デフォルトの名無しさん (ワッチョイ 4d17-vevC)
2016/10/23(日) 10:41:13.41ID:fzKPp/in0a++;
a += 1;
ちなみに僕は後者です。fof文でもインクリメントは使いません。
0201デフォルトの名無しさん (ワッチョイ 5d4e-A7+C)
2016/10/23(日) 10:47:25.38ID:EzsOVTEu00202デフォルトの名無しさん (ワッチョイ 8448-Oc0U)
2016/10/23(日) 12:44:35.43ID:dcw2mSdA0どっちでもいいけど単独で使うようにしてる
どうしても式の中に入れるときは()でくくる
0203デフォルトの名無しさん (ワッチョイ 8448-Oc0U)
2016/10/23(日) 12:47:12.99ID:dcw2mSdA0奇数偶数のとこにaの値も表示したらわかりやすいのでは?
0204デフォルトの名無しさん (ワッチョイ 400b-YT5Q)
2016/10/23(日) 13:09:27.52ID:Vcqt/q6s0結論は、偶数と表示されてるときにはちゃんとa==1になってると保証されてるよ
ifの条件式の終了が副作用完了点になってるから
0205デフォルトの名無しさん (ドコグロ MMf4-Oc0U)
2016/10/23(日) 15:07:10.32ID:rf1u4umSMインクルードしてるライブラリなど、用途とか使い方とか分からない状態で、学習する順番が違うかなと思っていまして。
0206デフォルトの名無しさん (ワッチョイ b1a1-YT5Q)
2016/10/23(日) 15:25:10.38ID:52pdDc8O0細々した関数の仕様などは使いながら覚えていくのが普通だと思います
0207デフォルトの名無しさん (ワッチョイ 1942-14kE)
2016/10/23(日) 15:32:01.42ID:yPpSETWV0世の中の開発者が最終的に自分の手で実装してみたいソフトウェアの一つにテキストエディタが挙げられるかもしれません。
本日紹介する「Kilo」はそんな夢に向かって踏み出すためのきっかけになるかもしれないコンパクトなテキストエディタの実装です。
Kiroはライブラリに依存せず(cursesでさえ)、標準のVT100エスケープシーケンスだけを使って作られたシンプルなテキストエディタで、
唯一のソースコードkilo.cの行数は1000行以下というコンパクトさを誇っています。
http://www.softantenna.com/wp/review/kilo/
0208デフォルトの名無しさん (ワッチョイ 1c42-9S67)
2016/10/23(日) 15:43:49.36ID:FLPjJgcJ0Termcap使って欲しいところ
0209デフォルトの名無しさん (ワッチョイ eddc-Jkuj)
2016/10/23(日) 15:49:48.78ID:uIiMGu9Q0表示する際の「ASCII文字の2倍の幅」の
ずれがモロに見えてる感じね。
Cでソース1000行ならとりあえず読んでみるのも良いでしょ。
全然ダメだったわ、という感想になっても大した無駄じゃない。
ところでソースはどこかな。
0210デフォルトの名無しさん (ワッチョイ b25b-cOcu)
2016/10/23(日) 16:22:07.64ID:vn0/lGNH0https://github.com/antirez/kilo.git
VT100エスケープシーケンスだのTermcapだのさっぱり訳わかめです。
やりはじめると人生終っちゃいそうなぐらい
勉強しなきゃいけないことありそうだなー
0211デフォルトの名無しさん (ワッチョイ fa13-AIfR)
2016/10/23(日) 21:06:48.10ID:uyu460VL0fgetc() はバッファ前提だよ
0212デフォルトの名無しさん (ドコグロ MM9c-YT5Q)
2016/10/23(日) 21:29:53.07ID:Szazv7FsM特定のライブラリに依存したくないんでしょ
だからと言って VT100 に依存するのがいいかどうかは微妙だけど
0213デフォルトの名無しさん (ワッチョイ 96c0-8SCy)
2016/10/23(日) 21:32:54.28ID:GtfQU5YV00214>>195 (アウアウ Sa21-9S67)
2016/10/23(日) 21:41:27.39ID:oFMeEqcGaインクリメントやデクリメントはいつされるか、というのは規定されていないのですね。
ただ次の副作用完了点までの間のどこかで実行されることは保証されている、と。
ありがとうございました。
0215デフォルトの名無しさん (ワッチョイ 8017-AIfR)
2016/10/25(火) 00:04:39.07ID:9BlPg1gT0くわしく
0216デフォルトの名無しさん (ワッチョイ 81c1-I3aV)
2016/10/25(火) 01:25:17.56ID:W0rrkoRY0単純に書き込むバイト数を書くのようなやり方はだめなんですか?
0217デフォルトの名無しさん (ワッチョイ 177b-b1pf)
2016/10/25(火) 01:40:52.79ID:I8hKAN8S00218デフォルトの名無しさん (ワッチョイ 96c0-8SCy)
2016/10/25(火) 05:19:58.93ID:vLkI5v6U00219デフォルトの名無しさん (ワッチョイ fa13-NERT)
2016/10/25(火) 07:03:14.79ID:g6Mxg6+u0int fputc(int c, FILE *fp);
だろう?
第二引数にバッファが設定されているじゃないか?
昔は read/write に比べて高水準といったものだよ
0220デフォルトの名無しさん (ワッチョイ fa13-NERT)
2016/10/25(火) 07:04:43.52ID:g6Mxg6+u0おっと
int fgetc(FILE *fp);
だったね,でもこれも入力バッファを指定しているだろう?
0221デフォルトの名無しさん (ワッチョイ 400b-aV7M)
2016/10/25(火) 09:05:43.60ID:rsJoV7Wk0したらfgetcは使えないわけでもないってことを言いたいんじゃない?
0222デフォルトの名無しさん (アウアウ Sa21-I3aV)
2016/10/26(水) 14:41:19.41ID:yv2UqaQqax = 0x1234;
この値から0x3という値を取り出したいとすれば
x = (0x1234 & 0xf0) >> 4;
とし、andして0x0030 のちに4ビットずらし
0x0003にするのが一般的でしょうか?
0223デフォルトの名無しさん (ワッチョイ 5d4e-A7+C)
2016/10/26(水) 15:06:35.25ID:YDlOSXgx0その例えであってるの?
0224デフォルトの名無しさん (ワッチョイ 88ff-kL33)
2016/10/26(水) 15:39:53.85ID:pd0Eh94t0右シフトしてから下の桁だけ取り出すほうがやりやすい気が
指定した桁が取れるようにするからね普通
0225デフォルトの名無しさん (ワッチョイ e03c-+l1+)
2016/10/26(水) 17:06:15.42ID:e4D7XVH/0「1」x = (0x1234 & 0xf000) >> 12;
「2」x = (0x1234 & 0xf00) >> 8;
「3」x = (0x1234 & 0xf0) >> 4;
よりも
「1」x = (0x1234 >> 12) & 0xf;
「2」x = (0x1234 >> 8) & 0xf;
「3」x = (0x1234 >> 4) & 0xf;
が好き。
マスクするビットがどれも0xfで済むので計算がラク
0226デフォルトの名無しさん (ワッチョイ 1c4f-AIfR)
2016/10/26(水) 17:16:30.37ID:w1JniDOS0ビットシフトとマスクのほうがはやいだろうな
※ sprintf して文字列操作で抜き出し
0227デフォルトの名無しさん (アウアウ Sa21-I3aV)
2016/10/26(水) 21:22:41.69ID:TYkve0sna0228デフォルトの名無しさん (ワッチョイ fd7b-AhK1)
2016/10/26(水) 22:37:05.49ID:0iglgEMo0前者は汎整数拡張後のxがsignedかつ負の値であるときに処理系定義
int x = 0x89ABCDEF;
printf(
0229デフォルトの名無しさん (ワッチョイ fd7b-AhK1)
2016/10/26(水) 22:38:33.52ID:0iglgEMo0>>225
前者は汎整数拡張後のxがsignedかつ負の値であるときに処理系定義
int x = 0x89ABCDEF;
printf("%08X\n", (x & 0xFFFFFF00) >> 8);
などとした場合処理系によっては算術シフトの結果0xFF89ABCDになったりする
つまり右シフトは常に後者を使うべき
0230デフォルトの名無しさん (ワッチョイ 9ec9-qUpq)
2016/10/26(水) 22:53:47.52ID:6txvpNVn0一応エンベデッド関係の勉強してるんすけど、Cの入門書とか読んでるとこれ使えなくね?ってのありそうだよね
0231デフォルトの名無しさん (ワッチョイ 11eb-YT5Q)
2016/10/26(水) 23:12:20.55ID:BrF7UdAp0使うよ。
CPUに接続された機器を制御する時に、ポインタ、アドレス、デリファレンスの関係を知らないとちょっと辛いかも。
まあ、誰かがマクロなり関数なり用意してくれれば、直接意識する事はない場合もあるけど。
0232デフォルトの名無しさん (ワッチョイ 9ec9-qUpq)
2016/10/26(水) 23:45:51.51ID:6txvpNVn0230です。ありがとうございます。
0233デフォルトの名無しさん (ワッチョイ 966c-AIfR)
2016/10/26(水) 23:46:58.61ID:4EKbatdM0そもそもポートアクセスがポインタだから。
ポートを定義しているファイルを読み込んでるからP1DDRとか使えるけど
裏では
#defien P1DDR (*(volataile unsigned char *)0xfffc0)
などが定義されている
0234デフォルトの名無しさん (ワッチョイ 9ec9-qUpq)
2016/10/26(水) 23:58:03.11ID:6txvpNVn0230です。ありがとうございます。
とりあえずヘッダとかの中を見て勉強します。
0235デフォルトの名無しさん (ワッチョイ 235b-vqh8)
2016/10/27(木) 02:12:51.50ID:P5MR+ZQ700236デフォルトの名無しさん (ドコグロ MMff-Jz20)
2016/10/27(木) 08:19:45.09ID:uoSnPm98MIO 命令でアクセスするプロセッサもあるんだが...
0237デフォルトの名無しさん (ワッチョイ e3fd-corf)
2016/10/27(木) 13:57:30.32ID:tSnYMHpZ0但しイケメン(ry
0238デフォルトの名無しさん (オッペケ Sr7f-Jz20)
2016/10/27(木) 18:12:36.85ID:lZzTR8O/rIOにもアドレス存在するから、ポインターは必要。
0239デフォルトの名無しさん (ドコグロ MM7f-Jz20)
2016/10/27(木) 18:47:10.57ID:zlkIZgN3Mなんでアドレスがあるとポインタが必要?
0240デフォルトの名無しさん (ドコグロ MMff-Jz20)
2016/10/27(木) 19:00:15.89ID:uoSnPm98Mたいていの環境で I/O アドレスって数値で指定するけどポインタで指定する環境なんてあるのか?
0241デフォルトの名無しさん (ワッチョイ 6f9f-FZcf)
2016/10/27(木) 20:17:15.94ID:DYIrgAE/00242デフォルトの名無しさん (ワッチョイ 0fea-WjTj)
2016/10/27(木) 20:22:32.63ID:9KD5A9Mr00243デフォルトの名無しさん (オッペケ Sr7f-Jz20)
2016/10/27(木) 21:09:53.02ID:lZzTR8O/rレジスタにアドレス値入れないと、アクセス出来ないだろ?
0244デフォルトの名無しさん (ワッチョイ 8790-Jz20)
2016/10/27(木) 21:18:10.78ID:SdMxGcnQ00245デフォルトの名無しさん (ワッチョイ d742-WjTj)
2016/10/27(木) 21:36:54.34ID:Kh1gfqji00246デフォルトの名無しさん (オッペケ Sr7f-Jz20)
2016/10/27(木) 21:45:48.49ID:lZzTR8O/rCでは、ポインタで表現するしかない。
0247デフォルトの名無しさん (ワッチョイ 0fea-WjTj)
2016/10/27(木) 21:50:53.02ID:9KD5A9Mr00248デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)
2016/10/27(木) 22:10:14.37ID:+V+XGj2N0>はじめてのH8マイコン 基礎編
PCだとインラインかハード用のライブラリ使うだろうな。
0249デフォルトの名無しさん (ワッチョイ d742-WjTj)
2016/10/27(木) 22:19:49.28ID:Kh1gfqji00250デフォルトの名無しさん (ワッチョイ d742-WjTj)
2016/10/27(木) 22:23:31.75ID:Kh1gfqji0C言語上同じポインタで記述出来たとして、コンパイラはそれをどうやって区別するの?
0251デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)
2016/10/27(木) 22:56:17.91ID:+V+XGj2N0アセンブラのIN/OUT命令を使ってハードとやり取りする方法がポートマップドI/Oで
メモリの一部を使ってハードとやり取りする方法がメモリマップドI/O。
PC-9821の256色モード制御とかでメモリマップドI/Oが使われてる。
ポートマップドI/Oで設計されてるハードをメモリマップドI/Oで操作するのは無理。逆もしかり。
軽く検索した結果なので認識違いあるかも。
0252片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)
2016/10/27(木) 23:05:26.44ID:ABDKK6BxKPC-98に詳しい人を発見!!!
G-VRAMのメモリーモデルについて教えて下さい!!!
0253デフォルトの名無しさん (ワッチョイ 8790-Jz20)
2016/10/27(木) 23:07:54.21ID:SdMxGcnQ0x86 だって、in/out 命令あるけどさ・・・
0254片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)
2016/10/27(木) 23:09:03.48ID:ABDKK6BxK○ マップト
0255デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)
2016/10/27(木) 23:15:39.94ID:+V+XGj2N0>「メモリマップド」の表記も一般的だが、「メモリマップト」と「ト」に濁音を付けない表記も用いられている。後者の方が英語の原音(/m?m[?]rimapt/)に近い。
それはともかく
>G-VRAMのメモリーモデルについて教えて下さい!!!
日高の「マシン語ゲームグラフィックス」とEICの「PC-9801 プログラマーズBible」に書かれてることしか知らんがね。
98のプレーン方式グラフィックの解説が希望なの?
0256片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)
2016/10/27(木) 23:30:02.56ID:ABDKK6BxK現在、VeySicK ProというBASIC環境を作っていて、PC-98のメモリーモデルを真似をしないといけないのです。
98のグラフィックはカラープレーン方式でしたよね。アドレスなどを教えて下さい。
0257デフォルトの名無しさん (ガラプー KK7f-cpoA)
2016/10/27(木) 23:34:50.74ID:ABDKK6BxK0258デフォルトの名無しさん (ガラプー KK7f-dzl6)
2016/10/27(木) 23:40:12.72ID:Qd6HxA5dK0259デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)
2016/10/27(木) 23:42:01.31ID:+V+XGj2N0A800H B面
B000H R面
B800H G面
E000H I面
0261片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)
2016/10/27(木) 23:44:50.11ID:ABDKK6BxKアドレスA800Hが20H、他がゼロのとき、青い点はどこに現れる?
0262デフォルトの名無しさん (ワッチョイ fb7b-Jz20)
2016/10/27(木) 23:56:18.48ID:4OB59ii+00263デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)
2016/10/27(木) 23:59:00.99ID:+V+XGj2N0よって座標 X=2,Y=0 に描画。
ここでこれ以上語るのはスレチだな。
98スレの方がよくね?
0264片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)
2016/10/28(金) 00:02:37.90ID:RWm1DZ2kK0265デフォルトの名無しさん (ワッチョイ 837b-LwMx)
2016/10/28(金) 00:31:23.36ID:uUyTmzcE02ちゃんねるで煽られてる!?荒らしだ!ゆるさない!
更新しないぞ!とか発言している人がいるのだが・・・・・・
またその作者はユーザーの批判等やりとりしたメールをGoogledriveで公開、
「俺のソフトを買い取れ!おまえに批判されて評判がおちた!」
「広告収入(アプリの)で結構な額だが支払え!」
「それなりに金がかかってる(開発するのに)!」
「Twitterで俺を2ちゃんで批判することをやめるように呼びかけろ」
等の発言をしている
又、Googleストアの説明欄を利用して、
「2ちゃんでの荒らしがいるかぎりソフト更新しない!」と言ってみたり、
「俺はソフト作りやりたいんだ」といってみたり、発言が二転三転
どう思うだろうか?
0266デフォルトの名無しさん (スプッッ Sdff-Jz20)
2016/10/28(金) 08:05:27.65ID:ly8ns8Xnd0267デフォルトの名無しさん (ワッチョイ 8717-0DI1)
2016/10/28(金) 10:13:57.21ID:+sfiJbiA0こういう人は日本語の理解能力低いから業務連絡さえできなさそう。仕事振れない。ごめんね。
0268デフォルトの名無しさん (ワッチョイ d742-WjTj)
2016/10/28(金) 10:39:06.40ID:jzdvITvL0#言語の話しているのに、何で仕事の話したがるか、理解できないわ
0269デフォルトの名無しさん (ワッチョイ 8717-0DI1)
2016/10/28(金) 11:41:15.55ID:+sfiJbiA00270デフォルトの名無しさん (ドコグロ MMff-Jz20)
2016/10/28(金) 11:44:43.06ID:oL18zSzIMC# はスレチ
0271デフォルトの名無しさん (ワッチョイ d3a1-vnDO)
2016/10/28(金) 11:46:33.49ID:MgXI7th200272デフォルトの名無しさん (ワッチョイ d74f-0DI1)
2016/10/28(金) 11:48:25.13ID:9y3ADLwd0始祖は何だろう
0273デフォルトの名無しさん (ワッチョイ 3b00-xrkA)
2016/10/28(金) 11:57:51.72ID:RDyL+5F700274デフォルトの名無しさん (JP 0Hff-0DI1)
2016/10/28(金) 14:16:14.92ID:kwVH1O50H誰か、わかり易いサイト知りませんか?
ソースコードが全て載っていて説明するではなく
少しずつ説明してるとこ・・・
0275デフォルトの名無しさん (アウアウ Sa7f-hMcj)
2016/10/28(金) 16:40:03.19ID:vVnaUV4JaGUIでやりたいならライブラリの知識が必要。
0276デフォルトの名無しさん (ドコグロ MMff-Jz20)
2016/10/28(金) 17:30:44.77ID:5zLfv7L+MPerl も Ruby もスレチ
0277デフォルトの名無しさん (ブーイモ MM7f-+V+y)
2016/10/28(金) 20:21:49.02ID:xvHmsxkzMungetcがあるんだからバッファ意識前提だろ。あ?
0278デフォルトの名無しさん (ブーイモ MM7f-+V+y)
2016/10/28(金) 20:33:31.87ID:xvHmsxkzMバッファを意識しないことがバッファを使わない=早いに変換される
まずお前の頭の悪さを意識しろや
0279デフォルトの名無しさん (ワッチョイ ef3c-Jz20)
2016/10/28(金) 22:30:07.53ID:9iz4x+2p0> Bourne shellかね?
みたいやね
各種シェルスクリプトやそれらの概念を継承してるPerlやPythonでは、# 以降がコメントと見なされる。
https://ja.m.wikipedia.org/wiki/%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)
0280デフォルトの名無しさん (ワッチョイ 8717-0DI1)
2016/10/29(土) 11:00:05.18ID:db7DU7Mk0お前、誰の目線で話をしているかわからない真正のアホだったか。
ライブラリを使う側と作る側の話を混同している時点で、職場で使えない人扱いされてたんだろうな、ってのがよくわかるわ。
ライブラリ利用者がバッファ意識するなら自前でバッファを用意してfread()なりfgets()を使う。
誰視点の説明なのかわからないようでは、かなりのダメな人間。
お前はわんわりと仕事外された経験あるだろうが、お前がそのことに気づいてないだけでな。
0281デフォルトの名無しさん (ワッチョイ 6f16-p8ij)
2016/10/29(土) 11:33:57.48ID:BbhRVaVI0void (*vectors[])(void) = {start, NULL};
0282デフォルトの名無しさん (ワッチョイ df5a-0DI1)
2016/10/29(土) 11:47:55.47ID:F88la5KY0引数。vectors配列に格納されている関数への。
関数ポインタだよ。
配列名からして割込みベクタの定義だな。
0283デフォルトの名無しさん (ワッチョイ 6f16-p8ij)
2016/10/29(土) 12:07:16.84ID:BbhRVaVI00284デフォルトの名無しさん (アウアウカー Sa7f-eFA4)
2016/10/29(土) 15:02:05.15ID:UZGSqbvua0285デフォルトの名無しさん (ワッチョイ 53eb-Jz20)
2016/10/29(土) 16:45:25.26ID:+mL3RgIn00286デフォルトの名無しさん (ガラプー KK7f-dzl6)
2016/10/29(土) 18:41:28.59ID:ptff9bVJK0287デフォルトの名無しさん (ブーイモ MMff-+V+y)
2016/10/29(土) 19:47:48.53ID:cHN5GLp6M答えられる所だけ答える詭弁の典型やね
お前の頭の悪さと卑劣さが伝わってくるわ
ところで頭悪くて表層しか理解できないようだけどお前ってポインタ使えるの?
0288デフォルトの名無しさん (ワッチョイ 3f13-0DI1)
2016/10/29(土) 22:02:48.63ID:RGDx1OIt0IO空間をアドレス空間で見えるようにしない限り,IO空間はCではポインタでは表現できないのが普通では?
>>237
x86 という超メジャーを網羅できないようでは駄目だね
0289デフォルトの名無しさん (ワッチョイ 93bd-d7wh)
2016/10/29(土) 23:10:00.85ID:SOF+NvUl0とっかかりづらい。
フレームワーク的な概念はないのか?この言語は
0290デフォルトの名無しさん (ワッチョイ ef3c-0DI1)
2016/10/29(土) 23:23:27.06ID:I2XN8o6s00291デフォルトの名無しさん (ワッチョイ 93bd-d7wh)
2016/10/29(土) 23:52:55.63ID:SOF+NvUl0では、フレームワークってのはさ、何らかのフレームワークのプロジェクト
に抜擢されて初めて言語の使い道があるってこと?
フレームワーク自体ってさ、一人で作れるほど素朴なもんでもないし、
皆が使ってくれなきゃ意味ないわけじゃん?
個人で完結したものを作りたい場合には向いてないの?
0292デフォルトの名無しさん (ワッチョイ ef3c-0DI1)
2016/10/29(土) 23:57:11.73ID:I2XN8o6s0基礎的な道具は用意するが、それ以上の高度なものは
お前が作れ・探せ・市販品を買えという立場
0293デフォルトの名無しさん (ワッチョイ 93bd-d7wh)
2016/10/30(日) 00:05:35.27ID:r3eRdHaA0ある程度共通概念がないと何か目的を絞って学習しにくいじゃ
ないか、皆でバラバラなものを探してきてそれぞれ作っていたら、
他人のコードを参考にしづらいと思うがな。
すまん、PythonやRubyから来たんだ。
静的言語を知っとかないとまずいかなと思って。
0294デフォルトの名無しさん (ワッチョイ e34e-ijxz)
2016/10/30(日) 00:13:49.90ID:To4sbsrQ0俺は参照カウント方式のフレームワーク自分で作ったよ。
プラットフォームのAPIにまったく依存しない開発環境だぜ。
Cの存在意義はそこにある。
0295デフォルトの名無しさん (ワッチョイ 93bd-d7wh)
2016/10/30(日) 00:17:00.39ID:r3eRdHaA0なるほど、参照カウント方式というワードに俺の知らない何かが
ありそうだな。ありがとう、ちょっと調べてみる。
0296デフォルトの名無しさん (ワッチョイ d77b-ythx)
2016/10/30(日) 00:22:25.26ID:rQxX2zI20フレームワークは、Cocos2d-x, Objective-C とか
一般的に、C/C++では、GUIアプリは作らない。
他の言語の方が、簡単に作れるから
ライブラリ・ユーティリティを作ることが多い
0297デフォルトの名無しさん (ワッチョイ fb6f-xVgD)
2016/10/30(日) 00:26:23.02ID:j/J5GFi70おいwはやまるなw
0298デフォルトの名無しさん (ワッチョイ fb6f-iZh3)
2016/10/30(日) 00:27:10.21ID:zJ52/Kzt00299スッキリ厨 (ワッチョイ d77b-ythx)
2016/10/30(日) 00:31:18.68ID:rQxX2zI20オブジェクト指向を学ぶのが速い
Javaから、Groovy, Kotlin へも行ける
それか、Rubyなら、「プログラミングElixir、2016」を読むのも速い。
関数型言語Elixirは、Ruby + Rails + ErlangVM で、並行処理が得意
Ruby, Pythonから、C/C++への移行は、勉強の効率が悪い
0300デフォルトの名無しさん (ワッチョイ df5b-hMcj)
2016/10/30(日) 02:31:59.72ID:33O7YtMG0きつい部分はC言語やアセンブラでは?
新規開発でまっさら、ライブラリ無し、コンパイラがかろうじてあるようなCPU使う時等。
0301デフォルトの名無しさん (ワッチョイ 0f4e-Jz20)
2016/10/30(日) 08:57:32.81ID:9xXSxIG40組み込みはハードを直接制御する部分大きいからな。
Java とかの様にハード依存部分を隠蔽する事を目指す言語とは、目指す方向が違う。
0302デフォルトの名無しさん (ワッチョイ 93bd-d7wh)
2016/10/30(日) 17:38:28.93ID:r3eRdHaA00303デフォルトの名無しさん (ワッチョイ df5a-0DI1)
2016/10/30(日) 21:37:09.05ID:z1fG1juu0Cでも書けるぞ
0304デフォルトの名無しさん (ワッチョイ 870b-Jz20)
2016/10/30(日) 22:03:09.85ID:C5ai4WmZ0もとから学習用のコンピューターだ
実際の製品に使われるものじゃない
0305デフォルトの名無しさん (ワッチョイ 6f17-WjTj)
2016/10/31(月) 00:35:13.10ID:9faQJIhV00306デフォルトの名無しさん (ワッチョイ 93bd-d7wh)
2016/10/31(月) 16:47:22.58ID:Uhsyfejv0自分一人でフレームワークを軽視するのは構わないが勝手な
価値観を押し付けるな気色悪。。
一生一人でハードウェアレベル、アセンブリレベルのコードだけを
シコシコいじってろ。
0307デフォルトの名無しさん (ワッチョイ d77b-QpRP)
2016/10/31(月) 17:46:53.37ID:R+gJxrwJ00308デフォルトの名無しさん (ブーイモ MM7f-+V+y)
2016/10/31(月) 21:00:45.19ID:2ka7AnRNMunix系にはendian.hがあるらしいが…
0309デフォルトの名無しさん (ワッチョイ ef3c-0DI1)
2016/10/31(月) 21:54:52.49ID:aOoddU/U00310デフォルトの名無しさん (ガラプー KK7f-cpoA)
2016/10/31(月) 21:57:48.20ID:taQA+O7QK0311デフォルトの名無しさん (ワッチョイ ef3c-0DI1)
2016/10/31(月) 22:07:14.47ID:aOoddU/U0<式> に何を与えたらいいの?
MyEndian.h
インクルードガード(略)
#if <式>
#define BIG_ENDIAN
#endif
・・・・
/* ここから下は >>308 が使いたいと思われるコード */
#include "MyEndian.h"
#ifdef BIENDIAN
:
#else
:
#endif
0312デフォルトの名無しさん (ワッチョイ ef3c-Jz20)
2016/10/31(月) 22:35:26.99ID:PlDOR6RY0クロスコンパイラっつーものがあるからどうみても無理だろ
コンパイラと実行環境のエンディアンが同一と仮定していいならエンディアンを判定するプログラム書いて結果によってマクロを設定して make 呼ぶとかかな
0313デフォルトの名無しさん (ワッチョイ 6f9f-FZcf)
2016/10/31(月) 22:39:48.99ID:cU6Ijqgk0興味深い
0314デフォルトの名無しさん (ブーイモ MM7f-+V+y)
2016/10/31(月) 22:41:22.05ID:2ka7AnRNM0315デフォルトの名無しさん (ガラプー KK7f-cpoA)
2016/10/31(月) 22:45:49.09ID:taQA+O7QK0316デフォルトの名無しさん (ワッチョイ ef3c-0DI1)
2016/10/31(月) 22:52:20.42ID:aOoddU/U0あ"ー なんで間違ったんだろ
0317デフォルトの名無しさん (ワッチョイ d77b-QpRP)
2016/10/31(月) 22:52:58.70ID:R+gJxrwJ0#define I_AM_LITTLE (((union { unsigned x; unsigned char c; }){1}).c)
0318デフォルトの名無しさん (ワッチョイ ef3c-0DI1)
2016/10/31(月) 22:59:03.49ID:aOoddU/U00319デフォルトの名無しさん (ワッチョイ d77b-QpRP)
2016/10/31(月) 23:12:58.33ID:R+gJxrwJ0hoge();
else
hage();
とかやればオプティマイザが選択してくれると思う
0320デフォルトの名無しさん (ワッチョイ 45c1-JPBa)
2016/11/03(木) 00:05:48.84ID:cI9aS8Tt0int a = 0xFFFFFFFF; //4byte
char b; //1byte
b = (char)a; //4→1byteへキャスト 予測0xFF;
printf(“b = %c¥n”, b); // ? が表示される
printf(“b = %x¥n”, b); // 0xffffffff が表示される
これはどういうことでしょうか?
4byte→1byteへキャストしたので予測としては0xFFです。
charで0xFFすべてビットが立ってると-1なのでアスキー文字で?が表示される理由はなんとなくわかります。がこれを16進数で再度%x表示したら0xffffffffと4byteに戻っているのがよくわかりません。
%xは自動で4byteへキャストしてしまうのでしょうか?
0321デフォルトの名無しさん (ワッチョイ b041-m5qj)
2016/11/03(木) 00:21:53.92ID:p3Ch2bU200322デフォルトの名無しさん (ワッチョイ 3ec0-GpcS)
2016/11/03(木) 01:04:32.68ID:yjP+XKqq0intの-1はffffffff
0323デフォルトの名無しさん (ワッチョイ bc7b-ZnKD)
2016/11/03(木) 01:21:42.24ID:TDi/4+oI0例えば、上なら、どう表示される?
0324デフォルトの名無しさん (ワッチョイ 517b-KXPE)
2016/11/03(木) 02:13:51.95ID:ok7c548h0char型はint型に格上げされる
printf文はどちらも評価結果(int型に格上げされた結果)の内容を変換指定子に従って出力しているだけ
0325デフォルトの名無しさん (ワッチョイ 45c1-t5SF)
2016/11/03(木) 02:30:09.83ID:cI9aS8Tt0汎整数拡張でプロモーションとはキャストとはまた別ですか?別だとしたら違いはなんでしょう?
0326デフォルトの名無しさん (ワッチョイ 45c1-t5SF)
2016/11/03(木) 02:32:15.15ID:cI9aS8Tt0wiki見て納得しました。
みなさん回答有難うございます
0327デフォルトの名無しさん (ササクッテロラ Spbd-m5qj)
2016/11/03(木) 13:08:36.53ID:H0IjIqmWpcmakeだろうがgmakeだろうがnmakeだろうが無理だろ
0328デフォルトの名無しさん (ワッチョイ bc7b-6WlR)
2016/11/03(木) 13:40:07.82ID:h7OLIGrQ0エンディアン判定プログラムをコンパイル、実行すれば可能
0329デフォルトの名無しさん (ワッチョイ bc4f-8n5s)
2016/11/03(木) 13:45:30.18ID:U0puS1NV00330デフォルトの名無しさん (ワッチョイ e63c-DGmA)
2016/11/03(木) 15:22:13.01ID:NjbREez30知らないのに無理とか言うなよ
TestBigEndian でググれ
0331デフォルトの名無しさん (ワッチョイ e63c-DGmA)
2016/11/03(木) 15:23:31.15ID:NjbREez30すでに指摘されとる ⇒ >>312
0332デフォルトの名無しさん (アウアウオー Sade-2euV)
2016/11/03(木) 16:13:16.87ID:w2mbel+maint main() {
//変数fooとbarを文字列結合して出力してください。
char foo[7] =
0333デフォルトの名無しさん (ブーイモ MM28-Qsvr)
2016/11/03(木) 20:09:39.23ID:EO+3S9G6M0334デフォルトの名無しさん (ガラプー KKeb-Pg6j)
2016/11/04(金) 08:50:35.45ID:JWDjY2VBK0335デフォルトの名無しさん (ドコグロ MMde-DGmA)
2016/11/04(金) 09:08:14.23ID:I3L1XoDqM0336デフォルトの名無しさん (アウアウカー Sab5-t5SF)
2016/11/04(金) 13:29:49.63ID:hSv3Op9Da0337デフォルトの名無しさん (ワッチョイ 5ed1-Xqtn)
2016/11/04(金) 18:37:09.11ID:9t4eUgUn00338デフォルトの名無しさん (ワッチョイ 7213-8n5s)
2016/11/04(金) 20:07:20.16ID:CUjt06/h0エンディアンに依存しないコードを書くのが吉
0339デフォルトの名無しさん (ワッチョイ 5ed1-Xqtn)
2016/11/04(金) 20:25:38.18ID:9t4eUgUn00340デフォルトの名無しさん (ワッチョイ d39b-DGmA)
2016/11/05(土) 02:35:41.68ID:azfvKCq900341デフォルトの名無しさん (ワッチョイ 3ec0-GpcS)
2016/11/05(土) 04:23:04.56ID:hXk57f910どっちでもいいだろって突っ込みはあるが、その後に日本語が入った時にどっちにしていいか分からない
それぐらいしか思い浮かばない
0342デフォルトの名無しさん (ワッチョイ 137b-fIL9)
2016/11/05(土) 06:31:46.86ID:bv3OHyVZ00343デフォルトの名無しさん (ワッチョイ e63c-DGmA)
2016/11/05(土) 07:11:49.37ID:6wNzhQFs0解析されにくくするためにわざとやってるのかもね
0344デフォルトの名無しさん (ワッチョイ 714e-dKGq)
2016/11/05(土) 08:07:44.52ID:OwUAtwzN0charで扱っていいよね?
0345デフォルトの名無しさん (ドコグロ MMde-DGmA)
2016/11/05(土) 09:10:58.33ID:ylYyr/A+M0346デフォルトの名無しさん (ブーイモ MM28-Qsvr)
2016/11/05(土) 10:09:58.12ID:YLOhhbbrMおかげでGNUツールが化ける
後発なんだからそろえろよなあ
0347デフォルトの名無しさん (ワッチョイ 137b-fIL9)
2016/11/05(土) 10:14:59.09ID:bv3OHyVZ0は?
>>346
Windows(のUCS-2)が先だろ。
UTF-16はそのままでも(どうでも)いいが、Shift-JISはさっさと捨てて欲しい
0348デフォルトの名無しさん (ワッチョイ 714e-dKGq)
2016/11/05(土) 10:58:53.41ID:OwUAtwzN0UTF-8なら文字のバイト数の判定は文字列のどの位置でもできるし、
5,6バイト文字は実質廃止なので最大でも4バイト。
0349デフォルトの名無しさん (ワッチョイ 714e-dKGq)
2016/11/05(土) 10:59:56.07ID:OwUAtwzN00350デフォルトの名無しさん (ワッチョイ 717b-U2b2)
2016/11/05(土) 14:17:28.41ID:O9i4rwQI0utf8もsjisも英数部分は同じなわけでどちらもasciiを内包している
よって日本語環境でテキストを扱うときはたとえ英数のみのファイルだろうと
文字エンコードのデフォをutf8またはsjisとするのだよ
asciiはただのサブセットにすぎないのだから
0351デフォルトの名無しさん (ワッチョイ 1342-Xqtn)
2016/11/05(土) 14:29:23.15ID:TjERyIHd0全世界共通のエンコードにする方が良いよね
0352デフォルトの名無しさん (ワッチョイ d39b-DGmA)
2016/11/05(土) 18:22:48.68ID:azfvKCq90なんでマジレスされてんだろ
0353デフォルトの名無しさん (ワッチョイ c69f-/hNr)
2016/11/05(土) 20:04:07.46ID:r4TaQ56a00354デフォルトの名無しさん (ワッチョイ 7b5b-DGmA)
2016/11/05(土) 20:12:34.28ID:kLv6FcI900355デフォルトの名無しさん (ワッチョイ 1342-Xqtn)
2016/11/05(土) 20:15:19.98ID:TjERyIHd00356デフォルトの名無しさん (ワッチョイ e63c-DGmA)
2016/11/05(土) 20:55:27.32ID:6wNzhQFs00357デフォルトの名無しさん (ワッチョイ 7b6f-NiuY)
2016/11/05(土) 21:32:18.85ID:tm4T+wFZ0潰すためにあえてサポートしない
MSが折れるのを待ってるんだよ
0358デフォルトの名無しさん (ワッチョイ b094-whJA)
2016/11/05(土) 22:00:13.59ID:AA4Sk0Wd0int hoge=1;
if(*(char *)(&hoge))
{
}
else
{
}
最適化すれば判定も通らない処理も除かれる
0359デフォルトの名無しさん (ワッチョイ 3ec0-GpcS)
2016/11/05(土) 23:08:59.19ID:hXk57f910だからそのファイルに後から日本語格納したらどっちにしたらいいかってこと書いてんだが
0360デフォルトの名無しさん (スプッッ Sd78-DGmA)
2016/11/05(土) 23:11:31.77ID:A6/yGRShd分かってない奴に説明するほど無駄なことは無いよ
0361デフォルトの名無しさん (ワッチョイ 1342-Xqtn)
2016/11/05(土) 23:12:06.56ID:TjERyIHd0それって動作させないと判定できなくない?
0362デフォルトの名無しさん (ワッチョイ b094-whJA)
2016/11/05(土) 23:19:19.82ID:AA4Sk0Wd0最適化で不要なロジックは生成されない
0363デフォルトの名無しさん (ワッチョイ 1342-Xqtn)
2016/11/05(土) 23:34:38.50ID:TjERyIHd0しつこく聞いて悪いんだけど
最適化オプション付けてコンパイルして、アセンブラソース出力させ
その出力結果からエンディアンを判定するって事?
0364デフォルトの名無しさん (ワッチョイ b094-whJA)
2016/11/06(日) 00:15:21.06ID:MLGlQdvO0コンパイラが静的に判断して、不要な変数,不要なif文,通らないロジックは
生成しない
int hoge=1;
if(hoge==1)
{
}
else
{
}
最適化すればelseの中もhogeもifのところにあたるロジックも生成されない
0365デフォルトの名無しさん (ワッチョイ 653c-m5qj)
2016/11/06(日) 00:17:58.15ID:gP4JS71d0最大の自己中集団のアメリカ人が楽だから、ということに過ぎない、OSは関係ない
httpなどではcontent-typeが付くから問題は無いが、ソースコードのような平テキストでは問題となる
商売してるMSなんかはその辺をうやむやにしてトラブルを引き起こすのは避けたいところじゃないかな
リソースフォークがあったらなあ・・・
0366デフォルトの名無しさん (ワッチョイ b094-whJA)
2016/11/06(日) 00:19:11.24ID:MLGlQdvO0#if …
#else
#endif
のごとくいらないものは生成しない
0367デフォルトの名無しさん (ワッチョイ b00b-umBA)
2016/11/06(日) 00:25:48.01ID:2bZiNVtl0単にascii用のコードがそのままutf8を入力しても使えちゃってるだけじゃないの
もしくはその変更なしのまま動くのをサポートしていると呼んでいるが
utf8のためにわざわざBOM対応の処理を追加するのは嫌なのか
0368デフォルトの名無しさん (ワッチョイ 653c-m5qj)
2016/11/06(日) 00:33:06.44ID:gP4JS71d0gcc -E -dM とかしてそれっぽいのを探す
0369デフォルトの名無しさん (ワッチョイ d39b-DGmA)
2016/11/06(日) 00:36:12.69ID:EjJCIG4E0BOMは本来エンディアンの判別用って分かってるのかな
0370デフォルトの名無しさん (ワッチョイ 1342-Xqtn)
2016/11/06(日) 00:44:11.83ID:xHDOqiQx0生成させないと言う説明ははもう分かったからいい
コンパイラを使う人間が、
生成された物から、
エンディアンがどちらであるか
判断するタイミングはどの時点?
>コンパイル時にエンディアン判別する方法ある?
質問がこうあるので、回答としては
コンパイル時に分からないといけないんじゃ無いかな?
0371デフォルトの名無しさん (ワッチョイ 7b6f-NiuY)
2016/11/06(日) 01:03:32.44ID:X9TnRsh50必要な部分は自分で作るっていう立場からすると
7bit asciiしか必要のない奴らが作ったコードを流用するのに邪魔なBOMとか迷惑以外の何物でもない
0372デフォルトの名無しさん (ワッチョイ 7b8b-DGmA)
2016/11/08(火) 11:44:44.58ID:FGV1Wd8r0エポック秒のまま書き込みたいんだ。
0373デフォルトの名無しさん (ワッチョイ 91fd-KjJO)
2016/11/08(火) 12:02:28.55ID:8CSk6e2800374デフォルトの名無しさん (ワッチョイ 7b8b-DGmA)
2016/11/08(火) 12:29:48.72ID:FGV1Wd8r0答えてくれてありがと
0375デフォルトの名無しさん (アウアウカー Sab5-t5SF)
2016/11/08(火) 17:01:10.52ID:vVLdL2WGa0376デフォルトの名無しさん (アウアウカー Sab5-t5SF)
2016/11/08(火) 17:05:01.62ID:vVLdL2WGa8bit符号ありなら
01111111 = 127 わかる
ひとつ桁が上がって
10000000 = -128 !?
11111111 = -1 !?!?
という感じです感覚的には
10000000 = -1
11111111 = -128
であってほしいなあっと
0377NAS6 ◆n3AmnVhjwc (ワッチョイ 8a5b-bOSl)
2016/11/08(火) 17:05:32.33ID:Mlh8MpAy0ビットの足し算引き算は負数を1の補数にすると都合がいい
0378NAS6 ◆n3AmnVhjwc (ワッチョイ 8a5b-bOSl)
2016/11/08(火) 17:11:55.13ID:Mlh8MpAy0+−符号
と
+−演算で
それぞれの符号をそろえるためで
-1+1=0
0xffff+0x0001=0x0000
0+-1=-1
0x0000+0xffff=0xffff
と簡単にできるから
0379デフォルトの名無しさん (ワッチョイ 98ff-6/4r)
2016/11/08(火) 17:14:05.42ID:CGI+nyHh0-1 に 1足すと 0
11111111 に 1 足すと (1)00000000
という辻褄が合うし、-0と+0の2つが存在することを防げる
2の補数表現という、これで検索ね
0380デフォルトの名無しさん (ワッチョイ 3b4f-uTye)
2016/11/08(火) 17:22:43.82ID:cZ0szOqu00381NAS6 ◆n3AmnVhjwc (ワッチョイ 8a5b-bOSl)
2016/11/08(火) 17:24:04.92ID:Mlh8MpAy02の補数は1の補数に1を加える
だった
0382デフォルトの名無しさん (ワッチョイ bc4f-8n5s)
2016/11/08(火) 17:33:41.74ID:X2hYabzd0*0 *0 *0 0000
:
*6 *6 *6 0110
*7 *7 *7 0111
*8 -1 -8 1000
*9 -2 -7 1001
:
14 -7 -2 1110
15 -8 -1 1111
0 から 1戻ったときに 符号なしで 15 符号付きで -1 になるのが 2の補数
0383デフォルトの名無しさん (アウアウカー Sab5-t5SF)
2016/11/08(火) 18:32:47.14ID:3zQXtossa有難うございます
それは 2 の補数
0385デフォルトの名無しさん (ワッチョイ e63c-8n5s)
2016/11/08(火) 20:49:41.33ID:Zd3HZx+G0隣り合う値の大小関係は維持してるから 符号付・符号なしを意識せずに演算できるようになってる
0386デフォルトの名無しさん (エーイモ SEd1-M9UC)
2016/11/08(火) 22:47:30.86ID:uEjrEKyrEprintf(a)
みたいなことって出来ないんですか?
printf("%d", a);
しかできないんですか?
printf以外で出来る関数ってないですか?
0387デフォルトの名無しさん (スッップ Sd28-DGmA)
2016/11/08(火) 22:58:37.38ID:hH9QzIf9dで表示できるでしょ?
0388デフォルトの名無しさん (ワッチョイ 1342-Xqtn)
2016/11/08(火) 23:00:06.29ID:AlKHpmFD00389デフォルトの名無しさん (スッップ Sd28-DGmA)
2016/11/08(火) 23:00:42.66ID:hH9QzIf9d("aは%dです", a)みたいな
0390デフォルトの名無しさん (ドコグロ MM75-DGmA)
2016/11/08(火) 23:01:31.93ID:iZpLu2rpM0391デフォルトの名無しさん (エーイモ SEd1-M9UC)
2016/11/08(火) 23:01:49.37ID:uEjrEKyrEint main()
{
int a = 1;
printf(n);
return 0;
}
clang test.cしてみると
test.c:6:12: error: use of undeclared identifier 'n'
printf(n);
^
1 error generated.
こうなるんです
0392デフォルトの名無しさん (スッップ Sd28-DGmA)
2016/11/08(火) 23:03:02.16ID:hH9QzIf9d0393デフォルトの名無しさん (エーイモ SEd1-M9UC)
2016/11/08(火) 23:04:48.47ID:uEjrEKyrEtest.c:6:12: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'
[-Wint-conversion]
printf(a);
^
/usr/include/stdio.h:362:43: note: passing argument to parameter '__format' here
extern int printf (const char *__restrict __format, ...);
^
test.c:6:12: warning: format string is not a string literal (potentially insecure) [-Wformat-security]
printf(a);
0394デフォルトの名無しさん (ワッチョイ 1342-Xqtn)
2016/11/08(火) 23:08:34.84ID:AlKHpmFD00395デフォルトの名無しさん (エーイモ SEd1-M9UC)
2016/11/08(火) 23:10:04.11ID:uEjrEKyrEprintfでエラーが出るのか仕様ってことですね
printf("%d", a)って書くようにします
0396デフォルトの名無しさん (ワッチョイ 1342-Xqtn)
2016/11/08(火) 23:16:26.69ID:AlKHpmFD0>>388 試してみて
0397デフォルトの名無しさん (ワッチョイ e63c-8n5s)
2016/11/08(火) 23:18:04.01ID:Zd3HZx+G0"nは" + n + "です"
のように記述できるバリアント型のある言語に慣れた人かな?
0398デフォルトの名無しさん (エーイモ SEd1-M9UC)
2016/11/08(火) 23:18:52.90ID:uEjrEKyrEputcharでもいけますね+'0'書くのが気になりますが
0399デフォルトの名無しさん (エーイモ SEd1-M9UC)
2016/11/08(火) 23:19:50.07ID:uEjrEKyrE<?php
$a = 1;
var_dump($a);
0400デフォルトの名無しさん (ワッチョイ 7b4e-DGmA)
2016/11/08(火) 23:48:03.44ID:k0RMEun60第一引数は、char型のポインターで無ければならない。
後、¥0が来るまで処理されるから、下手すると例外が発生する。
0401デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)
2016/11/10(木) 09:15:59.70ID:+LTUeX840char * str1, str2;
str1="abc";
str2="def";
エラーが出ます。
0402デフォルトの名無しさん (ワッチョイ 134e-dJcJ)
2016/11/10(木) 09:20:47.72ID:cc774ulR0char *str1, *str2;
0403デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)
2016/11/10(木) 09:26:01.65ID:+LTUeX840例えばa=1ならa+'0'は'1'になる。
それをputcharしてるんですよね?
これつてつまり
キャラクターコードの0123456789の並び
からしてa>9の時はputchar(a+'0')は
上手く機能しないですよね?
0404デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)
2016/11/10(木) 09:27:39.98ID:+LTUeX840有難うございます。
初歩的なことのようでしたが、
ポインタの変数宣言は常に*つけない
といけないみたいですね。
0405デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)
2016/11/10(木) 09:34:01.23ID:+LTUeX840'0'のキャラクターコードに+aして、
例えばa=1ならa+'0'は(int)'1'になる。
それをputcharしてるんですよね?
これつてつまり
キャラクターコードの0123456789の並び
からしてa>9の時はputchar(a+'0')は
上手く機能しないですよね?
0406デフォルトの名無しさん (ワッチョイ b74f-teht)
2016/11/10(木) 09:41:38.93ID:69ogPHI/0上手く機能してないわけではない
0407デフォルトの名無しさん (ドコグロ MMff-PwKp)
2016/11/10(木) 10:10:15.12ID:83H+Rdo0M>>386 の仕様は満たしている。
0408デフォルトの名無しさん (ドコグロ MMff-PwKp)
2016/11/10(木) 10:12:09.88ID:83H+Rdo0M0409デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)
2016/11/10(木) 10:20:05.76ID:+LTUeX840他のやり方なんて無いと思います。
0<=a<10なら
putchar(a+'0')は機能しますし
使ったこともあります。
0410デフォルトの名無しさん (ワッチョイ 134e-dJcJ)
2016/11/10(木) 11:00:27.13ID:cc774ulR0void print_int(int i) {
printf(“%d¥n”, i);
}
0411デフォルトの名無しさん (ワッチョイ 237b-e60R)
2016/11/10(木) 12:54:45.10ID:xL6VF5Jb00x3aには:が割り当てられているので
こいつ↓は完全なウソ
> 0<=a<10なら
> putchar(a+'0')は機能しますし
> 使ったこともあります。
0412デフォルトの名無しさん (ワッチョイ b74f-teht)
2016/11/10(木) 13:00:08.03ID:69ogPHI/00413デフォルトの名無しさん (ワッチョイ 237b-e60R)
2016/11/10(木) 13:08:25.09ID:xL6VF5Jb00414デフォルトの名無しさん (ドコグロ MMef-PwKp)
2016/11/10(木) 13:12:08.02ID:17noS2hUMそれより0x3aと断定するのはどうか。EBCDICかもしれないのに
0415デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)
2016/11/10(木) 18:08:20.60ID:+LTUeX8400416デフォルトの名無しさん (ブーイモ MM1f-8b/f)
2016/11/10(木) 20:05:11.26ID:KAHJiECtM0417デフォルトの名無しさん (ワッチョイ 7f13-ChQh)
2016/11/10(木) 20:08:44.95ID:abqCyQLg0C が ebcdic でないと言い切れる根拠は?
0418デフォルトの名無しさん (ブーイモ MM1f-8b/f)
2016/11/10(木) 20:28:52.38ID:KAHJiECtM誰か知ってる人居ませんか〜?
0419デフォルトの名無しさん (ドコグロ MM3f-PwKp)
2016/11/10(木) 20:39:24.22ID:6KREf9X3M0x3a は知らんけど '0'〜'9' は連続したコードになってると言うのがCの仕様で EBCDIC もその条件は満たしてる
ちなみに EBCDIC では 'A'〜'Z' は連続してないので使う機会がある人は注意してね
0420デフォルトの名無しさん (ワッチョイ 6b42-WVKM)
2016/11/10(木) 20:45:43.54ID:Flh9WlH300421デフォルトの名無しさん (ガラプー KK8f-sVJD)
2016/11/10(木) 20:48:44.51ID:c/bGVWCPK文字コード
0422デフォルトの名無しさん (ワッチョイ 134e-dJcJ)
2016/11/10(木) 20:53:34.38ID:cc774ulR0> '0'〜'9' は連続したコードになってると言うのがCの仕様
そんな仕様あるの?
0423デフォルトの名無しさん (ワッチョイ 0fed-WVKM)
2016/11/10(木) 21:12:48.15ID:wjzEvz5i0日本工業規格 プログラム言語 C
X 3010:2003 (ISO/IEC 9899:1999)
ソース基本文字集合及び実行基本文字集合の双方において,10 進数字に関する上の並びにおいて,
0 の右側に並んでいる各文字の値は,一つ左側にある文字の値に比べ 1 だけ大きくなければならない。
これのことか?
日本だけってことはないよね?
0424デフォルトの名無しさん (ワッチョイ a70b-OdgI)
2016/11/10(木) 21:39:14.64ID:3W6twwb/05.2.1
3
>In both the source and execution basic character sets, the
>value of each character after 0 in the above list of decimal digits shall be one greater than
>the value of the previous.
0425デフォルトの名無しさん (ブーイモ MM1f-8b/f)
2016/11/10(木) 21:52:19.50ID:KAHJiECtMitoaが非標準だから一瞬やっちまったか?と思ったがよかったよかった
0426デフォルトの名無しさん (ワッチョイ 134a-Cgco)
2016/11/10(木) 23:42:08.27ID:UuqYAwCi00427デフォルトの名無しさん (ワッチョイ a790-PwKp)
2016/11/10(木) 23:52:02.30ID:h5BznXMa0ISO/IECだから日本だけってことはないだろ。JIS Xは他から持ってきた規格が多いよな。
0428デフォルトの名無しさん (アウアウカー Saaf-kx01)
2016/11/11(金) 13:21:20.24ID:aYWOTZ/Jaebcdicってはじめて聞きました
これって現行で使ってたりする所あるんですか?
0429デフォルトの名無しさん (JP 0H6f-2n2A)
2016/11/11(金) 13:42:49.07ID:6JJTq1XSH後は忘れてていい たぶん一生困らない
0430デフォルトの名無しさん (ワッチョイ 237b-dJcJ)
2016/11/11(金) 14:14:00.75ID:2tUkhNCX0教え込むスレです
0431デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)
2016/11/11(金) 15:13:56.28ID:0OlKLZsF00432デフォルトの名無しさん (アウアウカー Saaf-AFXk)
2016/11/11(金) 16:09:59.70ID:EpZdq0+qa123.456789
というデータが入っている場合、これをint型の変数で
123456789
と変換させる標準関数はあるのでしょうか?
0433デフォルトの名無しさん (ワッチョイ a70b-PwKp)
2016/11/11(金) 16:54:43.17ID:JQalwGbJ00434デフォルトの名無しさん (ワッチョイ b74f-teht)
2016/11/11(金) 17:11:40.54ID:5TMvu3fK00435デフォルトの名無しさん (ワントンキン MM9f-WFrU)
2016/11/11(金) 17:32:44.91ID:VACb0+QzM0436デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)
2016/11/11(金) 17:40:31.89ID:0OlKLZsF0標準関数にするほどに多用するのか?
0437デフォルトの名無しさん (ワッチョイ 134e-dJcJ)
2016/11/11(金) 18:30:56.11ID:6s+TzTnG00438デフォルトの名無しさん (ワッチョイ a70b-PwKp)
2016/11/11(金) 18:55:42.95ID:JQalwGbJ0ビット抜き出しただけではダメだね
0439デフォルトの名無しさん (ワッチョイ a70b-PwKp)
2016/11/11(金) 18:55:43.31ID:JQalwGbJ0ビット抜き出しただけではダメだね
0440デフォルトの名無しさん (ドコグロ MM5f-PwKp)
2016/11/11(金) 19:38:46.81ID:7sFk++lSM汎用機って言うでっかいコンピューターを後生大事に使ってるところは未だにある
0441432 (アウアウカー Saaf-PwKp)
2016/11/11(金) 21:10:07.38ID:37A0aE2Xaおとなしく自分で作ろうと思います
ありがとうございました
0442デフォルトの名無しさん (ガックシ 06ef-kx01)
2016/11/11(金) 21:21:21.87ID:kzNknik+6なるほど有難うございます
0443デフォルトの名無しさん (ワッチョイ 8fc0-fsQo)
2016/11/11(金) 22:31:01.21ID:3L5PjATE00444デフォルトの名無しさん (ワッチョイ 6b42-WVKM)
2016/11/12(土) 00:26:48.12ID:aMxeZQXn00445デフォルトの名無しさん (ワッチョイ df7b-mupw)
2016/11/12(土) 02:49:34.13ID:vePuKJXk00446デフォルトの名無しさん (ワッチョイ 4b6f-PwKp)
2016/11/13(日) 00:23:25.29ID:yOekueOi00447デフォルトの名無しさん (ドコグロ MM5f-PwKp)
2016/11/13(日) 10:19:02.02ID:ZjdX2IN8M全く問題ありませんので、今回の件につきましてはこれで終わりと致したく
0448デフォルトの名無しさん (ワッチョイ 7fea-jzcv)
2016/11/13(日) 19:53:59.05ID:mDfCIeMQ00449片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 20:01:21.76ID:6aidVFzXKCMakeがいいらしいよ。
0450デフォルトの名無しさん (ワッチョイ ef23-PwKp)
2016/11/13(日) 20:21:49.54ID:Ggvvb/9+0主流ってのは無いねー。
実際に動かす先の都合で、ほぼ決まっちゃう。
組み込みならメーカーお仕着せが多かったり、windowsならVSだったり、OSSならクロスコンパイルも含めてeclipse/cdtってところじゃないか?
0451デフォルトの名無しさん (ワッチョイ 83bd-OdgI)
2016/11/13(日) 20:39:50.52ID:5YmDMkhP0ストレス、要らんだろこれ。
0452デフォルトの名無しさん (ワッチョイ 0fed-WVKM)
2016/11/13(日) 21:13:25.70ID:v/Qpz9In0まぁ文句はC言語作った外人に言ってくれ。
0453デフォルトの名無しさん (ワッチョイ 4b5b-PwKp)
2016/11/13(日) 21:28:55.15ID:rcRsfR9/00454デフォルトの名無しさん (ワッチョイ 6b42-WVKM)
2016/11/13(日) 21:36:42.83ID:s20F/plG00455デフォルトの名無しさん (ガラプー KK6f-sVJD)
2016/11/13(日) 21:37:46.54ID:6aidVFzXK0456デフォルトの名無しさん (ワッチョイ 6b42-WVKM)
2016/11/13(日) 21:53:47.30ID:s20F/plG0実数型だと、内部格納形式を調べながらの作業になりそう
0457デフォルトの名無しさん (ワッチョイ 83c1-R+gX)
2016/11/13(日) 21:59:49.35ID:jVFv5u9w0関数の宣言時にexternをつけることによってその関数の定義がないファイルからでもどこかにある定義を見る様にコンパイラに促す事ができるのでしょうか?
inlineをつけることによって関数を展開できますよね、けどこれは関数定義があるファイルからしか呼び出す事ができません。他のファイルからinline関数を呼び出す事ができその際にはexternをつけるみたいなのですがどういう仕組みなのかよくわかりません。定義のないソースファイルで宣言するときにもexternをつける必要があるのでしょうか?この辺を詳しく教えてください
0458片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 22:06:51.24ID:6aidVFzXKexternは英単語のexternal(外部の)を意味してる。いろんな場所から使われるインライン関数はヘッダーから読み込むのが普通。
0459デフォルトの名無しさん (ワッチョイ c3a1-zfai)
2016/11/13(日) 22:16:19.60ID:6BLqY2xc0当初、Javaには、printfがなかったが、結局、printfに相当するものが追加された
printfは、すごいんだぞ
Cを愛するなら「printfってすごいね」というだろう
0460デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/13(日) 22:18:38.14ID:l5Rh05Ce0自作すればどうして%指定が必要なのかもわかるよ
ヒントはstdarg.h
0461デフォルトの名無しさん (ワッチョイ a790-PwKp)
2016/11/13(日) 22:26:27.44ID:SUTcqM6e00462デフォルトの名無しさん (ワッチョイ 83bd-OdgI)
2016/11/13(日) 22:37:03.18ID:5YmDMkhP0型推論ってあれか?型が何であるか推測するコナン的なエンジンか。
面白そうだな、ちょっと作ってみるわ。
0463片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 22:42:54.05ID:6aidVFzXK0464デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/13(日) 22:53:29.95ID:l5Rh05Ce00465片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 22:59:34.06ID:6aidVFzXK0466デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/13(日) 23:01:49.41ID:l5Rh05Ce0多分_Genericとマクロを組み合わせても%無しのprintfは作れないはず
0467片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 23:05:34.45ID:6aidVFzXKp("e = "), pwp(e, 0, 2);
こんな感じかな?
0468デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/13(日) 23:14:15.11ID:l5Rh05Ce00469デフォルトの名無しさん (ワッチョイ 6b42-WVKM)
2016/11/13(日) 23:17:49.57ID:s20F/plG00470片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 23:23:31.80ID:6aidVFzXKchar: print_int, \
short: print_int, \
int: print_int, \
unsigned char: print_uint, \
unsigned short: print_uint, \
unsigned int: print_uint, \
char *: print_str, \
default: print_ptr \
)(X)
0471デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/13(日) 23:26:42.01ID:l5Rh05Ce0型情報を外から与えるしか無い
その与え方が%
なので%はなくせない
こればかりはどんなに面倒でも仕方がない
0472デフォルトの名無しさん (ワッチョイ 9342-FQoa)
2016/11/13(日) 23:27:23.47ID:z/YWoW/C0こっちは自動認識するから。
0473片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 23:27:27.95ID:6aidVFzXK{
printf("%d", n);
}
void print_uint(unsigned int n)
{
printf("%u", n);
}
void print_str(const char *s)
{
printf("%s", s);
}
void print_ptr(const void *s)
{
printf("%p", p);
}
0474片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 23:33:09.86ID:6aidVFzXK0475デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/13(日) 23:40:25.02ID:l5Rh05Ce0それは分かるけど引数1個しか取れないじゃん
それじゃprintfの代わりにはなれないよ
0476片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 23:46:58.90ID:6aidVFzXKchar: print_intw, \
short: print_intw, \
int: print_intw, \
unsigned char: print_uintw, \
unsigned short: print_uintw, \
unsigned int: print_uintw, \
char *: print_strw, \
default: print_ptrw \
)((X), (w))
0477片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)
2016/11/13(日) 23:53:08.09ID:6aidVFzXK{
printf("%*d", w, n);
}
...(以下略)
0478デフォルトの名無しさん (ワッチョイ c756-MJQ8)
2016/11/14(月) 01:30:20.70ID:z0u6fxyS0ヘッダーファイルにinlineを書いて、その関数を使うファイルにヘッダーファイルを読み込む記述を
0479デフォルトの名無しさん (ワッチョイ 0f8b-PwKp)
2016/11/14(月) 01:31:01.91ID:KpxNuMja00480デフォルトの名無しさん (ガラプー KK8f-sVJD)
2016/11/14(月) 01:34:49.36ID:L1+AAJlgK#include "ファイル名"
0481片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK6f-sVJD)
2016/11/14(月) 01:45:39.32ID:L1+AAJlgK文字列を関数で返すためには、どこかに文字列が格納されていなければならない。
malloc,calloc,realloc,strdupなどで動的に格納する場所を作るか、
事前に用意したバッファに格納する。
0482片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK6f-sVJD)
2016/11/14(月) 01:52:10.31ID:L1+AAJlgKmemcpy, strcpy, strncpyなどを使うことができる。
0483デフォルトの名無しさん (ワッチョイ 83c1-kx01)
2016/11/14(月) 02:10:57.33ID:qeitxhXf0有難うございます
0484デフォルトの名無しさん (ワッチョイ df7b-uCRY)
2016/11/14(月) 02:11:09.00ID:7FW0rmhY0普通は関数の戻り値で文字列を扱う場合は文字列へのポインタを返す
0485デフォルトの名無しさん (JP 0H6f-2n2A)
2016/11/14(月) 07:11:21.14ID:IkO1tjwLH●前提
・文字列は文字の配列
・Cでは配列をそのまま戻り値として返すことはできない
・文字列の末尾に 0 がつくので配列の長さを余分に取る
●対策
A.呼び出し元で十分な長さの配列を用意しそれを指すポインタを引数で渡してもらう
B.関数内で作成した配列へのポインタを返す
Aは一見面倒だが長さがわかってて決め打ち出来る場合はお手軽
Bは長さがわからない場合に関数内でメモリを確保(malloc)し使用
呼び出し側で毎回解放(free)の手間がかかりうっかり忘れて見えないバグにつながるので避けたい
0486デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)
2016/11/14(月) 09:33:06.00ID:j3M9laUg00487デフォルトの名無しさん (ワッチョイ c3a1-zfai)
2016/11/14(月) 13:38:18.85ID:qs04J1oz0知識としては…
Cでも構造体を返すことができます。構造体は、コピーされます。
int, char[]が構造体にはいっている
0488デフォルトの名無しさん (ワッチョイ c3a1-zfai)
2016/11/14(月) 14:00:42.81ID:qs04J1oz0#include <stdio.h>
#include <string.h>
typedef struct INT_CHAR INT_CHAR;
struct INT_CHAR {
int n;
char c[BUFFER_SIZE];
};
INT_CHAR function(void) {
INT_CHAR ic;
strcpy(ic.c, "messages");
ic.n = strlen(ic.c);
return ic;
}
int main(void)
{
INT_CHAR s;
s = function();
puts(s.c);
return 0;
}
0489デフォルトの名無しさん (ワッチョイ c3a1-zfai)
2016/11/14(月) 14:06:26.57ID:qs04J1oz0#include <stdio.h>
#include <string.h>
void function(char *p) {
strcpy(p, "messages");
}
int main(void)
{
char c[BUFFER_SIZE];
function(c);
puts(c);
return 0;
}
0490デフォルトの名無しさん (ワッチョイ 83bd-OdgI)
2016/11/15(火) 00:18:50.47ID:q7LJNjlP0stdio.h と stdlib.h 何じゃないかと思う。
他の言語のメソッドとか回りくどい概念をいちいち覚えるよりも、
この2つを九九のごとく頭に叩き込んで体に覚えさせれば、
他の言語や処理系も、同じようなことを文法をかえて、それぞれ独自に
アレンジしてるだけだからすんり理解できるんじゃないか?
どうして誰もこのような方法を教えてくれなかったんだろうか?
何で九九をマスターさせずに虚数みたいなものから解説しようとするのか
俺には理解に苦しむね。
0491デフォルトの名無しさん (ワッチョイ c756-MJQ8)
2016/11/15(火) 00:34:26.89ID:i7kpJCwQ0押しつけ的な教育が楽だからでしょ。
0492デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/15(火) 00:44:19.98ID:uqDvjpmu0「順次処理」「分岐処理」「繰り返し処理」をその言語でどう表現するか(構文)を
リファレンスから辿れば普通に理解できるわけなんだけど
わからん奴は「アドレス」とは何かなどの基本のコンピュータの仕組みが分かってないだけと思う
0493デフォルトの名無しさん (ワッチョイ 83bd-OdgI)
2016/11/15(火) 01:32:32.92ID:q7LJNjlP0何をやってるのかを隠ぺいしている。
0494デフォルトの名無しさん (ワッチョイ 6f3c-teht)
2016/11/15(火) 01:46:59.76ID:7xV8Yp/e0データ構造にまつわるポインタは慣れてないとその概念をつかむのは難しい
0495デフォルトの名無しさん (ワッチョイ 83bd-OdgI)
2016/11/15(火) 01:54:50.09ID:q7LJNjlP0そこからなかなか進めなくなるし、「2*3」と「8*4」の違いとは何か、
同じ方法ででできるのかということを考え出してしまう。
これが>>492 が言っている、「基本のコンピュータの仕組み」だよ、
それは極めて分かりにくい、見えはしないし、余りに高速すぎて理解できない。
そこで理解できない小学生には「引数と結果の」対応だけを覚え込ませるだろ?
結果的にそれで正解だろ?
「乗算とは何か」なんてことやってたら純粋数学や哲学の領域に入り込んで
抜け出せなくなる。
0496デフォルトの名無しさん (ワッチョイ c756-MJQ8)
2016/11/15(火) 03:05:24.78ID:i7kpJCwQ00497デフォルトの名無しさん (ワッチョイ 8fe1-PwKp)
2016/11/15(火) 03:55:05.43ID:PhOBmSZe0特にCはメモリ確保と文字列、配列あたりが他の言語よりかなり使いづらい
0498デフォルトの名無しさん (ワッチョイ 83bd-OdgI)
2016/11/15(火) 08:06:33.72ID:q7LJNjlP0printf System.out console.log echo なんて同じものをいくつも
時間をかけて覚えなくたって、「焼き増し」の部分は勘ですぐ使える
ようになるだろ?
ということは、各種言語の「焼き増しじゃない部分」を見分けるためには、
一番参考元になっているCのライブラリを暗記するのが最適じゃ
ないか?
Cのライブラリを覚えておいて、他の言語の「身に覚えがない」部分だけ
注意深く学習するんだよ。
0499デフォルトの名無しさん (ワッチョイ 377b-EKpQ)
2016/11/15(火) 08:43:27.36ID:7W+Eb75M0しかも強力だ。
1.文法がきれい
2.仕様が小さい(簡単に覚えられる)
3.強力
これだけの利点があるのだから覚えない、教えないのはもったいない。
これが基本にあるかないかは大きいと思う。
Cのポインターとキャストは生生しく柔軟過ぎて、危険すぎるもの
ではあるが危険を取り払うと感性が鈍る。これに慣れ親しむというのが
勉強にはいい。
0500デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)
2016/11/15(火) 09:58:38.11ID:IxmHzjUK0ただポインタと構造体の記述フォーマットには戸惑った。
アロー演算子(->)なんてジョークかと思った。
0501デフォルトの名無しさん (ワッチョイ 134e-dJcJ)
2016/11/15(火) 10:24:27.41ID:DjuodKRu0ドットとアローを使い分ける必要あったかな。
構造体のポインタ経由でもドットでパースいけるんちゃう?
0502デフォルトの名無しさん (ワッチョイ df7b-xNTA)
2016/11/15(火) 10:37:38.54ID:RVzzgb300(*hoge).piyo
hoge->piyo
0503デフォルトの名無しさん (ドコグロ MM8f-wOPQ)
2016/11/15(火) 10:40:02.73ID:8O6rwMYtM0504デフォルトの名無しさん (ドコグロ MMef-wOPQ)
2016/11/15(火) 11:31:46.78ID:r6BgB6bMMCの仕様は総じてシンプルで分かりやすい。まあビット演算子の優先度が比較より低い件はいまいちだけど
あと代入のイコールはPASCALみたいに:=にする方が良かった
0505デフォルトの名無しさん (ワッチョイ 6f3c-teht)
2016/11/15(火) 11:34:32.28ID:7xV8Yp/e0って知り合いに聞いて ほぇー ってなった
0506デフォルトの名無しさん (ワッチョイ 8fe1-zoBz)
2016/11/15(火) 12:38:09.07ID:PhOBmSZe0http://qiita.com/yohhoy/items/960ee7a7b502e5c764b4
もっと単純なところで、副作用2回とかi++と++iの違いとか、*p++って書いて有る場合の優先順位とかもわかりにくい
sprintfの引数に文字列だけ&をつけないとか、間違った処理(メモリ破壊など)をしてもエラーで止まらないとかも初心者殺し
文字終端\0やマクロ、プロトタイプ宣言、ファイル分割の方法といった他の言語とことなる部分も多い
強力というが、機械の制御とか以外では実用性のあるプログラムは(初心者には)書けない
0507デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)
2016/11/15(火) 12:44:04.61ID:IxmHzjUK00508デフォルトの名無しさん (JP 0H6f-2n2A)
2016/11/15(火) 14:30:43.80ID:4QSE1fRAHプロなら無意識に避ける潜在バグやコーナーケースばっかりやないか
1問目はやられたと思ったけどw
0509デフォルトの名無しさん (ワッチョイ efba-Cgco)
2016/11/15(火) 17:22:21.27ID:tf1AFsOG0何かいいことあるの?
0510デフォルトの名無しさん (ワッチョイ 237b-e60R)
2016/11/15(火) 17:41:53.82ID:Pl5GrYtp0とほざいて未来永劫バカにされる事が出来る
0511デフォルトの名無しさん (ワッチョイ 7f13-teht)
2016/11/15(火) 20:29:53.06ID:vYoawJH300512デフォルトの名無しさん (ワッチョイ 6b42-WVKM)
2016/11/15(火) 20:48:16.43ID:k8jObWYJ00513デフォルトの名無しさん (ワッチョイ 8fc0-fsQo)
2016/11/15(火) 21:55:27.46ID:HcDSv4MP00514デフォルトの名無しさん (ワッチョイ 0fed-WVKM)
2016/11/15(火) 22:45:25.43ID:XOuL+TpX0C++用ヘッダではextern使われてたけど
C用では使われてなかったな。
0515デフォルトの名無しさん (ドコグロ MMff-wOPQ)
2016/11/16(水) 07:28:38.05ID:mvy4oGzgM> これの半分も正解できるやつどれぐらいいるの?
半分ぐらいなら普通にいるだろ
> 副作用2回とかi++と++iの違いとか、*p++って書いて有る場合の優先順位とかもわかりにくい
いやさすがにそれは勉強して出直してこいレベル
> sprintfの引数に文字列だけ&をつけないとか
sscanf( ) ならまだわかるけど sprintf( ) なら文字列以外も & なんて付けないと思うが...
> 間違った処理(メモリ破壊など)をしてもエラーで止まらない
それ実装の問題で文法の問題じゃないし
> 強力というが、機械の制御とか以外では実用性のあるプログラムは(初心者には)書けない
初心者用の言語じゃないし
0516デフォルトの名無しさん (ワッチョイ 83bd-OdgI)
2016/11/16(水) 13:08:21.57ID:dTMx6UZd0というか場合分けがよくわからない、もしくはどちらでも可なのか。
void func(int arg);
void func2(int);
0517デフォルトの名無しさん (ワッチョイ 6b7b-AIKs)
2016/11/16(水) 13:20:10.34ID:+UPrzS1g0コンパイラ的にはどちらも同じ
宣言を見てその関数を使う人が引数の意味を推測しやすくするために名前を付ける
0518デフォルトの名無しさん (JP 0H6f-2n2A)
2016/11/16(水) 13:48:14.44ID:Io8tNnmjHメモリもディスクも画面サイズも足りなかった時代の悪習だから
後者は忘れていい
0519デフォルトの名無しさん (ワッチョイ 87ff-8a14)
2016/11/16(水) 13:52:46.59ID:hL8zHUS90それはちょっと勘違いしてる
0520デフォルトの名無しさん (JP 0H6f-2n2A)
2016/11/16(水) 13:57:09.10ID:Io8tNnmjH宣言の側はただの飾りだから
実体側の引数名と一致しない場合がある(エラー検出されない)
0521デフォルトの名無しさん (ワッチョイ 6f4e-dJcJ)
2016/11/16(水) 15:26:49.89ID:SMjNMGeh0IDEによっては補完候補にも表示してくれる。
定義の方はローカル変数だから短くて良いと。
0522デフォルトの名無しさん (ガラプー KK8f-dPkQ)
2016/11/16(水) 17:15:23.54ID:smgZxLVEKお願いします!
0523デフォルトの名無しさん (ワッチョイ df7b-H10S)
2016/11/16(水) 17:39:43.54ID:9EL6ismP0自分はWindows環境なのでVisualStudioを使ってる
0524デフォルトの名無しさん (ガラプー KK6f-dPkQ)
2016/11/16(水) 18:33:46.56ID:smgZxLVEK参考にさせていただきます!
0525デフォルトの名無しさん (ドコグロ MM5f-wOPQ)
2016/11/16(水) 19:53:09.80ID:KQ3YixihMkwsk
0526デフォルトの名無しさん (ワッチョイ 4b77-9KU2)
2016/11/16(水) 20:58:02.36ID:xT6pR/ja0519じゃないけど
API08-C. 関数プロトタイプでは引数に名前をつけない
https://www.jpcert.or.jp/sc-rules/c-api08-c.html
0527デフォルトの名無しさん (JP 0H6f-2n2A)
2016/11/16(水) 21:02:41.32ID:Io8tNnmjHマクロ名って大文字使用じゃないのん
0528デフォルトの名無しさん (ワッチョイ 137b-y1U6)
2016/11/16(水) 21:13:40.90ID:rMQ4TTNg00529デフォルトの名無しさん (ワッチョイ 6f3c-teht)
2016/11/16(水) 21:17:55.90ID:riFmGWu20どっちがどっちかわからんくなるな
0530デフォルトの名無しさん (ワッチョイ 6f4e-dJcJ)
2016/11/16(水) 21:26:15.75ID:SMjNMGeh0どっちでもいいんだけど几帳面だから。
0531デフォルトの名無しさん (ワッチョイ 6f4e-dJcJ)
2016/11/16(水) 21:32:36.74ID:SMjNMGeh0この場合は定数にdefineを使うべきじゃなくconst intにすべきだし、
定数名は大文字キャメルケースなりprefix付けるなりすべきだと思うな。
define多用は良くないよ。
0532デフォルトの名無しさん (ワッチョイ 6f4e-dJcJ)
2016/11/16(水) 21:38:47.23ID:SMjNMGeh0そっちの方が問題。
0533デフォルトの名無しさん (ワッチョイ 6f3c-wOPQ)
2016/11/16(水) 22:18:20.03ID:TE0DjPON0これってプロトタイプでエラーにならなくても関数定義側でエラーになるだろ w
>>527 の言うようにマクロは大文字で書けって言う方がマシやん
0534デフォルトの名無しさん (ワッチョイ b37b-e60R)
2016/11/16(水) 23:11:38.87ID:98uH8XY70木を見て森を見ない噴飯もののルール
0535デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/16(水) 23:13:06.14ID:O6EmXZtQ0俺も仮引数名つけない派
0536デフォルトの名無しさん (ブーイモ MM1f-wOPQ)
2016/11/16(水) 23:20:19.76ID:0aBht35qM0537デフォルトの名無しさん (ワッチョイ ef17-WVKM)
2016/11/16(水) 23:24:14.05ID:O6EmXZtQ0それはダメ
むしろなくさなければいけない
0538デフォルトの名無しさん (ワッチョイ 0f8b-wOPQ)
2016/11/16(水) 23:25:48.79ID:T0veAKNy00539デフォルトの名無しさん (ワッチョイ b37b-e60R)
2016/11/16(水) 23:33:16.09ID:98uH8XY70void update_status(int);
ダメじゃん w
0540デフォルトの名無しさん (ワッチョイ 6b42-WVKM)
2016/11/16(水) 23:33:26.80ID:+mSoNAtY00541デフォルトの名無しさん (ワッチョイ 3f6f-+4oZ)
2016/11/17(木) 02:26:33.69ID:8xmBWk670この違反コード例って、引数名をつけることが問題の原因じゃなくて、
#defineで同じ名前をつけたことの問題でしょ
意図がさっぱりわからん
#define status 23
int update_status(int); // こっちは回避できても
int update_status(int status) { // こっちはダメでしょ
/* */
}
むしろ変数名をつけて可読性を上げる方を推奨すべきじゃないの
0542デフォルトの名無しさん (ワッチョイ f25a-XpIe)
2016/11/17(木) 02:38:02.30ID:ZKu9KMD+0分担して作成していたら、名前がかぶった
だったら、関数の仮引数に下がってもらおうという話でしょ
0543デフォルトの名無しさん (ワッチョイ be9f-0/hK)
2016/11/17(木) 02:47:52.57ID:UY2cVCQk0これでもいいって書いてあるのに可読性のクレームは筋が悪い
0544デフォルトの名無しさん (ワッチョイ 3f6f-+4oZ)
2016/11/17(木) 03:52:02.76ID:8xmBWk670そういう名前がかぶって仮引数に下がってもらった案件があったとしても、
「関数プロトタイプでは引数に名前をつけない」という一般化になるのが
理解できない。それが原因じゃないよね、って感じる。
>>543
妥協案はそのコメントにする方法だけど、そもそもコメントにする必要もない。
「プロトタイプの引数に名前をつけない」が間違ってるならね。
あとそこは、/* status */ にすべきだろうね。翻訳しすぎ
0545デフォルトの名無しさん (ドコグロ MM1c-RUi6)
2016/11/17(木) 06:58:27.73ID:MTp7l4mwMこれだから日本の役所っぽいところが作ったコーディングルールなんて役に立たないんだよな
って書こうとしたらこれの単なる翻訳なんだな
https://www.securecoding.cert.org/confluence/plugins/servlet/mobile#content/view/25296973
見辛くなるから API 使う奴が間違ってしまってセキュリティ下げるもとになるからこんなルールは削除したら?
ってコメントついてる w
0546デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/17(木) 07:21:40.95ID:mx0eMjxm0って自覚してほしい
0547デフォルトの名無しさん (ワッチョイ 4090-2XGH)
2016/11/17(木) 07:41:39.81ID:7TLsjsTe00548デフォルトの名無しさん (ドコグロ MMb8-RUi6)
2016/11/17(木) 08:38:16.19ID:SX2OfUTfM可愛けりゃまだな
0549デフォルトの名無しさん (ワッチョイ 5e4e-Th+s)
2016/11/17(木) 09:58:14.97ID:+o4tuiiL0キャメルじゃなくてスネークケースの間違いだった。
このように、人間はミスを犯すのです。
0550デフォルトの名無しさん (アウアウカー Sa41-478M)
2016/11/17(木) 11:01:05.21ID:GIzhT3Zca0551デフォルトの名無しさん (ワッチョイ 5e4e-Th+s)
2016/11/17(木) 11:09:55.39ID:+o4tuiiL00552デフォルトの名無しさん (アウアウカー Sa41-478M)
2016/11/17(木) 11:17:12.69ID:GIzhT3Zca有難うございます
0553デフォルトの名無しさん (エーイモ SE2d-dXbs)
2016/11/17(木) 15:04:56.23ID:G+5xeCS2E最新の仕様とか古い仕様とわず一番簡単に動的に配列を作る方法ありませんか?
0から100までの整数Nを100個ランダムに生成して
Nが偶数なら配列変数gに、奇数なら配列変数kに代入していきたい
gとkのサイズの合計は100だとわかるけど
gとkそれぞれのサイズの合計がわからないのでこういう場合はどうやって配列を作るといいですか?
0554デフォルトの名無しさん (ワッチョイ 88ff-d8X5)
2016/11/17(木) 15:27:44.31ID:5aO/SijD0でも100とわかってるなら100の配列用意して
ポインタg,kにその配列のアドレス入れるとか
0555デフォルトの名無しさん (ワッチョイ 88ff-d8X5)
2016/11/17(木) 15:28:59.99ID:5aO/SijD0入れながら増やすならまた別のやりかたになることも
0556デフォルトの名無しさん (ブーイモ MM65-RUi6)
2016/11/17(木) 15:35:23.15ID:wmO78uwBM配列の&の有無は意味が違うよ
arrayだけだと先頭要素へのポインタ
&arrayだと配列全体へのポインタ
代入するときに型が合わないと警告される
0557デフォルトの名無しさん (ブーイモ MM65-RUi6)
2016/11/17(木) 15:48:25.84ID:wmO78uwBM最大100の配列が2個でいいんなら両方静的に作っておけばいいんでは?
もし仮に最悪1GBだけど平均1KBの配列が10個とかいう条件なら
mallocとreallocを駆使するのが最善かな
でも平均100MBとかで巨大なreallocが何度も実行される可能性を嫌うなら
適当なチャンクごとにツリー状に配列の配列みたいな構造を作る
0558デフォルトの名無しさん (JP 0H65-wlUq)
2016/11/17(木) 16:49:52.71ID:GuPz6eIGH可変長引数って先頭に引数の数を渡さないといけないんですかね?
不定数の文字列を渡して連結するような関数を書きたいんですが、URLの様にかくと”hello”の部分が
飛ばされてしまうのでなんとかならないですか?
0559デフォルトの名無しさん (ワッチョイ 9fd4-UoMj)
2016/11/17(木) 17:04:23.61ID:IpUgROqr00560デフォルトの名無しさん (ワッチョイ 88ff-d8X5)
2016/11/17(木) 17:26:06.86ID:5aO/SijD00561デフォルトの名無しさん (ワッチョイ 9fd4-UoMj)
2016/11/17(木) 18:03:10.05ID:IpUgROqr0(サンプル数の合計が定数なら、malloc で動的に生成するまでもないけど)
例えば int*型の変数 num を仮に num=(int*)malloc(sizeof(int)*100) として生成。
その後、ランダムな値の整数Nを1つずつ生成し、
偶数なら num[0], num[1], num[2] ... の順で。
奇数なら num[99], num[98], num[97] ... の順で。
合計100回に達するまで、配列 numに順次代入していく。
偶数配列は、先頭が num なので、num[]。
奇数配列は、先頭が num+n (nは偶数のサンプル数=100-奇数のサンプル数)なので、(num+n)[]。
のような感じで考えてみてはいかがかと。
0562デフォルトの名無しさん (JP 0H65-wlUq)
2016/11/17(木) 18:30:21.64ID:GuPz6eIGHありがとうございます、これって結局可変長引数は第一引数を引数の個数にする必要はないってことですよね?数値渡すなら最後-1とかにすれば終わりが分かるので…
0563デフォルトの名無しさん (ワッチョイ 88ff-d8X5)
2016/11/17(木) 18:41:39.19ID:5aO/SijD0まあ全部が同じ型なら終端も判別できるしそれでいいと思うよ
printfは最初の文字列で、次以降の変数の型と個数までわかる仕様だし
別に個数そのものが入ってるわけじゃない
ただ呼ぶ側がミスると終端飛び越しちゃう可能性あるから注意だな
0564デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/18(金) 02:52:37.17ID:SgtZza8z0どうして型に * がついていて、末尾側についているんだ?
0565デフォルトの名無しさん (ワッチョイ 9fd4-UoMj)
2016/11/18(金) 05:14:56.78ID:QnIUDUY40(1)int i, char c のような変数 i, c がある時、
&i や &c の型は何だろう? と考えてみる。
(2)int *pi と char *pc のような変数 pi, pc がある時、
pi+1 と pc+1 で何が違うんだろう? と考えてみる。
0566デフォルトの名無しさん (ワッチョイ 9c7b-wMId)
2016/11/18(金) 06:21:38.91ID:1TQ7nfkR0int32* p_i32
なら、4バイト(32ビット)のメモリサイズを持つ
p_i32 + 1
なら、メモリアドレスが4バイト進む。
例えば、p_i32がメモリアドレス100なら、104になる
p_i32 + 3
なら、メモリアドレスが12バイト進む
100 + (4 * 3)のように、一々自分で、4バイトを掛けなくてもよい。
コンパイラは、p_i32 が4バイトずつ進む型であることを、知っているから
0567デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/18(金) 07:05:30.95ID:SgtZza8z0わざわざ int* p にするんだ?
この型が出てくると混乱するんだよ。
0568デフォルトの名無しさん (ワッチョイ 56c0-E4Cj)
2016/11/18(金) 07:07:09.68ID:2yb3wpBY0嘘書くな
0569デフォルトの名無しさん (ワッチョイ f64e-RUi6)
2016/11/18(金) 07:09:37.79ID:y1CkkXMt0&は変数のアドレス値を返す演算子。
*はポインターの示す場所に入っている値を返す演算子
0570デフォルトの名無しさん (ワッチョイ 9fd4-UoMj)
2016/11/18(金) 08:20:54.14ID:QnIUDUY40ちょっとわろた。
int* p でもいいけど、int *p と書いた方が分かりやすいかな。
*p と書くと int になる変数p、ということで合ってるじゃん?
0571デフォルトの名無しさん (ワッチョイ bdfd-DGos)
2016/11/18(金) 08:25:03.56ID:t2CjkJl40C++の関数の引数で採用されたよ。
0572デフォルトの名無しさん (ワッチョイ b178-RUi6)
2016/11/18(金) 09:03:58.67ID:6I0OJhBc00573デフォルトの名無しさん (ワッチョイ 627b-RfK+)
2016/11/18(金) 09:04:39.07ID:yf1LiC8000574デフォルトの名無しさん (ブーイモ MM0d-RUi6)
2016/11/18(金) 09:56:20.90ID:mEWv72c0M混乱させて遊びたいのなら別だが
0575デフォルトの名無しさん (オッペケ Sra9-RUi6)
2016/11/18(金) 11:08:07.97ID:HK7Im3JLr&だと、ポインターがint型って事になって、おかしいだろ。
*なら、ポインターの示す先がint 型って事だから、分かりやすい。
0576デフォルトの名無しさん (ワッチョイ 9c4f-XpIe)
2016/11/18(金) 11:22:32.64ID:2s4GJbwa0生の型に * がつくと ポインタ
利用時
生の型の変数に & がつくとポインタ
ポインタの変数に * をつけて(指し先の)生の型
そういう文法なので
「何故?」ではなく、「そういうもんだ」として理解するしかない
0577デフォルトの名無しさん (ワッチョイ feba-37p2)
2016/11/18(金) 12:11:31.70ID:4pR1EysP0++では仮定義は無いらしい
宣言と定義があいまいで混乱の元だからだろ
0578デフォルトの名無しさん (ドコグロ MMd5-RUi6)
2016/11/18(金) 12:12:27.35ID:i8W18eRqMアドレスはポインタではないでしょ?
0579デフォルトの名無しさん (ドコグロ MMd5-RUi6)
2016/11/18(金) 12:27:52.21ID:Un45qbnZM0580デフォルトの名無しさん (ワッチョイ 627b-RfK+)
2016/11/18(金) 12:35:50.67ID:elv809Fr00581デフォルトの名無しさん (ワッチョイ feba-37p2)
2016/11/18(金) 12:45:39.07ID:4pR1EysP0だな
0582デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/18(金) 13:00:38.73ID:SgtZza8z0int * p もありなの?
空白スペースの区切りで何か変わるのか、順番だけが重要なのか、
恐らく int*p はエラーになると思うんだよ。型と引数が連結してるん
だから。 普通 型と引数で演算したりしないだろ、
それなのに演算子がこの間にあるあるのが嫌なの。
境界がよくわからんから気持ちが悪い。
0583デフォルトの名無しさん (アウアウカー Sa41-2XGH)
2016/11/18(金) 13:18:51.48ID:9iqMa1Dcaかけ算の演算子*とはたまたま同じ記号を使ってるだけでこの*は演算子じゃない
0584デフォルトの名無しさん (ワッチョイ fe16-u2Hn)
2016/11/18(金) 14:08:56.40ID:Kc9LvC1S0次はなぜ q はポインタじゃないのよムキーッとなるだろう
0585デフォルトの名無しさん (ワントンキン MM40-RUi6)
2016/11/18(金) 14:23:10.78ID:0gQQCyidM0586デフォルトの名無しさん (ワッチョイ 9c4f-XpIe)
2016/11/18(金) 14:29:57.00ID:2s4GJbwa0/*
がコメント開始になっちゃうんだな
0587デフォルトの名無しさん (ワッチョイ 7742-tQqt)
2016/11/18(金) 18:54:56.85ID:RivhHfJv00588デフォルトの名無しさん (ワッチョイ 3a13-XpIe)
2016/11/18(金) 20:25:44.91ID:7RNwkfhn0そんなんでコンパイルが通るのか?
0589デフォルトの名無しさん (ワッチョイ be9f-0/hK)
2016/11/18(金) 21:04:50.98ID:eISdsYkv0int*p; はエラーじゃないしint * p;もありだし、なんならint(*p);とかint*(p);もあり
int* p;とかint *p;みたいにスペース入れてるのは他の宣言hogetype x;のように
型名と変数名を区切るためにスペースが必要になる場合と見た目を合わせてるだけ
0590デフォルトの名無しさん (ワッチョイ 3a13-XpIe)
2016/11/18(金) 21:45:07.81ID:7RNwkfhn0なんでC++ の悪習だね
0591デフォルトの名無しさん (ワッチョイ 51a1-/Gnx)
2016/11/18(金) 21:56:09.13ID:Z3dj2p9G0INT_POINTER p;
0592デフォルトの名無しさん (ワッチョイ f25a-XpIe)
2016/11/18(金) 22:11:34.98ID:gD9+wH1A0の[]は配列を宣言するために必要な[]、
式で利用するときの
a[3] = 5;
は、配列の中身にアクセスするための角カッコ演算子
こういった対称性というか一貫性を持たせたということ
ポインタの宣言と利用のときも同じ。
0593デフォルトの名無しさん (ワッチョイ 56e1-RUi6)
2016/11/19(土) 00:56:04.67ID:1yryIr4y0掛け算と同じ*を使う
&や逆参照の*が紛らわしい
型ではなく変数名に*をつける
まだプログラムの文法とか機能がよく考察されてない頃に適当に考えて普及しちゃったのでしょうがない
C#とかでは型を重視するのでint* p,qは両方ポインタになる
注意がいるけど、C#でポインタを使うのはまれだし、かなり制限が厳しいので勘違いしてもコンパイルエラーで気づけるって判断だろうな
0594デフォルトの名無しさん (ワッチョイ b590-RUi6)
2016/11/19(土) 01:11:15.86ID:cbZzwZ/B0ポインタの文法の一貫性に気づけないとは
0595デフォルトの名無しさん (ドコグロ MM1c-hkLf)
2016/11/19(土) 01:25:22.28ID:Z22xlOXbM0596デフォルトの名無しさん (アウアウカー Sa41-478M)
2016/11/19(土) 08:14:45.51ID:s9nLugpraint a[5]; ○
int a[ ] = {1, 2, 3, 4, 5}; ○
int a[ ] ; ×
int a[ ] = {};×
では関数へ引数として配列を渡す場合にはなぜ
int a[ ];
のようなことが許されるのでしょう?
0597デフォルトの名無しさん (ブーイモ MMb8-PKBG)
2016/11/19(土) 08:30:06.27ID:XsxgLWFiM関数ポインタはfuncでも&funcでも&&&&&funcでもいいけど素晴らしい一貫性ですね
0598デフォルトの名無しさん (ワッチョイ 7cd2-RUi6)
2016/11/19(土) 08:38:12.97ID:BE9TkxlS0コンパイラにとって、基本は、空白に意味はない。
0599デフォルトの名無しさん (ワッチョイ 9c7b-wMId)
2016/11/19(土) 08:38:54.94ID:gGKRRZRa0引数に渡す場合、アドレスのサイズがわかれば十分
int32 a[ ], int32* p
どちらの表記でも、4byte(32bit)だとわかる
0600デフォルトの名無しさん (ワッチョイ 4090-RUi6)
2016/11/19(土) 08:39:34.48ID:k41T9UK80領域を確保する必要がないからではないでしょうか?
0601デフォルトの名無しさん (ワッチョイ 5e3c-XpIe)
2016/11/19(土) 08:40:02.12ID:O4HKgKoh0http://codepad.org/yDLYOQAO
引数で int a[50] としてるが大きさの数字は無視され int *b と同じサイズになっている
内部で宣言した配列 int c[50]; とサイズが違うことでわかるかな?
さらに 関数test() 中で
a++ は文法エラーにならないけど
c++ は文法エラーになるあたりで配列とポインタの微妙な差異が判れば良いのだがー
0602デフォルトの名無しさん (ワッチョイ 7cd2-RUi6)
2016/11/19(土) 08:42:26.09ID:BE9TkxlS0配列の先頭のポインタ値が渡されるだけだから。
0603デフォルトの名無しさん (ワッチョイ b57b-SIJ6)
2016/11/19(土) 10:10:17.42ID:8T+Z9t5R0>配列の宣言時にはその要素数を明示的にする必要がありますよね?
こっちは変数の宣言
>では関数へ引数として配列を渡す場合にはなぜ
こっちは関数引数の宣言
記述方法は似ているが、文法的に異なるもの
0604デフォルトの名無しさん (ワッチョイ 6d17-ihSy)
2016/11/19(土) 11:18:46.65ID:ZfUdGYAZ0>>600 とはある意味正反対に、初期化の時には内容を確定する必要があるから、中身を指定する必要がある。って。
0605デフォルトの名無しさん (ワッチョイ 325b-nAsy)
2016/11/19(土) 13:39:26.36ID:46Hc19Oo0ちゃんと理解して使えば危険じゃねし、すごく便利なものだよ。
なんでもかんでも危険とかいう風習作るな。
包丁だって危険危険いってたら料理で使えねーじゃんよ。
0606デフォルトの名無しさん (ワッチョイ 777b-X8JF)
2016/11/19(土) 14:10:02.42ID:0cH3YNKy0どのレスの事を言ってんのかわからんけどポインタも包丁も危険なのは事実だから
危険だからこそ気をつけて使えって話
0607デフォルトの名無しさん (オッペケ Sra9-RUi6)
2016/11/19(土) 14:18:11.98ID:TiiNhnqIr今時のC言語って、ハードに近い部分の記述にしか使わないのに、ポインターごときで危険とか。
レジスタに書く値間違えただけで、壊れる可能性有るのに。
0608デフォルトの名無しさん (ワッチョイ 325b-nAsy)
2016/11/19(土) 14:20:00.25ID:46Hc19Oo0そもそも危険という言い回しがおかしいんじゃねー?
ポインターを間違った思い込みでコード書いた場合、予期せぬ動作をするだけであって、善も悪もない。
間違ったコードを書いた本人が失敗しただけ。
GOTO排除と一緒の雰囲気がするな。
0609デフォルトの名無しさん (ワッチョイ 7d4e-Th+s)
2016/11/19(土) 14:23:57.44ID:723d8cAJ00610デフォルトの名無しさん (ワッチョイ 379b-RUi6)
2016/11/19(土) 14:25:05.15ID:g9Pmrtlr0せいぜいガラスの灰皿くらいじゃ
0611デフォルトの名無しさん (ワッチョイ 777b-X8JF)
2016/11/19(土) 14:31:41.08ID:0cH3YNKy0C言語自体が危険と言い換えてもいいけど?
危険なものは危険だと認識して使わないとだめだろ?
>>608
何もおかしくないと思うが。色々なメモリ安全な言語にunsafeブロックとかあったりするけどそれはどう訳すんだ?
0612デフォルトの名無しさん (ワッチョイ 777b-X8JF)
2016/11/19(土) 14:34:59.51ID:0cH3YNKy0これまでにC言語で一度もバッファーオーバーフローするコードを書いたことないって断言できるやつ出てこいよ
0613デフォルトの名無しさん (ワッチョイ 325b-nAsy)
2016/11/19(土) 14:36:51.78ID:46Hc19Oo0言語の仕様で、利用者が危険危険いってるだけじゃねーの?
ポインターなしで縛りプレイのC言語なんて冷めたピザのようなものだ。
0614デフォルトの名無しさん (ワッチョイ 325b-nAsy)
2016/11/19(土) 14:44:27.57ID:46Hc19Oo0観測者がいなければ宇宙は存在しない。
問題を問題としなければ問題とならないし、それは実行後の現象であるわけだ。
仕様なのか、エラーとするかは、作り手しだいじゃねーの?
作り手が、知恵を出してバッファーオーバーフローにならない対策をとればいいんじゃね?
0615デフォルトの名無しさん (オッペケ Sra9-RUi6)
2016/11/19(土) 14:47:38.21ID:TiiNhnqIr逆に危険な事が出来ない言語は、ハードの制御出来ない。
0616デフォルトの名無しさん (ワッチョイ 7d4e-Th+s)
2016/11/19(土) 15:12:41.49ID:723d8cAJ00617デフォルトの名無しさん (ブーイモ MM0d-RUi6)
2016/11/19(土) 15:39:11.83ID:9cnRDmpwMバッファはオーバーランだよね。オーバーフローってどういう状態なんだろう
0618デフォルトの名無しさん (ワッチョイ 379b-RUi6)
2016/11/19(土) 15:46:15.93ID:g9Pmrtlr0https://en.wikipedia.org/wiki/Buffer_overflow
0619デフォルトの名無しさん (ワッチョイ 56e1-RUi6)
2016/11/19(土) 19:35:20.11ID:1yryIr4y0雑な詭弁だな
(他の高水準言語と比べて)C言語、特にポインタは危ないって話だろ
バッファオーバーフローだから脆弱性なんじゃなくて、脆弱性の原因がバッファオーバーフロー
知恵を出してならない対策をする必要があるのは危険なんだから当然。初心者には難しいし、高度な技術者でも完全ではない
0620デフォルトの名無しさん (ワッチョイ f25b-S3Pk)
2016/11/19(土) 20:03:55.45ID:N6H05B630ドライバも書くし、コンパイラも記述する。
0621デフォルトの名無しさん (ワッチョイ 7742-tQqt)
2016/11/19(土) 20:25:13.08ID:O4/w9IIT0バッファという有限の器に、その容量を超えてデータを格納する行為
溢れると言う表現でもあながち間違いとは言えないんじゃ
0622デフォルトの名無しさん (ワッチョイ 777b-X8JF)
2016/11/19(土) 21:01:23.67ID:0cH3YNKy0それを危険じゃないと言い張っても無理があるよ。
0623デフォルトの名無しさん (アウアウカー Sa41-RUi6)
2016/11/19(土) 21:16:33.85ID:OcLlgTeLaほの包丁という言葉が指すのはcじゃなくてプログラム自体
どの言語も扱い方を知らなければ脆弱性を生み出す
0624デフォルトの名無しさん (ワッチョイ 3f5b-XpIe)
2016/11/19(土) 22:00:49.16ID:oyIzevqQ00625デフォルトの名無しさん (ワッチョイ 325b-nAsy)
2016/11/19(土) 22:11:29.40ID:46Hc19Oo0危険だからと初心者にあらかじめレッテルを張るのはどーかと思うんだけどな。
壊れても大丈夫な環境で使わせて慣れさせるのが大事なんじゃね?
0626デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/19(土) 23:54:31.43ID:RTOSNdEW00627デフォルトの名無しさん (ワッチョイ 51a1-/Gnx)
2016/11/20(日) 00:24:22.29ID:ISNLrJ750NEC PC-98の古い機種には、リセットボタンがあった。リセットすると再起動した。
MS-DOSだから、インストールもたいしたことなかったから、Cは、もちろん、アセンブラに適していたとおもう
アセンブラやってたら、寿命がちじまるおもいがした
0628デフォルトの名無しさん (ワッチョイ 627b-RfK+)
2016/11/20(日) 00:38:38.36ID:x1F526JX00629デフォルトの名無しさん (ワッチョイ 6d17-ihSy)
2016/11/20(日) 00:38:46.44ID:RSV7nlYW0あれなにやってもチェックポイントに戻せば済むからホントに便利。
0630デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/20(日) 00:46:21.74ID:zuVL9nD+0なぜこれを書かなきゃいけなくて、中身の実装と分離しなきゃいけないのか
わかなん。
0631デフォルトの名無しさん (ワッチョイ 3fd2-RUi6)
2016/11/20(日) 00:48:37.09ID:CuaHUiLn0今時、Windows とか、linuxとか上のアプリをC 言語でなんて組まない。
0632デフォルトの名無しさん (ワッチョイ 7742-tQqt)
2016/11/20(日) 00:50:29.78ID:VXCu+bTp0初期のMS-DOSには、アセンブラなどが同梱してたね
0633デフォルトの名無しさん (ワッチョイ f6ed-tQqt)
2016/11/20(日) 01:08:55.48ID:8/S9xgLL0小さなプログラム/プロジェクトならいらない。
大きなプログラム/プロジェクトだと無いと不便。
0634デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/20(日) 01:15:26.23ID:Bt0RvCI60ソースファイル単位でしかオブジェクトファイルを生成できないから
オブジェクトファイルが他のオブジェクトファイルのリソース(関数や変数)を使用するために
他のオブジェクトファイルどういうリソースを持っているかを知るために必要
0635デフォルトの名無しさん (ワッチョイ 4e68-UUEt)
2016/11/20(日) 07:06:02.33ID:kpvFXroJ0githubで↓みたいなコードを見つけたんだが、これのsizeof(*obj)って言語仕様的に合法なの?
struct obj *obj = malloc(sizeof(*obj));
0636デフォルトの名無しさん (JP 0H0d-2BAc)
2016/11/20(日) 08:53:14.18ID:rUGeTkRIH言語とコンパイラの設計が
大昔のメモリもパワーもわずかなゴミ同然のハードを前提としてて
それを大事に継承しているから
0637デフォルトの名無しさん (ワッチョイ 3fd2-RUi6)
2016/11/20(日) 09:03:19.03ID:CuaHUiLn0関数を記述する順番を変えれば、プロトタイプ宣言は必要ない。
そうすると、main関数が最後尾とかになるから、見ずらくなるけど。
0638デフォルトの名無しさん (ワッチョイ b57b-RUi6)
2016/11/20(日) 09:35:03.71ID:HWcRBAeS0複数の人間で一つのソースファイルを同時には弄れないからね
0639デフォルトの名無しさん (ワッチョイ fe16-u2Hn)
2016/11/20(日) 09:56:59.79ID:hwyvqIzJ0たぶん合法だと思う
struct obj *obj
・タグ名と同じオブジェクト名だけどタグ名は異なる名前空間なので合法
struct obj *obj = malloc(sizeof *obj);
・sizeof演算子は式に適用できる
・その大きさはオペランドの型によって判断する
・VLA型以外はオペランドの評価を行わない
オペランド *obj は VLA 型ではないので評価されず影響を及ぼさない
*obj は struct obj 型を持つので sizeof *obj は struct obj 型のサイズを返す
ちなみに C99 6.5.3.4 に以下の例があった
例1. (中略)
extern void *alloc(size_t);
double *dp = alloc(sizeof *dp); // ← 同じ様な使い方をしている
0640デフォルトの名無しさん (ワッチョイ 325b-nAsy)
2016/11/20(日) 10:40:45.45ID:iFF0s/AX0openglやらdirectxやらwin32apiなど、普通にC/C++使ってアプリ作るけど?
0641デフォルトの名無しさん (ワッチョイ 4090-RUi6)
2016/11/20(日) 10:49:23.14ID:YyLE8LOD0最近はCで書いてあっても^cで止まったりするけどね。
0642デフォルトの名無しさん (ワッチョイ 4e68-UUEt)
2016/11/20(日) 18:00:06.75ID:kpvFXroJ0VLA を知らなかったのでググったけど可変長配列のことか
ttp://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf
を見たら確かに使用例として書いてありますね
Google翻訳に説明文突っ込んでみたけど、この文法自体の説明は書いてないっぽいね
0643デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/20(日) 18:15:31.29ID:zuVL9nD+0前から気になっていたがそこを追及すると逃げるので放っておいた。
でも仕事上対立するので、人事部に何で参照型と値型も知らない
人間が俺より役職が上なのか?聞いてみたら、「彼の方が俺より優秀だ
から」だそうだ、実力評価だそうだ。
それはおかしい気がする、俺はこんなスレいるぐらいだからこの違いは
知っているしもっと色々なことを知っている。
では、「実力の基準とは何か?」を聞いたら非公開だそうだ、
それってふざけてるよな。こんな情弱な会社は辞めることにしたよ。
0644デフォルトの名無しさん (ワッチョイ 627b-zhxO)
2016/11/20(日) 18:48:34.83ID:sZ9UdLC20プロトタイプ宣言の意味すら理解していないレベルで何言ってんの?
0645デフォルトの名無しさん (ワッチョイ 777b-X8JF)
2016/11/20(日) 18:56:13.71ID:bRgpXaT+0ヒント:ネタ
0646デフォルトの名無しさん (ワッチョイ 8017-XpIe)
2016/11/20(日) 19:06:52.36ID:FQAOwFla0sizeof 演算子は参照先の実体の型サイズを返すのはわかっているんだが。
0647デフォルトの名無しさん (ワッチョイ 4090-RUi6)
2016/11/20(日) 19:13:13.43ID:YyLE8LOD00648デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)
2016/11/20(日) 19:45:32.89ID:Y223jndk0まあ、やめた方がいいよ
会社のためにも w
0649デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/20(日) 20:27:12.95ID:zuVL9nD+0あと>>643 の1行目で、「ポインタ型と参照型」の違いといったけど
これは書き間違いで(この違いはほんとに微妙な書き方の違いだから
突っ込むべきではない)、
こいつはごく一般的な「値型と参照型」の違いを理解していない。
こいつが俺より有能だと思われているのはとても許せない。
0650デフォルトの名無しさん (ワッチョイ 7d4e-Th+s)
2016/11/20(日) 20:39:18.64ID:mgg0VP6s0定義の順番を考慮する必要があったが、
プロトタイプ宣言が導入されてその必要がなくなったということらしい。
0651デフォルトの名無しさん (ワッチョイ 7742-tQqt)
2016/11/20(日) 20:46:49.48ID:VXCu+bTp0複数ソースに分けてプログラムを作成するような経験は持っていないの?
0652デフォルトの名無しさん (ワッチョイ 5e3c-XpIe)
2016/11/20(日) 20:55:48.97ID:k7LsjqbH0コンパイル時にシンボルから引数と戻りの型が類推できる為の情報が収集済みである必要があるが
スクリプト系のヴァリアント型を採用してる言語ならありえる話だけど C言語じゃなぁ・・・
0653デフォルトの名無しさん (ワッチョイ 4090-RUi6)
2016/11/20(日) 21:24:14.45ID:YyLE8LOD00654デフォルトの名無しさん (ワッチョイ f6ed-tQqt)
2016/11/20(日) 21:29:11.19ID:8/S9xgLL00655デフォルトの名無しさん (ワッチョイ 9c7b-wMId)
2016/11/20(日) 22:16:27.48ID:zhAQ+Nfm0確か、セガ本に書いてあったw
会社では、独力の仕事なんて無いから、上司は技術力よりも、
指導力・コミュ力・人に好かれるか・常識があるか、つまりチームワークが優先される
君は色々なことを他人に教えて、尊敬されたり好かれたりしているか?
0656デフォルトの名無しさん (ワッチョイ 4359-XpIe)
2016/11/20(日) 22:49:19.68ID:hxNwjLKU00657デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/21(月) 01:14:40.96ID:q1m1IXb30のに疑問を持っている。
ファイル分割はいつもやっている。
>>655
お前に回答する答えはこうだ。
「俺は俺を尊敬している。」
0658デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/21(月) 01:35:16.62ID:YWw4vtVN0それを考えればプロトタイプ宣言が自然と必要なのは理解できるだろう
0659デフォルトの名無しさん (ワッチョイ 9fd4-UoMj)
2016/11/21(月) 01:38:04.08ID:9MDx+gfe0一切使わないってことかな? そら大変そうだ
0660デフォルトの名無しさん (ワッチョイ 7d4e-15x9)
2016/11/21(月) 02:40:18.59ID:s75jnKW400661デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
2016/11/21(月) 03:37:12.29ID:q1m1IXb300662デフォルトの名無しさん (ワッチョイ 627b-RfK+)
2016/11/21(月) 03:46:13.54ID:Bv8mdyId00663デフォルトの名無しさん (ワッチョイ 627b-TdGY)
2016/11/21(月) 03:53:46.33ID:Bv8mdyId00664デフォルトの名無しさん (ワッチョイ 627b-KUU4)
2016/11/21(月) 04:00:56.06ID:Bv8mdyId00665デフォルトの名無しさん (ワッチョイ bdfd-DGos)
2016/11/21(月) 07:54:09.28ID:VwKZ+S890つまり経験不足。
0666デフォルトの名無しさん (アウアウカー Sa41-2XGH)
2016/11/21(月) 08:08:13.31ID:rZbWoJvra0667デフォルトの名無しさん (ワッチョイ 7742-XpIe)
2016/11/21(月) 08:09:43.07ID:VFteHQsb00668デフォルトの名無しさん (ワッチョイ 9c4f-XpIe)
2016/11/21(月) 08:24:15.35ID:RWHjIZlz0新しい言語作るなり、どっかのスタンダード委員会みたいなのに提案するなり
もっと建設的な方向にパワー使えばいいのに
それが嫌なら長いものに巻かれろ
0669デフォルトの名無しさん (ブーイモ MMb8-PKBG)
2016/11/21(月) 08:24:49.62ID:cpCOb7HjM0670デフォルトの名無しさん (ワッチョイ 627b-RfK+)
2016/11/21(月) 08:25:09.15ID:Bv8mdyId0抽象的な概念でロジックを考えられない人だな、頭が固すぎる
コーディングはロジカルである必要があるが、設計は柔軟にものごとを捉えないと致命的なミスするぞ
0671デフォルトの名無しさん (JP 0H0d-2BAc)
2016/11/21(月) 09:30:31.51ID:NLM6L+VlH0672デフォルトの名無しさん (ワッチョイ 88ff-d8X5)
2016/11/21(月) 10:43:56.10ID:RFCc0VFb00673デフォルトの名無しさん (ワッチョイ 7d4e-Th+s)
2016/11/21(月) 13:46:24.21ID:s75jnKW400674デフォルトの名無しさん (ブーイモ MMb8-PKBG)
2016/11/21(月) 15:56:23.25ID:vyvBWDN0Mワンパスで済むように言語仕様が決められてるのは有名な話だろ
0675デフォルトの名無しさん (ワッチョイ 7d4e-15x9)
2016/11/21(月) 16:01:53.80ID:s75jnKW40なにこら
0676デフォルトの名無しさん (オッペケ Sra9-RUi6)
2016/11/21(月) 16:07:45.13ID:VPZ9LleqrそれがC++だろ?
ハード回り記述するには、Cの様な低レベルの言語が必要だから、残ってるだけで。
0677デフォルトの名無しさん (アウアウカー Sa41-RUi6)
2016/11/21(月) 16:51:18.97ID:cDH5AbC+aint leap_year(int year)
{
int ans =0;
if(year%4== 0&&year%100 != 0){
ans=1; }
if(year%400==0){
ans =1;
}
return ans; }
int main()
{ int year =1997;
int month = 6;
int day =21;
int ly;
leap_year(year);
if(ly==1){
printf("%d年はうるう年です",year);}
else{
printf("%dはうるう年ではありません。",year); }
int k;
const int n=12;
int nissu[n] =
{31,28,31,30,31,30,31,31,30,31,30,31};
if(ly==1){nissu[2]=29}
for (k=0,k<=11,K==k+1){
printf("%d年%d月は%d日まである",year,k+1,nissu[k]
}
return 0;
} }
何がおかしいかわかるやついる?
0678デフォルトの名無しさん (アウアウカー Sa41-RUi6)
2016/11/21(月) 16:52:27.97ID:cDH5AbC+aint k;
const int n=12;
int nissu[n] =
{31,28,31,30,31,30,31,31,30,31,30,31};
if(ly==1){nissu[2]=29}
for (k=0,k<=11,K==k+1){
printf("%d年%d月は%d日まである",year,k+1,nissu[k]
}
return 0;
}
0679デフォルトの名無しさん (ワッチョイ 7c7b-pYnr)
2016/11/21(月) 17:00:30.91ID:pqkU0qrI00680デフォルトの名無しさん (ワッチョイ 9c4f-XpIe)
2016/11/21(月) 17:04:40.52ID:RWHjIZlz0○ ly = leap_year(year);
じゃないかな?
0681デフォルトの名無しさん (ワッチョイ 88ff-d8X5)
2016/11/21(月) 17:25:14.90ID:RFCc0VFb0元のやつそのままにとりあえず動かすなら
http://ideone.com/cFIg3t
0682デフォルトの名無しさん (ワッチョイ 21c1-wlUq)
2016/11/21(月) 18:26:32.41ID:lC6EtNP00p = malloc(sizeof(int) * 10);
pからint * 10個分のサイズを求める方法です。
sizeof(p)とかだとポインタ変数そのもののサイズ返っちゃうので…
0683デフォルトの名無しさん (ワッチョイ 5e3c-XpIe)
2016/11/21(月) 18:31:40.59ID:/VfGG7xI00684片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK3f-I7Id)
2016/11/21(月) 18:32:11.30ID:bG1+lpHYKVC++なら_msize関数で調べられるよ。
0685デフォルトの名無しさん (ワッチョイ 21c1-wlUq)
2016/11/21(月) 18:38:45.16ID:lC6EtNP00早い返答ありがとうございます。
0686デフォルトの名無しさん (ワッチョイ f94a-E4Cj)
2016/11/22(火) 17:30:15.40ID:EJKURZYz0同じようなもんだろ
0687デフォルトの名無しさん (ワッチョイ f94a-E4Cj)
2016/11/22(火) 17:34:12.52ID:EJKURZYz0出ましたが何か?
0688デフォルトの名無しさん (ワッチョイ 7d7b-RfK+)
2016/11/22(火) 17:41:26.43ID:Dpe+NpW20大体同じだけど参照型はポインタ型より少しだけ制約がキツイ
参照先の変数と一心同体なので後から参照先を変更できないなどの制限がありポインタ型ほどの汎用性はない
0689デフォルトの名無しさん (ワッチョイ 9c42-XpIe)
2016/11/22(火) 17:49:54.19ID:4PGb+L/B00690デフォルトの名無しさん (ワッチョイ 7d7b-RfK+)
2016/11/22(火) 18:08:36.33ID:Dpe+NpW20参照型にはNULLやvoidといった危険性はない
使い方はプログラマ任せだから好きな方を使えばいい
0691デフォルトの名無しさん (ワッチョイ 56c0-E4Cj)
2016/11/22(火) 21:42:01.32ID:OGV+KtfX00692デフォルトの名無しさん (ワッチョイ 21c1-wlUq)
2016/11/22(火) 22:38:27.81ID:OzCA27jB0ただ単に超えて参照または代入しても保証がないだけで動くってことですか?
http://ideone.com/wqJgDJ
こんな感じです
0693デフォルトの名無しさん (ワッチョイ f6ed-tQqt)
2016/11/22(火) 22:49:56.93ID:Wtg38NdV00694デフォルトの名無しさん (ワッチョイ 5e3c-XpIe)
2016/11/22(火) 22:51:15.11ID:sjyT5v3d00695デフォルトの名無しさん (ドコグロ MM42-RUi6)
2016/11/22(火) 22:54:19.44ID:UnyRIXzkM0696デフォルトの名無しさん (ワッチョイ 4041-N7ik)
2016/11/22(火) 23:12:10.53ID:XcHO1PTK00697デフォルトの名無しさん (ワッチョイ 4359-XpIe)
2016/11/22(火) 23:32:44.32ID:mJXNpUM300698デフォルトの名無しさん (ワッチョイ 6d17-1ibN)
2016/11/22(火) 23:37:01.24ID:13tmJwp700699デフォルトの名無しさん (ブーイモ MMb8-RUi6)
2016/11/22(火) 23:38:57.32ID:uqAJBopXM最初にゼロ初期化が必須でどうしても1行でさえ削りたいとき
0700デフォルトの名無しさん (ワッチョイ 4041-N7ik)
2016/11/22(火) 23:47:36.02ID:XcHO1PTK0あ、そうなんだ。すまぬ。x86でもそうなの?
アーキテクチャとかMMUによって色々ありそう
0701デフォルトの名無しさん (ワッチョイ 4041-N7ik)
2016/11/23(水) 00:01:35.98ID:0ca0t95d00702デフォルトの名無しさん (ワッチョイ 4359-XpIe)
2016/11/23(水) 00:08:08.18ID:/PS3RTbl0mm自体は親プロセスからコピーしてきてpteのwrite落として、次回write時にpage fault起こさせてコピーする
0703デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/23(水) 00:44:42.46ID:2wwg+wZ40malloc+memsetでいいし
0704デフォルトの名無しさん (ワッチョイ ad5b-5YT/)
2016/11/23(水) 03:03:37.25ID:c4UU4/b00if(func2() == false) goto END;
if(func3() == false) goto END;
...
if(func98() == false) goto END;
if(func99() == false) goto END;
if(func100() == false) goto END;
OK:
...
return true;
END:
...
return false;
こんな感じの処理を美しく書く方法はありますか?
0705デフォルトの名無しさん (ワッチョイ 5e25-ot6h)
2016/11/23(水) 03:34:14.23ID:nnaMnGFb0&& と || について調べるがよろし
if (func1() && func2() && ... func100()) {
/* funcの全てが成功 */
...
return true;
}
...
return false;
もしくは
if (!func1() || !func2() || ... !func100()) {
/* funcのいずれかが失敗 */
...
return false;
}
...
return true;
0706デフォルトの名無しさん (ブーイモ MMb8-RUi6)
2016/11/23(水) 03:45:39.65ID:qW8trVGXM関数ポインタの配列に入れて、ループで処理するくらいかな
0707デフォルトの名無しさん (ワッチョイ 9c42-XpIe)
2016/11/23(水) 03:48:38.81ID:9vjIiHEP0IF文の山は察するに、下位関数の処理がエラーなく成功したか知りたいんだろう
ENDの先にあるのはエラーログ出力と解放処理
だから実際は頭やFuncの合間にごちゃごちゃ処理したりメモリ確保したり初期化したり
その方法はたぶん使えない
何より処理の本体がIF分のカッコの中にあるのは
うつくしくない
それで悩んだことあるから俺も知りたい
最近の言語なら例外投げりゃ終わる話なんだが
0708デフォルトの名無しさん (ブーイモ MMb8-PKBG)
2016/11/23(水) 03:54:37.89ID:AJy4iIV9M下手にマクロで外見だけきれいにしてもわかりにくいだけ
0709デフォルトの名無しさん (ワッチョイ 5e25-RUi6)
2016/11/23(水) 04:20:13.07ID:nnaMnGFb0んー ログ出力と解放で長くなるのは、ワークをstructに纏めて別関数に切り出せば短くできると思うんだけど どうかな
ifブロックに処理の本体を入れたくないのは同意
例外的な処理をブロック内に書くなら
>>705の下段のほうの書き方ですね
他の別手段となると、setjmp,longjmpかなぁ
安易にオススメはしかねますが
0710デフォルトの名無しさん (ワッチョイ 5e25-ot6h)
2016/11/23(水) 04:39:54.01ID:nnaMnGFb0> 何より処理の本体がIF分のカッコの中にあるのは
あ、このカッコって "{ }" じゃなくて "( )" のことか
勘違いしました >>709の二段落目は撤回させてください
0711デフォルトの名無しさん (ワッチョイ 51a1-/Gnx)
2016/11/23(水) 05:57:18.66ID:8cJNovPT0func1がほとんどfalseになる場合は、このままでいいとおもう
func1からfunc100まで、falseになる確率がほぼおなじ場合…全部ためす
result[1] = func1();
…
result[100] = func100();
r = true;
for(k = 1; k <= 100; k++) {
if(result[k]) r = false;
}
if(r) {
/* OK */
} else {
/* END */
}
0712711 (ワッチョイ 51a1-/Gnx)
2016/11/23(水) 06:20:11.02ID:8cJNovPT0func1がほとんどfalseになる場合は、このままでいいとおもう
func1からfunc100まで、falseになる確率がほぼおなじ場合…全部ためす
result[1] = func1();
…
result[100] = func100();
r = true;
for(k = 1; k <= 100; k++) {
if(!result[k]) r = false;
}
if(r) {
/* OK */
} else {
/* END */
}
0713デフォルトの名無しさん (ワッチョイ 56c0-E4Cj)
2016/11/23(水) 07:26:14.91ID:3bpGFKbx01個上の関数を作ってOKとNGの処理はそっちに書く
if ... return false;
のみが並んでいる様はある意味美しい
0714デフォルトの名無しさん (ワッチョイ b52b-tQqt)
2016/11/23(水) 08:26:37.25ID:d4ZoXUs70>>713 の案と
100個も関数があるなら、上位関数の自動生成とかかなぁ・・・。
0715デフォルトの名無しさん (ワッチョイ 51a1-/Gnx)
2016/11/23(水) 11:07:11.58ID:8cJNovPT0#include <stdio.h>
#include <stdlib.h>
typedef int (*INT_FUNCTION)(int);
int one_three(int n) {return (n + 1)%3;}
int two(int n) {return n%2;}
int nine(int n) {return n%9 > 0 ? 0 : 1;}
int main(int argc, char *argv[]) {
char *p;
char c[4];
int k;
int n = 23;
int r = 1;
INT_FUNCTION func[4];
if(argc == 2) n = (int)strtol(argv[1], &p, 10); /* C:\work\boolfunc 9 */
func[1] = one_three;
func[2] = two;
func[3] = nine;
for(k = 1; k <= 3; k++) {
if( func[k](n) == 0 ) {
r = 0;
break;
}
}
if(r) strcpy(c, "OK");
else strcpy(c, "END");
puts(c);
return 0;
}
0716デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)
2016/11/23(水) 11:24:00.78ID:H2HeAnI30その方が安全だから
const もただ変更を禁止するだけだろ
同じようなもん
0717デフォルトの名無しさん (ワッチョイ 6d17-ihSy)
2016/11/23(水) 11:43:17.28ID:oznP3ijp0KATA funcs = { func1, ... func100, NULL };
bool res = true;
for( int i = 0; funcs[ i ] != NULL; ++i ) res = res && funcs[ i ];
0718デフォルトの名無しさん (ワッチョイ 6d17-ihSy)
2016/11/23(水) 11:43:53.39ID:oznP3ijp0o res = res && funcs[ i ]();
0719デフォルトの名無しさん (ワッチョイ 7742-tQqt)
2016/11/23(水) 11:58:56.09ID:egCcLczt0setjmp、longjmpの使用を検討してみる
0720デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)
2016/11/23(水) 13:26:41.07ID:H2HeAnI30ベタ書きしたいなら
return
func1() && func2() && func3 ...
&& func98() && func99() && func100();
100個もあるなら俺なら配列に入れてループで処理だな
_Bool (*f[])() = {func1, func2, ... func100};
for(size_t i = 0; i < sizeof f / sizeof f[0]; i++){
if(!f[i]()){ return false; }
}
return true;
0721デフォルトの名無しさん (ワッチョイ 1d7b-N5ci)
2016/11/23(水) 14:33:34.00ID:RjhiyzIk0目の前にこのフラットな関数群を出されたらクソコード臭しかしないので
1. それぞれ異なる内容の順序依存のある処理が100個?ホントに?コピペじゃねーの?
2. 順次処理なら最低でも
前処理(可能な限りの前提エラーチェック)
本処理(例外以外はスルー)
後処理(成否の判断と復帰)
に分けられるだろう
とつっぱねて何が何でもやり直させるかな
0722デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)
2016/11/23(水) 15:21:28.18ID:H2HeAnI300723デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)
2016/11/23(水) 15:26:22.40ID:H2HeAnI30よく見たら OK/NG の処理があるのを見落としてた
ベタ書きの方は >>705 の前半が最短だな
0724デフォルトの名無しさん (ワッチョイ f25b-S3Pk)
2016/11/23(水) 16:46:44.97ID:KZKapa0x0重複しない処理でこれだけ関数用意するのは問題ありすぎのような。
0725デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/23(水) 17:20:42.32ID:2wwg+wZ40関数ポインタの配列を回すってのはダメ?
for (i = 0; i < 100; i++) {
if (func[i]() == false) {
goto END;
}
}
OK;
0726デフォルトの名無しさん (ワッチョイ e03c-1FI9)
2016/11/23(水) 17:34:22.51ID:RJFVO47a0と実行される途中でエラーならgoto ENDなんだから
全部(func100まで)実行させる案は間違い
0727デフォルトの名無しさん (ワッチョイ f25b-S3Pk)
2016/11/23(水) 17:43:05.24ID:KZKapa0x00728デフォルトの名無しさん (JP 0Ha1-RUi6)
2016/11/23(水) 17:47:45.52ID:TvV9/Z/PH0729デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/23(水) 17:50:09.32ID:2wwg+wZ40>>726は||や&&で繋げるなってことを言いたいのだろか?短絡評価で検索!
0730デフォルトの名無しさん (ワッチョイ e03c-1FI9)
2016/11/23(水) 18:08:02.60ID:RJFVO47a0そう
>>729
> ||や&&で繋げるなってことを言いたいのだろか?
いや、全部(func100まで)実行させるのが間違いというだけで
例えば>>705の&&の処理は間違いで||の処理はOK
0731デフォルトの名無しさん (ワッチョイ e03c-1FI9)
2016/11/23(水) 18:12:44.83ID:RJFVO47a0まちがった。&&の処理もOKか
0732デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/23(水) 18:27:17.87ID:2wwg+wZ40&&もOK!
0733デフォルトの名無しさん (ワッチョイ 21c1-wlUq)
2016/11/23(水) 21:56:07.11ID:DC/Sl7sd0>>704 の問題ってこういうのは文法的にだめなのでしょうか?
http://ideone.com/bIw0Pj
マクロってこういう使い方できないのかなぁ?
0734デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/23(水) 22:05:06.19ID:2wwg+wZ40マクロはプリプロセッサ処理だから出来ない
0735デフォルトの名無しさん (アウアウカー Sa41-2XGH)
2016/11/23(水) 22:06:42.70ID:3ZagEoUMaそれだと
if(funci() == false) goto END
になるだけ
0736デフォルトの名無しさん (ワッチョイ 21c1-478M)
2016/11/23(水) 22:16:43.49ID:DC/Sl7sd0>>735
やっぱりむりかー。有難うございます
0737デフォルトの名無しさん (ワッチョイ 3f5b-RUi6)
2016/11/23(水) 22:17:47.26ID:Mionv/jp00738デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)
2016/11/23(水) 22:25:06.63ID:H2HeAnI30無理
PL/1 ならプリプロセッサでループとかも組めるからそう言うことができる
0739デフォルトの名無しさん (ワッチョイ 9fcf-RAPI)
2016/11/23(水) 22:58:47.69ID:r99ZucNs00740デフォルトの名無しさん (ワッチョイ 3f5b-RUi6)
2016/11/23(水) 23:06:07.25ID:Mionv/jp00741デフォルトの名無しさん (ワッチョイ be17-tQqt)
2016/11/23(水) 23:06:39.10ID:2wwg+wZ40作る物によってまちまち
0742デフォルトの名無しさん (ワッチョイ 4041-pYnr)
2016/11/23(水) 23:08:58.80ID:0ca0t95d00743デフォルトの名無しさん (ワッチョイ f37b-sOXq)
2016/11/24(木) 01:23:10.29ID:Zr2e1rn70それはC++の機能使ってないから同じ事をCでもできる
0744デフォルトの名無しさん (ワッチョイ 3b4a-arwi)
2016/11/24(木) 15:37:39.77ID:dqXjfCs70どんなヤツ?
ここに貼ってくれ
0745デフォルトの名無しさん (ワッチョイ 274f-lM3r)
2016/11/24(木) 16:29:02.04ID:25EMGrnD0(けど、マクロ引数の数が可変個をサポートしてないとまずいっぽくね?)
0746デフォルトの名無しさん (ワッチョイ 274f-lM3r)
2016/11/24(木) 16:30:11.63ID:25EMGrnD0○ preproceccer/repeat.hpp
0747デフォルトの名無しさん (ワッチョイ 3b4a-arwi)
2016/11/24(木) 16:31:48.17ID:dqXjfCs70貼ってくれ
0748デフォルトの名無しさん (ワッチョイ 274f-lM3r)
2016/11/24(木) 17:04:18.24ID:25EMGrnD0記述
#define HOGE
BOOST_PP_REPEAT(5, HOGE, 100)
展開後
(5, 0, 100) (5, 1, 100) (5, 2, 100) (5, 3, 100) (5, 4, 100)
記述
#define HOGE(z, n, d) int hoge##n = d;
BOOST_PP_REPEAT(5, HOGE, 100)
展開後
int hoge0 = 100; int hoge1 = 100; int hoge2 = 100; int hoge3 = 100; int hoge4 = 100;
あとは ggrks ということでよろしく
0749デフォルトの名無しさん (ワッチョイ 274f-lM3r)
2016/11/24(木) 17:25:38.00ID:25EMGrnD0マクロのエッセンスは
# define PP_REPEAT本体(c, m, d) PP_REPEAT_I(c, m, d)
# define PP_REPEAT_I(c, m, d) REPEAT_ ## c(m, d)
↑REPEAT_<繰り返し回数>(m, d) に展開しつつ
↓REPEAT_<繰り返し回数>(m, d) の実態をならべるん
# define REPEAT_0(m, d)
# define REPEAT_1(m, d) m(0, d)
# define REPEAT_2(m, d) REPEAT_1(m, d) m(1, d)
# define REPEAT_3(m, d) REPEAT_2(m, d) m(2, d)
: 以下 (漸化式的な記述を 255まで並べる)
# define REPEAT_254(m, d) REPEAT_253(m, d) m(254, d)
# define REPEAT_255(m, d) REPEAT_254(m, d) m(255, d)
許される展開のネスト次第か
0750デフォルトの名無しさん (ドコグロ MMcf-/sNf)
2016/11/24(木) 20:09:53.99ID:SLtEYwkqMいかにも boost らしい力業だな w
こんなの使うぐらいなら PowerShell か bash でその部分のソース吐くスクリプト作って結果を張り付けるわ
0751デフォルトの名無しさん (ワッチョイ a359-lM3r)
2016/11/24(木) 21:20:45.72ID:hNtCDQsC0こういうので関数名潰れるとtagジャンプできなくなるし、愚直に並べるほうが良いわ
0752デフォルトの名無しさん (ワッチョイ f37b-sOXq)
2016/11/24(木) 23:40:41.76ID:Zr2e1rn700753デフォルトの名無しさん (ワッチョイ dbbd-TEJY)
2016/11/25(金) 02:51:57.87ID:FKTvi/O90ビットを8つ並べて256倍にするのは分かるが、
なぜ8ビットで1区切りにするのか、
なぜ8なのか、なぜ256倍なのかという意味がよく分からない。
0754デフォルトの名無しさん (ワッチョイ 4b4e-MM3T)
2016/11/25(金) 02:57:15.89ID:DBLcIfh00https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88_(%E6%83%85%E5%A0%B1
0755デフォルトの名無しさん (ブーイモ MMaf-/sNf)
2016/11/25(金) 02:58:43.69ID:nP8VI9rPM今も40ビットとかはあるよ
0756デフォルトの名無しさん (ブーイモ MMc7-/sNf)
2016/11/25(金) 03:20:13.32ID:xynsEkAbM英語圏で1文字表すのに大文字数字記号で6ビットが最低限必要だった。
このひとかたまりをバイトと呼んだ。
小文字も入れたいねってことで7ビットになった。
2の累乗が切りがいいので8ビットが主流になった。
もう1ビットあっても便利じゃねってことで9ビットのも生まれた。
0757デフォルトの名無しさん (ワッチョイ a77b-rAFo)
2016/11/25(金) 03:42:31.45ID:LUQ3xuK+0バイトというのは英字一文字の文字コードを表現するのに必要なビット数のこと
現代ではASCII/UTF-8の8ビットがデファクトスタンダードだけど、歴史的にはそれ以外もあった
通信分野とかでは曖昧さを避けるために8ビットを1オクテットということもあるらしい
0758デフォルトの名無しさん (ワッチョイ 9ba1-RiO0)
2016/11/25(金) 05:04:48.46ID:SAUV2i1i0オクテットの半分でもある。1ニブルは16通りの値を持つことができ、十六進法1桁で表現されることが多い。
4ビットCPU
ニブル
-Wikipedia
0759デフォルトの名無しさん (ワッチョイ 4fc0-arwi)
2016/11/25(金) 05:49:03.35ID:BJ+HV0lL00760デフォルトの名無しさん (ワッチョイ 3717-lM3r)
2016/11/25(金) 05:51:42.82ID:n3LE76D700761デフォルトの名無しさん (ワッチョイ 6f7d-Kail)
2016/11/25(金) 07:37:58.29ID:NJ3Sw+wm0アルファベットの大文字しかつかわないから、それでも良かったのだろう
0762デフォルトの名無しさん (ブーイモ MMc7-/sNf)
2016/11/25(金) 09:17:42.00ID:xynsEkAbMhttps://ja.m.wikipedia.org/wiki/Baudot_Code
こいつか
シフト状態で数字と記号なのか
0763デフォルトの名無しさん (ワッチョイ 3790-/sNf)
2016/11/25(金) 23:19:32.47ID:omys+CZJ00764デフォルトの名無しさん (ワッチョイ ef17-sTmH)
2016/11/26(土) 00:43:33.55ID:F0mRQ3Kb0CPUの勉強になるよ
0765デフォルトの名無しさん (ワッチョイ dbbd-TEJY)
2016/11/26(土) 04:38:02.03ID:QJATEtRs0上記で紹介してくれた 7ビットや 9ビットみたいな例外はあるけど、
どうして、コンピュータアーキテクチャは8 → 16 → 32 → 64
みたいに指数倍で増えていくの。
バイト単位なら 8 の次は16が切りのいいのは分かる。
でもどうして次は 32? 24ビットは(ありかもしれないけど)
どうしてあまり聞かないの?
32次は 40 48 56ビットはあまり聞かないの?有ってもいいはずだが。
なぜこんなことが気になるかというと、これが指数倍で増えていく
ことでビットとビット長の話が混乱するときがあるんだよ、
これを間違えると全然次元の違う大きさの勘違いをしちゃう。
0766デフォルトの名無しさん (ワッチョイ 2f68-7iL3)
2016/11/26(土) 04:41:51.13ID:ekMvAYYX00767デフォルトの名無しさん (ワッチョイ 4fe1-/sNf)
2016/11/26(土) 05:02:34.45ID:sqDmBENv0なので、32bitで足りない整数とかは32bitを2個組み合わせて64bitにして使ってた
新しいアーキテクチャを考えたとき、その64bitの変数を扱いやすいのは64bitアーキテクチャ
しかも、チップのパーツも32bitのを2つ使うことで対応できるものも多い、多分だけど32bitのエミュレーションにも有利などの利点もある
結果、48や56を選ぶ理由がないので64bitを選ぶのが妥当
0768デフォルトの名無しさん (ワントンキン MM6f-/sNf)
2016/11/26(土) 07:21:41.23ID:8puRDqreM0769デフォルトの名無しさん (ワッチョイ f352-sNoz)
2016/11/26(土) 09:33:45.60ID:+6FeJUFM08->16->32->64と増えるにしたがっていろいろ工夫されて大分マシにはなってきたけど、
まだbit数の変更にシームレスに対応できるような状況ではなくて、
CPUのビット数の変更に対応するのは力業が必要な大仕事になる
つまりビット数の増加による仕事の増加を最小限にとどめたいという業界の意向で、主要アーキテクチャは倍々に進化してる
0770デフォルトの名無しさん (ワッチョイ 3f5a-lM3r)
2016/11/26(土) 10:27:19.45ID:zPX+1d/90nビットマイクロプロセッサとか言ってもどこの幅をnビットと
言っているのかで違う。。。結構面倒くさい話。
まぁ文脈でわかるが改めて>>765のように質問されると。
0771デフォルトの名無しさん (ワッチョイ ab7b-/sNf)
2016/11/26(土) 11:56:45.59ID:mSdlF3gZ0まだワードアドレッシングは現役だし、そもそもC言語の元祖
PDP11自身がワードアドレッシングなんで突っ込んだだけ(^^;)
sizeofは本当に常にバイト数を返すのか?(アドレス単位でなく)
0772デフォルトの名無しさん (ワッチョイ 6f7d-Kail)
2016/11/26(土) 13:18:24.96ID:bbR0YbTs0HITACHI HIPAC-101というコンピュータは、かの後藤英一先生発明の
パラメトロンを使ったコンピュータで、1短ワードが21ビット、
1長ワードが42ビットで、ドラムメモリーは単ワードで8196ワード
長ワードでは、4096ワードというものだった。
当時のコンピュータはアドレス方式も
1−アドレス、2−アドレス、3−アドレスとあり、
コンピュータメーカーによって、それぞれ違っていた。
昔話で失礼しました。
0773デフォルトの名無しさん (ワッチョイ 3790-/sNf)
2016/11/26(土) 13:50:06.80ID:9O78pGAU00774デフォルトの名無しさん (エーイモ SEc7-AQyI)
2016/11/26(土) 15:13:19.80ID:bzgbnbD5EAの処理
} else (条件) {
Bの処理
}
AとBどっちが動いたのか調べたいんですが
C言語はRubyとは違いコンパイルするという作業がいるので
printfをいれてコンパイルして確認してると結構時間が掛かります
if (条件) {
printf("A\n");
Aの処理
} else (条件) {
printf("B\n");
Bの処理
}
こういうときってどうやって調査するものなんでしょうか?
0775デフォルトの名無しさん (ドコグロ MMcf-/sNf)
2016/11/26(土) 15:15:56.65ID:Gs7ISwHiM0776デフォルトの名無しさん (JP 0Hc7-yHww)
2016/11/26(土) 15:45:09.16ID:e21MHUPRHどちらで止まるかを見る
あるいは if 文の少し前に仕掛けて
止まった後ステップ実行してどちらに入るかを見る
0777デフォルトの名無しさん (エーイモ SEc7-AQyI)
2016/11/26(土) 18:43:44.77ID:bzgbnbD5E0778デフォルトの名無しさん (ワッチョイ 135b-/sNf)
2016/11/26(土) 20:02:07.98ID:kt6l6/cF0デバッグオプションでprintf動かなくすりゃいい
0779デフォルトの名無しさん (ブーイモ MMaf-4iO2)
2016/11/26(土) 20:17:38.87ID:2CwsFwNqM0780デフォルトの名無しさん (ワッチョイ 93d4-w4Yy)
2016/11/26(土) 21:56:50.10ID:eOe/vy6Y0fprintf(fp,"%s %d\n",__FILE__,__LINE__); とかやって。
デバッガー駆使できる人って、結構すごいと思う。
ループの1回目で引っかかるようなエラーなら、デバッガーで見つけやすいけど。
ループの数十回目でやっと引っかかるようなエラーだと、デバッガーで
ループを1STEPずつ実行するのが辛い。いいやり方があるのか、そこは知らないけど
0781デフォルトの名無しさん (ワッチョイ 135b-/sNf)
2016/11/26(土) 22:04:37.74ID:kt6l6/cF00782デフォルトの名無しさん (ワッチョイ f37b-sOXq)
2016/11/26(土) 22:11:06.80ID:gZtoP9KV00783デフォルトの名無しさん (ワッチョイ a7d4-w4Yy)
2016/11/26(土) 22:36:29.97ID:o/0oOMKg0おー、そうゆう機能があるのか、勉強になったわ。
今までログファイル出力だけで何とかなってたので、あまりデバッガ活用してなかったんだよねえ。
この機会に学習してみるわ
0784デフォルトの名無しさん (ワッチョイ ef17-sTmH)
2016/11/26(土) 23:35:54.26ID:F0mRQ3Kb00785デフォルトの名無しさん (ワッチョイ a359-lM3r)
2016/11/27(日) 00:01:06.17ID:hUgSULjY00786デフォルトの名無しさん (ワッチョイ ef17-sTmH)
2016/11/27(日) 00:18:21.07ID:DrgmmtpG0最近流行りのTDD(テスト駆動開発)ですね
自分のとこも最近それやりだしましたよ
UnityとかCMockとかFakeFunctionFrameworkとかね
0787デフォルトの名無しさん (ワッチョイ 3fac-pkVQ)
2016/11/27(日) 03:30:05.59ID:zRN2fUms0DMは32bit、40bitはData Registeの話だよね?
やはり組み込み関係の人が多いのかな?
C89、C99、C11、皆さんの環境はどんなもん?
0788デフォルトの名無しさん (ワッチョイ ef9f-SvbB)
2016/11/27(日) 04:47:20.03ID:1yLvwE2L00789デフォルトの名無しさん (ワッチョイ ab7b-/sNf)
2016/11/27(日) 05:08:54.18ID:ITwup7+W0ハーバードアーキテクチャでggr
物理的に分離されているからSuper が付いてSHARC
0790デフォルトの名無しさん (ワッチョイ f319-rApL)
2016/11/27(日) 17:23:19.61ID:Q/59TbJy00791デフォルトの名無しさん (ワッチョイ ef17-sTmH)
2016/11/27(日) 18:04:13.54ID:DrgmmtpG0なるべくstrtok_rを使うべし
0792デフォルトの名無しさん (ワッチョイ a359-lM3r)
2016/11/27(日) 19:13:40.65ID:hUgSULjY0トークン先頭が見つからない場合は終わり、以降はNULLを返す
トークン先頭が見つかった場合、トークンの終わり(次の区切り文字)を探して、NULL文字入れて終端させる
次回探索開始位置はstatic変数で覚えておく
0793デフォルトの名無しさん (ワッチョイ 6f3c-/sNf)
2016/11/27(日) 19:19:30.43ID:p8mIwYr30> strtokと同じ働きをする関数
そのままパクればいいんじゃね?
仕事でパクれないならこんなところで聞いちゃダメだろうし
0794デフォルトの名無しさん (ワッチョイ f319-plMA)
2016/11/27(日) 21:21:48.68ID:Q/59TbJy0学校の練習問題問題として出された問題ですので丸パクリができないんです
>>793
ありがとうございます 参考にして作成してみます
0795デフォルトの名無しさん (ワッチョイ 4fc0-arwi)
2016/11/27(日) 21:30:36.25ID:yxkRijzt00796デフォルトの名無しさん (ワッチョイ 135b-/sNf)
2016/11/27(日) 21:48:25.31ID:wcShlNpc00797デフォルトの名無しさん (ワッチョイ f319-plMA)
2016/11/27(日) 21:59:20.24ID:Q/59TbJy0strtokを使っているのを丸パクリしたいけどsplitを使う指示なのでできないという意味です
誤解を招くような表現をしてしまいすみませんでし
0798デフォルトの名無しさん (ワッチョイ 136f-pDAg)
2016/11/27(日) 22:02:40.70ID:VgmO9Y8H00799デフォルトの名無しさん (ワッチョイ f342-sTmH)
2016/11/27(日) 22:05:20.04ID:bsGEIPyZ0「strtokと同じ働きをする関数splitを作成しなさい」
と言う雪面なんでしょ?
0800デフォルトの名無しさん (ワッチョイ f342-sTmH)
2016/11/27(日) 22:05:50.14ID:bsGEIPyZ00801デフォルトの名無しさん (ワッチョイ f319-plMA)
2016/11/27(日) 22:11:37.35ID:Q/59TbJy0期末試験の練習問題なのでできるようにしておきたかったんです
>>799
そうです
0802デフォルトの名無しさん (ワッチョイ f342-sTmH)
2016/11/27(日) 22:13:18.75ID:bsGEIPyZ0自分なりに考えて、ソースを作成する
動作がおかしかったり、やり方が分からなくなったら、ここで聞いてみる
0803デフォルトの名無しさん (ワッチョイ f37b-sOXq)
2016/11/27(日) 22:25:29.38ID:YEwu7XTV0#include <string.h>
char *split(char *s1, const char *s2)
{
return strtok(s1,s2);
}
0804デフォルトの名無しさん (ワッチョイ dbc1-LXHm)
2016/11/28(月) 00:24:25.35ID:WMy0WS1U0$ ./a.out -ab
aの処理
optopt a
optind 1
bの処理
optopt b
optind 2
引数ならコマンドが0で -abが1ですよね?
-abとしてもaとbでインデックスが違うんですかね?
オプションを別々にすると
$ ./a.out -a -b
aの処理
optopt a
optind 2
bの処理
optopt b
optind 3
./a.out → 0
-a → 1
-b → 2
じゃないんですか?
0805デフォルトの名無しさん (ブーイモ MMaf-4iO2)
2016/11/28(月) 00:53:06.35ID:fdkmTtSLM-ab
argv[1]のaの処理後bが残ってるので次に処理するのはargv[1]
-a -b
argv[1]のaの処理後次に処理するのはargv[2]
って事では
0806デフォルトの名無しさん (ワッチョイ ef17-sTmH)
2016/11/28(月) 01:42:04.96ID:Gk6fJWJP00807デフォルトの名無しさん (ワッチョイ 1bbf-/sNf)
2016/11/28(月) 01:52:35.94ID:Mp+Qbgrs00808デフォルトの名無しさん (ワッチョイ dbc1-LXHm)
2016/11/28(月) 02:04:01.57ID:WMy0WS1U0インデックスが引数を指しているなら
./a.out -abは
aもbもoptind == 1
./a.out -a -b
a == 1 b == 2
なら納得するのですがイマイチわからないです
0809デフォルトの名無しさん (ブーイモ MMaf-4iO2)
2016/11/28(月) 02:10:11.43ID:fdkmTtSLM./a.out -abc -dなら
最初 optind=1 argv[1]=-abc
a処理後 optind=1 argv[1]=-abc
b処理後 optind=1 argv[1]=-abc
c処理後 optind=2 argv[2]=-d
d処理後 optind=3 argv[3]=NULL
になるんじゃね?試してねーけど
0810デフォルトの名無しさん (ワッチョイ 4fe1-/sNf)
2016/11/28(月) 02:14:57.72ID:v97E8kC60何も考えずに答えを聞いたら練習にならんじゃん
自分で考えてわかる範囲でソース書いてなんで動かないのか、どこがわかんないのかを聞くんだよ
0811デフォルトの名無しさん (ワッチョイ dbc1-LXHm)
2016/11/28(月) 02:37:17.65ID:WMy0WS1U0なるほど、なんとなくそれっぽかったです
$ ./a.out -abcdefg
a = 1
b = 1
c = 1
d = 1
e = 1
f = 1
g = 2
最後だけ+1になってしまうのはよくわかりませんが
$ ./a.out -abcdef -g
a = 1
b = 1
c = 1
d = 1
e = 1
f = 2
g = 3
0812デフォルトの名無しさん (ワッチョイ dbc1-LXHm)
2016/11/28(月) 02:40:26.85ID:WMy0WS1U0処理後のインデックスかなるほど納得しました
0813デフォルトの名無しさん (ワッチョイ dbc1-OZZy)
2016/11/28(月) 02:45:24.92ID:WMy0WS1U00814デフォルトの名無しさん (ワッチョイ 277b-I39F)
2016/11/28(月) 04:22:41.92ID:ZvcFWjYe0次に処理される、位置パラメーターの番号。
引数全体の何番目の文字列を、操作しているのか
0815デフォルトの名無しさん (ワッチョイ 2f68-7iL3)
2016/11/28(月) 07:30:30.21ID:w39HqPOF0俺もわけわからんちんちんだった
0816デフォルトの名無しさん (ワッチョイ 4fc0-arwi)
2016/11/28(月) 07:34:52.81ID:Z2O1T0K90http://echo.2ch.net/test/read.cgi/tech/1456911928/
0817デフォルトの名無しさん (ワッチョイ 277b-I39F)
2016/11/28(月) 08:35:28.46ID:ZvcFWjYe0Rubyで、コンテナをループするのに、今処理している順番、indexも渡ってくる
optindの考え方は、それと同じ
0818デフォルトの名無しさん (ワッチョイ ab7b-ZhbG)
2016/11/28(月) 08:56:35.72ID:k5kMKlan0ruby厨って本当にキモい
0819デフォルトの名無しさん (ワッチョイ cbfd-znN9)
2016/11/28(月) 16:52:45.61ID:4eAISG6500820デフォルトの名無しさん (ガックシ 0607-LXHm)
2016/11/30(水) 07:34:54.23ID:sQvK4opq6カーネルに依頼して確保した領域を超えるとそこはもう許可されていない領域なのでセグメンテーションフォルトが出るのではないでしょうか?
以下の様なコードが平然と実行できてしまう理由が分かりません。超えた部分に関しては保証はないで済まされるかもしれませんが、個人的には保証はないではなくそんな操作は実行できない様にするのがまともな気がします。
あえてこの様にしている理由とかあってあるんでしょうか?
http://ideone.com/7dolzU
0821デフォルトの名無しさん (ワッチョイ 6f3c-lM3r)
2016/11/30(水) 07:39:20.59ID:3/kd8nRt0俺は、即死する実装の環境を経験したことあるぞ
0822デフォルトの名無しさん (ワッチョイ cbfd-znN9)
2016/11/30(水) 07:46:00.90ID:cdtf8L5P00823デフォルトの名無しさん (ワッチョイ 6f3c-lM3r)
2016/11/30(水) 07:47:17.92ID:3/kd8nRt0CPUに超えたら死ぬ機構があるとは限らないから、死ぬことを保障することができない
0824デフォルトの名無しさん (ガックシ 0607-LXHm)
2016/11/30(水) 07:49:12.19ID:sQvK4opq6そうでなければなにかしらの理由があっての事ですかね?
0825デフォルトの名無しさん (ワッチョイ 6f3c-lM3r)
2016/11/30(水) 07:50:16.96ID:3/kd8nRt00826デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)
2016/11/30(水) 08:11:03.34ID:AyB9tviA0キミよりも10万倍頭の良い人達が何年もかけて作り上げた仕組みなので
「僕の考えた仕組みがサイコー」から離れて、「僕が気づいてない事は何だろう」を考えた方が良いよ
0827デフォルトの名無しさん (ガックシ 0607-LXHm)
2016/11/30(水) 08:15:44.90ID:sQvK4opq6ですから、あえてこの様にしている理由(自分が気づいてない事)をお聞きしたつもりだったのですが…
自分の考えた仕組みが最高とは一切思っておりません。
0828デフォルトの名無しさん (ワッチョイ cbfd-znN9)
2016/11/30(水) 08:31:55.64ID:cdtf8L5P00829デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)
2016/11/30(水) 08:32:40.83ID:AyB9tviA02 固定長のページ単位でメモリを管理するCPUが主流
0830デフォルトの名無しさん (ワッチョイ cb19-znN9)
2016/11/30(水) 08:42:42.19ID:vxGzOx7A00831デフォルトの名無しさん (ガックシ 0607-LXHm)
2016/11/30(水) 08:51:31.13ID:sQvK4opq6なるほど、1ページあたりの中であればあまり怒られないのかなぁ
1万くらい要素はみ出ててみたらsegmentation faultって怒られました。有難うございました。
0832デフォルトの名無しさん (ワッチョイ 274d-TEJY)
2016/11/30(水) 10:53:26.50ID:6/vBGqgM0検出したいのならばこういうのを使え。
https://sourceforge.net/directory/os:windows/?q=electric%20fence
検出しようとするとどれだけ重くなるのかが多分実感できるぞ。
0833デフォルトの名無しさん (ワッチョイ 57ff-t+9m)
2016/11/30(水) 11:29:48.60ID:iDkfno7K0まとめて確保して小分けしてる
0834デフォルトの名無しさん (JP 0Hc7-yHww)
2016/11/30(水) 12:25:12.43ID:m8TXkg9zHmalloc は C言語(のライブラリ)の機能であり
セグメント違反は OS(あるいはCPU)の機能
それぞれの都合でズレが起きる
0835デフォルトの名無しさん (オッペケ Sre7-/sNf)
2016/11/30(水) 12:42:42.56ID:kvXOQWmSrそもそも、なんでチェック可能だと思ったんだ?
0836デフォルトの名無しさん (ドコグロ MMb7-/sNf)
2016/11/30(水) 12:51:30.50ID:PB8+Xj+IM確保時にサイズ指定してるからとかじゃないの
0837デフォルトの名無しさん (ドコグロ MM87-/sNf)
2016/11/30(水) 12:59:32.34ID:rbSDaA4dM0838デフォルトの名無しさん (ワッチョイ f342-sTmH)
2016/11/30(水) 13:14:06.24ID:tdfWjrvt0コンパイルオプションでそういうことができてもおかしくはないよね
0839デフォルトの名無しさん (JP 0H27-/sNf)
2016/11/30(水) 13:41:11.48ID:/ubprRYqH怒られないかもしれないけど他のデータを壊して自分が泣くだけだよ
0840デフォルトの名無しさん (JP 0H27-/sNf)
2016/11/30(水) 13:43:21.47ID:/ubprRYqHそんな遅くなることは面倒見ないっていうのがCのポリシーなんだから
面倒見てもらいたかったら他の言語使うしかない
0841デフォルトの名無しさん (ワッチョイ 57ff-t+9m)
2016/11/30(水) 13:46:09.25ID:iDkfno7K00842デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)
2016/11/30(水) 14:17:35.77ID:AyB9tviA0お前には無理
0843デフォルトの名無しさん (ワッチョイ 57ff-t+9m)
2016/11/30(水) 14:33:24.75ID:iDkfno7K0別にオレがやるわけじゃないのに何だそのとぼけたレスはw
0844デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)
2016/11/30(水) 14:38:22.29ID:AyB9tviA0お前は
>まあ自分でmalloc相当の必要な分しか取らないやつ
の作り方を知らない
自分で作らないものを「作れば良い」
滑稽すぎる
0845デフォルトの名無しさん (ワッチョイ f342-sTmH)
2016/11/30(水) 15:15:17.96ID:tdfWjrvt00846デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)
2016/11/30(水) 15:32:15.18ID:AyB9tviA0じゃ、お題の
/*int型10個分の領域を確保*/
p = malloc(sizeof(int) * 10);
/*確保した領域を超えて書き込む*/
for(i = 0; i < 15; i++){
p[i] = i;
}
でi==10で例外起こす奴作れよ
実際にコード書かなくても良いぞ
応用問題 i == -1でも例外起こすようにせよ
OSはWin32でもLinuxでもどっちでも良いからさ
0847デフォルトの名無しさん (ワッチョイ 57ff-t+9m)
2016/11/30(水) 16:17:52.71ID:iDkfno7K0実際作ったことある
0848デフォルトの名無しさん (ワッチョイ 57ff-t+9m)
2016/11/30(水) 16:19:00.58ID:iDkfno7K00849デフォルトの名無しさん (ドコグロ MM8f-/sNf)
2016/11/30(水) 18:43:37.97ID:Z3iWqk1AM> C言語でmalloc使って確保した領域を超えて読み書き
何が起きても(あるいは起きなくても)不思議じゃないと言うこと
まあ、実装側から言えばハードウェアとしてはメモリー保護とかの設定はバイト毎に出来る訳じゃなくてページサイズと呼ばれる単位で設定される
ページサイズの大きさは色々あるけど例えば4KBのマシンで1KB確保すると残りの3KBも読み書き出来ちゃうってこと
0850デフォルトの名無しさん (ワッチョイ a359-lM3r)
2016/11/30(水) 19:03:46.61ID:ZCK59WbL0GCC、glibcなら
MALLOC_CHECK_ とかmudflapとか
0851デフォルトの名無しさん (ワッチョイ 4fc0-arwi)
2016/11/30(水) 20:34:42.87ID:/gnC384r00852デフォルトの名無しさん (ブーイモ MMaf-/sNf)
2016/11/30(水) 20:46:59.60ID:nf+OfCoLM原典ぐらいは読めよ
0853デフォルトの名無しさん (ワッチョイ cfed-sTmH)
2016/11/30(水) 21:56:03.11ID:DQrruTiP00854デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)
2016/11/30(水) 22:35:26.64ID:AyB9tviA0自覚の無い無能って、本当に救いがたい
0855デフォルトの名無しさん (ワッチョイ 6f17-+3uc)
2016/11/30(水) 23:05:42.57ID:71XTtE0+00856デフォルトの名無しさん (ワッチョイ 3eed-/mAi)
2016/12/01(木) 00:38:49.30ID:mpw4WZRG00857デフォルトの名無しさん (ワッチョイ 9213-ggLi)
2016/12/01(木) 03:52:42.58ID:mYjtW65/00858デフォルトの名無しさん (ワッチョイ 7017-NTgB)
2016/12/01(木) 03:55:22.08ID:SwKXepyG0そんな機能あったらとっくにデバッガに採用されてるでしょ。
0859デフォルトの名無しさん (ワッチョイ f1dc-8QOf)
2016/12/01(木) 06:16:25.60ID:geiQ58AT0ユーザプロセスでアクセスする度に一般保護例外が発生して
範囲チェックルーチンに飛ばせるとは思う。
ちょうど『はじめて読む486』をはじめて読んだところなんで原理だけ。
0860デフォルトの名無しさん (ワッチョイ 46d4-HRbE)
2016/12/01(木) 06:59:29.80ID:dcHh4xOn080286でプロテクトモードが実装された頃の大昔には、CPUのディスクリタテーブルに
エントリを追加削除する形で malloc - free を実装してるOSやコンパイラがあったし。
エントリ数(メモリブロック数)に限界があるので、自然消滅してしまったが。
その仕組みを使って malloc を自前で実装すれば、1バイト程度の前後への溢れなら、
例外を起こすことはできそうではあるかな。ただ、1バイトを超えるような溢れだと、
隣接する他の有効なメモリブロックにアクセスできる可能性があるから、
確実に例外を起こすのは難しいかもだけど。
0861デフォルトの名無しさん (ドコグロ MM5c-yaSi)
2016/12/01(木) 07:09:39.15ID:rYSe/HxLM>>859 みたいな方法でアクセスを監視することは可能だし
purify みたいにコンパイルするときにアクセスチェックするコードを挿入するとかする奴もある
あとダーティーリードとかのオレオレ用語を使うのはやめた方がいい
普通に不正アクセスとか言え
0862デフォルトの名無しさん (ワッチョイ 9213-ggLi)
2016/12/01(木) 07:35:52.47ID:mYjtW65/0たぶんセグメントテーブルが足りない
0863デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)
2016/12/01(木) 08:22:04.50ID:/oX0DDBh0この辺(>>847,848)
0864デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)
2016/12/01(木) 08:35:43.99ID:/oX0DDBh02ページ確保して2ページ目をアクセス不可にする
2ページ目の先頭アドレス - sizeof(int) * 10
をmallocの戻り値にする
応用問題の方は>>859、i386以降ならデバッグレジスタ使える
0865デフォルトの名無しさん (ワッチョイ 5a7b-BwMM)
2016/12/01(木) 09:03:34.80ID:I2kftv/Y00866デフォルトの名無しさん (ドコグロ MMa9-yaSi)
2016/12/01(木) 09:20:45.64ID:yfw1GD74Mそうなら検出できない方が良い最適化できて望ましい気がする
0867デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)
2016/12/01(木) 09:21:26.58ID:/oX0DDBh0それでわからない無能は10年ROMって炉
0868デフォルトの名無しさん (ワッチョイ 5a7b-GzJf)
2016/12/01(木) 09:33:20.82ID:I2kftv/Y00869デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)
2016/12/01(木) 09:46:41.41ID:/oX0DDBh0無能
0870デフォルトの名無しさん (ワッチョイ 5a7b-Dqqc)
2016/12/01(木) 09:47:36.98ID:I2kftv/Y00871デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)
2016/12/01(木) 10:10:32.42ID:/oX0DDBh0無能
0872デフォルトの名無しさん (ワッチョイ 2b7b-YXL0)
2016/12/01(木) 10:28:15.10ID:dYbgWN5h0実際にメモリをどう割り当てるかは処理系依存ではないのか?
0873デフォルトの名無しさん (ドコグロ MM5c-yaSi)
2016/12/01(木) 12:48:53.85ID:rYSe/HxLM0874デフォルトの名無しさん (トンモー MM41-E9Xg)
2016/12/01(木) 19:59:11.58ID:cSMR0IopMバウンダリでfaltなんてのも
環境しだい。
よって環境を示さないで
例外とか論じてるとアホ告知くらうと思います!
0875デフォルトの名無しさん (ブーイモ MM41-E9Xg)
2016/12/01(木) 20:06:15.44ID:+YVR9sE5M0876デフォルトの名無しさん (ワッチョイ 9213-ggLi)
2016/12/01(木) 21:06:16.74ID:mYjtW65/00877デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)
2016/12/02(金) 00:07:19.95ID:fHtgnGrJ00878デフォルトの名無しさん (ワッチョイ 753c-BMT5)
2016/12/03(土) 17:59:31.59ID:xVvt58Dl0この本の前提となるC言語の知識レベルはどのくらいでしょうか。
他の言語の初心者レベルの知識はあります
C言語も構造体やポインタについてはふんわり理解していると思います
このレベルで読んで大丈夫でしょうか?
大丈夫じゃない場合、更に質問があります
この本を読めるくらいのレベルになるため、最低限この本は理解しておけという本を
一冊教えてください
本ではなくサイトでも良いです
お願いします
0879デフォルトの名無しさん (ワッチョイ 9213-ggLi)
2016/12/03(土) 18:01:50.06ID:bwqi2Pka0その本は読んだことはないが,準備にかまけていても仕方がないから,とっとと読むのがいい
わからないところがあれば,ここで聞け,俺なら答える
0880デフォルトの名無しさん (ワッチョイ 753c-BMT5)
2016/12/03(土) 18:34:49.59ID:xVvt58Dl0では、まず買ってみようと思います
0881デフォルトの名無しさん (トンモー MM41-H7pT)
2016/12/05(月) 07:35:05.73ID:SJelErcpM値渡しになるように記述したいのですが
参照渡しになってしまいまして、
変数の内容が変わってしまいます。
もしかしたら、構造体や配列は
参照渡ししかできないのですか?
0882デフォルトの名無しさん (トンモー MM41-H7pT)
2016/12/05(月) 07:39:44.94ID:SJelErcpM失礼しました。
0883デフォルトの名無しさん (ドコグロ MM5c-KOMv)
2016/12/05(月) 08:40:39.13ID:6kBIwgwIM0884デフォルトの名無しさん (ワッチョイ fc7b-lw9A)
2016/12/05(月) 08:59:44.93ID:pSDwKct50初心者には無理
まず、初心者用のアルゴリズムの本を読む。
クイックソート・2分ヒープ・2分木を勉強する
会津大学のサイトで、AIZU ONLINE JUDGE (AOJ)で、
Rubyなど簡単な言語で、パズルを解く
C/C++言語などは、もっと後でいい
0885デフォルトの名無しさん (ワントンキン MMd0-yaSi)
2016/12/05(月) 09:50:30.74ID:bBXnpaKVMお姉さん問題をYouTubeで見て上か下かを考える
0886デフォルトの名無しさん (ワッチョイ 0448-E9Xg)
2016/12/05(月) 10:21:25.20ID:HP0umWAz0K&RプログラミングC
0887デフォルトの名無しさん (JP 0Hf8-NTgB)
2016/12/05(月) 11:37:10.98ID:fjPKnM+bHif(a < 5){
if(b < 3){
c = 2;
}
}else{
c = 5
}
このelseは、上のif文に対応しているんですか?
下ですか?
0888デフォルトの名無しさん (ドコグロ MM94-yaSi)
2016/12/05(月) 11:45:24.79ID:gZ+4oyn1M上
0889デフォルトの名無しさん (ブーイモ MMa8-E9Xg)
2016/12/05(月) 11:48:48.43ID:DHKecXyhMわっちょいjpってどこだっけ
0890デフォルトの名無しさん (ドコグロ MMa9-yaSi)
2016/12/05(月) 12:56:33.22ID:a5r1kWoWM上も下もどちらも捨てがたい。
0891デフォルトの名無しさん (ワントンキン MMd0-E9Xg)
2016/12/05(月) 17:41:50.44ID:RicaCkjKM0892デフォルトの名無しさん (ワッチョイ 9213-ggLi)
2016/12/05(月) 19:52:13.86ID:+86vS9TV00893デフォルトの名無しさん (ワッチョイ 6b20-yaSi)
2016/12/06(火) 01:02:07.11ID:roEJAemc0半角スペースが削られるのも知らないとは。
0894デフォルトの名無しさん (ワッチョイ 0448-m52i)
2016/12/06(火) 04:06:16.72ID:8RWJFnKu0知らなかったっ!
0895デフォルトの名無しさん (ブーイモ MMa8-yaSi)
2016/12/06(火) 08:43:02.97ID:rlulkAHnMif (a < 5) {
if (b < 3) {
c = 2;
}
} else {
c = 5;
}
0896デフォルトの名無しさん (ワッチョイ 4d7b-1jzX)
2016/12/06(火) 09:07:56.91ID:lfvK/C5000897デフォルトの名無しさん (ワッチョイ 46d4-HRbE)
2016/12/06(火) 09:15:06.53ID:yz62EvnI00898デフォルトの名無しさん (ワッチョイ 269f-dVQW)
2016/12/06(火) 15:45:06.24ID:EzooQ0Q10if (a < 5) {
if (b < 3) {
c = 2;
}
} else {
c = 5;
}
0899デフォルトの名無しさん (ワッチョイ 4d7b-Cf2b)
2016/12/06(火) 15:58:07.66ID:0O6FTDQ700900デフォルトの名無しさん (ワッチョイ 0448-m52i)
2016/12/06(火) 18:07:06.75ID:8RWJFnKu0そのアルゴリズム本わかりやすいしC以外でも使えてオススメ
0901デフォルトの名無しさん (ワッチョイ 7017-/mAi)
2016/12/06(火) 20:58:23.09ID:qXZeYWw/0HTMLタグをTABに置換するくらいなら、全角スペースをTABに置換する方が楽でしょ。
0902デフォルトの名無しさん (ワッチョイ 8342-/mAi)
2016/12/06(火) 21:10:17.24ID:Rqpl6d4H02ちゃんねるは中継でクラウドサービス利用していて
そこでクラッキングチェック行っているみたい
スクリプトのソースがたまに不正行為と見なされてはじかれる事がある
ダブルコーテーション以下が途切れるのもこの影響なんだろうな
他の掲示板なら良いのだろうけど、プログラムを扱う掲示板だと困る事があるね
0903デフォルトの名無しさん (ドコグロ MM5c-zrQ1)
2016/12/07(水) 07:52:02.73ID:EZqEc2x3MHTML タグから空白への置き換えはブラウザがやってくれるから
0904デフォルトの名無しさん (ワッチョイ 7017-/mAi)
2016/12/07(水) 09:29:52.21ID:2yTgyuYL0 Make my day.
Make my day.
 Make my day.
 Make my day.
ブラウザからソースファイルにコピペするときどうなるか、確認かねて書き込んでみる。
0905デフォルトの名無しさん (ワッチョイ 7017-N+/n)
2016/12/07(水) 09:34:10.33ID:2yTgyuYL0このレスはFirefixから書き込み。
Make my day.
Make my day.
Make my day.
Make my day.
Make my day.
0906デフォルトの名無しさん (ブーイモ MMa8-3jOa)
2016/12/07(水) 11:12:16.14ID:Jc0RgaZ6M2chMate 0.8.9.15/asus/Nexus 7/6.0.1/LR
M
M
M
0907デフォルトの名無しさん (ワッチョイ d7ff-KFGI)
2016/12/08(木) 12:20:18.33ID:1P/TaaKr00908デフォルトの名無しさん (ワッチョイ 7b0c-drn7)
2016/12/08(木) 18:56:16.88ID:o4YIlcAn0((double)rand()+1.0)/((double)RAND_MAX+2.0)
rand()/(RAND_MAX+1.0)
整数で0〜N(含まない)を取るこんなのもありましたが妥当ですか?
rand() / (RAND_MAX / N + 1)
なんでこのスレ終わったんですか?
0909デフォルトの名無しさん (ワッチョイ 533c-drn7)
2016/12/08(木) 18:57:21.03ID:zWqycvEP00910デフォルトの名無しさん (ワッチョイ 5f13-iCj+)
2016/12/08(木) 20:21:03.99ID:zp+gDUY101番目の例では +1.0, +2.0 に根拠がない
2番目の +1 を +1.0 に変えたら妥当
0911デフォルトの名無しさん (ワッチョイ ef17-WrC4)
2016/12/08(木) 22:47:44.26ID:T/EAppqR0XorShift法が便利
0912デフォルトの名無しさん (ガラプー KK77-g9kp)
2016/12/09(金) 00:41:50.55ID:WzSsU1DcKこれは変数のためのメモリ確保が毎回行われないってこと?
もしそうなら関数内でしか使わない変数がたくさんある場合はstatic付けると高速化できる?
0913デフォルトの名無しさん (ワッチョイ d342-WrC4)
2016/12/09(金) 00:58:18.29ID:Bxx28N620ローカル変数の場合スタック上で取るから速度低下などしないだろう
0914デフォルトの名無しさん (ワッチョイ cb17-YmwQ)
2016/12/09(金) 01:36:38.04ID:7U245e/90いまいち利点が分かりません。
0915デフォルトの名無しさん (ブーイモ MM47-5xeh)
2016/12/09(金) 01:50:02.03ID:RqQM5ixUM何のことやらわからんかったからググったが、
入力の終わりを表す特別な入力を与える方式のことね
例えば単なる文字列の入力でも
改行とかヌル文字とかで終端を示すのは番兵制御になるんじゃないの?
あまりにも当たり前の概念だよね
入力数の上限がわからないときは動的に領域を増やす手間はあるけどね
0916デフォルトの名無しさん (ガラプー KK77-g9kp)
2016/12/09(金) 01:57:35.45ID:WzSsU1DcKなるほど。
そのレスでやっとスタックの意味が分かった。
ありがとう!
0917デフォルトの名無しさん (ワッチョイ 7b0c-drn7)
2016/12/09(金) 05:21:15.09ID:yQ118R1B0安心しました
+1.0 +2.0と書いてあるサイト 多分ここからコピペしでかした子がいました
http://www.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html
0918デフォルトの名無しさん (ワッチョイ b717-WrC4)
2016/12/09(金) 05:32:43.85ID:wyGLW8050ウィンドウズアプリもWM_QUITが来るまでメッセージ待ちループし続けるわけだし。
0919デフォルトの名無しさん (ワッチョイ 4fc0-5ykY)
2016/12/09(金) 05:34:16.69ID:Y+ekosbD0その変数がクラスのコンストラクタで時間のかかる初期化してたら毎回やるわけだが
0920デフォルトの名無しさん (ワッチョイ 533c-drn7)
2016/12/09(金) 05:36:54.31ID:bVD9c9w500921デフォルトの名無しさん (ワッチョイ b717-WrC4)
2016/12/09(金) 05:44:02.80ID:wyGLW8050fgetc()の戻り値をchar型にキャストしてからEOF(-1)と比較する落とし穴を体験しておくのもよいだろう。
0922デフォルトの名無しさん (ワッチョイ 4fc0-5ykY)
2016/12/09(金) 05:45:25.08ID:Y+ekosbD0このスレCか
でも初期化はあるだろ
0923デフォルトの名無しさん (ワッチョイ 5f13-iCj+)
2016/12/09(金) 06:57:11.47ID:oHOYr6uJ0その「変数のためのメモリ確保」というのはスタックポインタの上げ下げ,負荷の小さい方法だ
たぶん差はない
0924デフォルトの名無しさん (ドコグロ MM4f-05m5)
2016/12/09(金) 07:19:58.24ID:CLppIZfJMアーキテクチャや処理系に依るとしか言えない
0925デフォルトの名無しさん (ワッチョイ b717-WrC4)
2016/12/09(金) 08:06:50.85ID:wyGLW8050故意に最適化防止する volatileとかみたいな感じで。
0926デフォルトの名無しさん (ワッチョイ d342-WrC4)
2016/12/09(金) 10:50:20.11ID:Bxx28N620クラスのコンストラクタの作成方法教えてください
0927デフォルトの名無しさん (ワッチョイ d342-WrC4)
2016/12/09(金) 10:51:10.20ID:Bxx28N620自動変数は明示的にやらない限り初期化してませんけど
0928デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)
2016/12/09(金) 11:12:10.89ID:T45DPCHQ0システムコールの回数を知りたいのですが、みなさんはどの様な方法を使っていますか?
dtruss?とかdtrace?とかのコマンドを使う方法もあるみたいなのですが自分の環境でなぜかうまくいかなかったので…
システムコールが遅いと言われる所以を確認するために実験をしたいので教えてください。
環境はMacOS X sierraです
0929デフォルトの名無しさん (ドコグロ MM0f-Bi9/)
2016/12/09(金) 11:16:18.62ID:Y/ssLcl/M流れを読まん奴だな
0930デフォルトの名無しさん (ドコグロ MMc7-Wysm)
2016/12/09(金) 14:02:48.18ID:GFY666CIM単にシステムコールの呼び出しだけならstrace
性能となるとカーネル固有になるかと。linuxのftraceとかsolarisのdtraceとか
0931デフォルトの名無しさん (ガックシ 0647-UxIg)
2016/12/09(金) 15:57:57.85ID:VEutL4+16有難うございます。
0932デフォルトの名無しさん (ワッチョイ a77b-vMYJ)
2016/12/09(金) 20:04:41.77ID:EaN/YLKK0その都度、CPU状態を退避するから、遅い
システムコールのreadを、1バイトずつ千回呼ぶと、千回モードが切り替わるから遅い
一方、libcのようなライブラリを使うと、内部でバッファを確保して、バッファリングするから、
千バイト貯まったタイミングで、1回だけシステムコールが呼ばれるから、効率的
(バッファリングモード)
ただし、標準エラー出力はバッファリング無し (unbuffered mode)
0933デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)
2016/12/09(金) 21:04:53.79ID:T45DPCHQ0つまり、システムコールでもバッファを自前で用意してそこへ入れる様にすればコンテキストスイッチが少なくて済むってことですよね。
1バイトずつシステムコールした場合
write 5350
read 5351
512バイトのバッファを用意した場合
write 611
read 612
実験してみたのですが単純に512倍にならないのなぜなんだろう…
0934デフォルトの名無しさん (ワッチョイ b37b-km+g)
2016/12/09(金) 21:31:16.81ID:wsqzeERH0そりゃやってることがコンテキストスイッチだけじゃないからに決まってるじゃん。
どういう理屈で512倍になると思ったんだよ
0935デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)
2016/12/09(金) 21:57:07.96ID:T45DPCHQ01バイトずつ呼んだ場合と512バイトまでバッファリングした場合だと単純に呼ぶ回数が512分の1になりそうだと思いました。
0936デフォルトの名無しさん (ワッチョイ a77b-vMYJ)
2016/12/09(金) 22:30:48.01ID:EaN/YLKK00937デフォルトの名無しさん (ワッチョイ 0b7b-ymeu)
2016/12/09(金) 22:52:05.97ID:LMv7TBS/0数を数えられないガキは小学生からやりなおし
0938デフォルトの名無しさん (ワッチョイ d342-WrC4)
2016/12/09(金) 23:07:31.21ID:Bxx28N620その動かしたというプログラムソースを公開してみて
0939デフォルトの名無しさん (ワッチョイ a77b-vMYJ)
2016/12/09(金) 23:50:28.19ID:EaN/YLKK00940デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)
2016/12/09(金) 23:58:22.80ID:T45DPCHQ0http://ideone.com/88miey
こんな感じです。
0941デフォルトの名無しさん (ワッチョイ ef9f-3/eH)
2016/12/10(土) 00:23:14.05ID:JXY7Akof0バッファが一杯になるまで待つ義理はreadには無いからな
0942デフォルトの名無しさん (ワッチョイ b37b-km+g)
2016/12/10(土) 00:33:05.74ID:RDLcPD4m00943デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)
2016/12/10(土) 00:54:00.52ID:HZTQruVS0学習におすすめのサイトあるいは書籍あったら教えてください
何からやればいいのかわからないので
基本的なアルゴリズムの学習はもうすぐ終わりそうです
0944デフォルトの名無しさん (ワントンキン MMef-/x+d)
2016/12/10(土) 01:14:54.41ID:ioem07nlM0945デフォルトの名無しさん (ワッチョイ b703-Cn1F)
2016/12/10(土) 01:18:03.29ID:IGGnlebo0目の前の箱で検索しまくれ
0946デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)
2016/12/10(土) 09:45:56.46ID:GM1V2Fap0スマホ向けのアプリです
C++もこれからってところなので
仮にスマホでテトリスアプリを作てリリースするとして
最低限この本は・・・このサイトは・・・みたいなのあれば
知らなければ無理にアドバイスしていただかなくてもいいです
0947デフォルトの名無しさん (ワッチョイ 4bdc-+dBx)
2016/12/10(土) 09:52:50.61ID:iEducwUH0ウィンドウ環境固有のフレームワークやら統合開発環境やら
ずっと上位のレイヤーに関する取っ掛かりを求めてる場合が多いよね。
hello, world とかテキストフィルタとは別次元の話。
0948デフォルトの名無しさん (ワッチョイ b37b-S1Hp)
2016/12/10(土) 10:01:29.25ID:6e0e6zLZ0最近はクロスプラットフォームなフレームワークもあるけど、基本はAndroidとiOSでは求められるスキルが違う
なによりもスマホ向けのアプリ開発にC言語やC++は向いていない
AndroidであればJava、iOSであればSwift(またはObjective-C)が定番の選択肢
0949デフォルトの名無しさん (ワッチョイ 8b4e-Ts63)
2016/12/10(土) 10:29:18.29ID:KSQS/S0/0ユーザーの入出力にはOSのAPIを使う。
スマホならタッチイベントの取得(入力)とタッチパネルへの描画(出力)だ。
だからまずiOS SDK入門とかAndroid SDK入門の類を探して始めればいい。
0950デフォルトの名無しさん (アウアウイー Sa37-Cn1F)
2016/12/10(土) 11:13:19.39ID:JpmQiIuRa0951デフォルトの名無しさん (ワッチョイ 5b3b-E5nD)
2016/12/10(土) 11:47:07.31ID:6IYzI33A00952デフォルトの名無しさん (ワッチョイ ef17-WrC4)
2016/12/10(土) 11:51:00.14ID:K31OdPco0スマホアプリならCの選択は無い
0953デフォルトの名無しさん (ワッチョイ ef17-WrC4)
2016/12/10(土) 11:52:26.65ID:K31OdPco0そんな世代はいらんもんな
死んでしまえ
0954デフォルトの名無しさん (ワッチョイ 0b19-xm+r)
2016/12/10(土) 12:03:38.51ID:Z6tA68bl0現物・物体にしか価値は無いって。
0955デフォルトの名無しさん (トンモー MM07-38k1)
2016/12/10(土) 12:31:46.93ID:wCZ//PfvM目的と情報と努力が必要なのだが、
どれも自然と沸いてくると
思ってるんでしょう。
0956デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)
2016/12/10(土) 12:45:03.67ID:GM1V2Fap0アドバイスになってないですね
質問の答えにもなってないです
知らないなら別にアドバイスしなくていいと言ってます
Androidでの開発使うのはC/C++の場合SDKではなくNDKです
無理にアドバイスしなくていいと言っているのに
なんで口を出したがるのが不思議です
要するにCでスマホアプリを作る知識は持ってないんですね
自分で調べるからいいです
このスレの存在意義って何なんでしょう
0957デフォルトの名無しさん (ワッチョイ 8b4e-Ts63)
2016/12/10(土) 12:49:25.82ID:KSQS/S0/00958デフォルトの名無しさん (ワッチョイ b703-Cn1F)
2016/12/10(土) 12:50:34.21ID:IGGnlebo00959デフォルトの名無しさん (ワッチョイ d35b-Bi9/)
2016/12/10(土) 12:55:36.05ID:OcU8eG0I00960デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)
2016/12/10(土) 13:00:30.49ID:GM1V2Fap0素直に「知りません」って言えばいいのにお説教したくなっちゃうんですね
Android NDKを使ってスマホ向けのアプリを作ったことありますか? 知識ありますか?
ないでしょ
黙ってればいいのに
>>959
詳しい人がいれば、良書や良いサイトを知っているのではないかと期待したんですが
期待はずれでしたね
0961デフォルトの名無しさん (ワッチョイ d35b-Bi9/)
2016/12/10(土) 13:08:04.93ID:OcU8eG0I0答えてくれる人は人で機械ではないのよ
まあ、ガンバってな
0962デフォルトの名無しさん (ワッチョイ 8b4e-Ts63)
2016/12/10(土) 13:10:43.57ID:KSQS/S0/00963デフォルトの名無しさん (ワッチョイ 533c-drn7)
2016/12/10(土) 13:48:53.05ID:da5gf22z00964デフォルトの名無しさん (ワッチョイ 6f5b-3ple)
2016/12/10(土) 17:54:34.61ID:ib1s6/9H0プログラムのプの字も分かってない事にいずれ気づくさ。
あのとき恥ずかしい事したなって思うのも、経験の一つさ。
0965デフォルトの名無しさん (ワッチョイ 2f68-k4K1)
2016/12/10(土) 19:05:35.56ID:E4ED1H/i0イライラするなよ
お茶でも飲んで落ち着けって
GUIははじめてか?
0966デフォルトの名無しさん (ワッチョイ a7e3-VjgG)
2016/12/10(土) 19:19:32.10ID:7S/9eXg00間違った方向にしか成長しないから今すぐ諦めるのが懸命だぞ
やるだけ時間の無駄
0967デフォルトの名無しさん (ワッチョイ 5f13-drn7)
2016/12/10(土) 19:46:23.71ID:6Xk6zUw60×懸命
○賢明
0968デフォルトの名無しさん (ワッチョイ b37b-km+g)
2016/12/10(土) 19:49:39.61ID:RDLcPD4m00969デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)
2016/12/10(土) 20:03:31.18ID:9a8Z2SKX0自分のことですか?
ちゃんとスマホアプリを作ったことあるんですかね
>>968
そうなんですか
まあ、環境ですからね
その先ですね、問題は
GitHubでも見ながら勉強します
0970デフォルトの名無しさん (ワッチョイ 8b7b-7i2P)
2016/12/10(土) 21:12:49.57ID:Y8xCOPeF00971デフォルトの名無しさん (ワッチョイ 8b7b-7i2P)
2016/12/10(土) 21:15:14.95ID:Y8xCOPeF0C言語なら俺に聞け 138
http://echo.2ch.net/test/read.cgi/tech/1481372036/
0972デフォルトの名無しさん (ワッチョイ 537b-ifuQ)
2016/12/10(土) 21:16:10.85ID:4D7kDN5f00973デフォルトの名無しさん (ワントンキン MMef-/x+d)
2016/12/11(日) 00:17:13.16ID:65IEUqLtM0974デフォルトの名無しさん (ワッチョイ 9b3c-j1Yw)
2016/12/11(日) 06:02:17.05ID:AF+o9o7U0そもそもAndroidでなぜCで書くのか?目的がC言語が使いたいってだけならiOSやればいい
0975デフォルトの名無しさん (ワッチョイ b39b-5xeh)
2016/12/11(日) 11:56:52.11ID:OGD68Kvc00976デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)
2016/12/11(日) 11:59:30.36ID:chtkNEN/0linux環境なら512倍になりました。
0977デフォルトの名無しさん (ワッチョイ b717-rXHS)
2016/12/11(日) 12:08:47.75ID:r1VSzSyo0>>946
> スマホ向けのアプリです
> C++もこれからってところなので
> 知らなければ無理にアドバイスしていただかなくてもいいです
ネイティブアプリを作りたいのか?
つか、何も知らないくせに、その書き方は人にものを尋ねる態度ではない。
0978デフォルトの名無しさん (ワッチョイ d35b-Bi9/)
2016/12/11(日) 12:37:29.39ID:g1dtzkew00979デフォルトの名無しさん (ワッチョイ ef16-ZZzq)
2016/12/11(日) 13:10:30.98ID:RTPRFBen0画像ファイルをMD5して同じのを見つけてます。
ファイル数は2万くらい。FindFirstFileと・・・Next
で回しているけど最初は早いけど徐々に遅くなり
最後の方はいらっとくる。2回目はキャッシュが効いて早い
一度空まわし(中身は見ない)してと思いやったがあまり変わらず・・・
けど似たソフトは常に一定で早い、どういう処理して
いるのだろう?
PS:C++の方で聞こうとしたがSTLでわいわいやってて違うと
思いこちらに
0980デフォルトの名無しさん (ワッチョイ 7b36-dpej)
2016/12/11(日) 13:12:46.95ID:24/0QA0f0インデックス作ってるとか
0981デフォルトの名無しさん (ワッチョイ b717-WrC4)
2016/12/11(日) 13:18:13.21ID:ZUXzDC9z0いっそ該当部分のソースを以下サイトに貼ったらどう?
http://ideone.com/
0982デフォルトの名無しさん (ワッチョイ ef16-9yoE)
2016/12/11(日) 13:59:53.33ID:4HAv1UM20一致したもの同士を調べるだけでは
0983デフォルトの名無しさん (ワッチョイ 8bcb-ZZzq)
2016/12/11(日) 15:06:04.94ID:ngy4uZWg0>>982さんの通りハッシュ値のリスト作って一致したもの
をあげてるだけです。
FindFirstFile からハッシュ値を求める関数呼んでるだけ
処理分けするとハッシュ値を求める関数はだいたい一定
で一致してるか見る処理は全部見てからなんで関係なし。
ファイルサイズは大きいと時間掛るから1MB分しか見ない
ちなみに早いと言ったソフトは「重複確認」BeRepetition.exe
というソフトです。検索が早いです。今Readme.txt見たら
.NET Framework4.0使ってますね、VBのfilesオブジェクト
みたいなの使ってるのかな〜.Net知らないや・・・
Visual Studio 持ってないWindows SDKだけでやってます・・・
時代遅れか・・・(-_-)
0984デフォルトの名無しさん (ワッチョイ eb90-5xeh)
2016/12/11(日) 15:29:09.16ID:165vzO4I00985デフォルトの名無しさん (ワッチョイ 6f5b-3ple)
2016/12/11(日) 15:55:08.22ID:C5/UKHxJ00986デフォルトの名無しさん (ワッチョイ b70b-l58V)
2016/12/11(日) 16:41:43.14ID:9VCAfwyu00987デフォルトの名無しさん (ワッチョイ a7e3-VjgG)
2016/12/11(日) 19:45:29.41ID:+M7lO+Ac00988デフォルトの名無しさん (ブーイモ MM2f-JZIj)
2016/12/11(日) 20:08:26.45ID:vExZBc8rMなんたら木の出番じゃね?
しかし二回目はキャッシュが効くとかようわからん
0989デフォルトの名無しさん (ドコグロ MM77-YAS3)
2016/12/11(日) 21:24:22.51ID:l/QvE96EM大学行ってれば、教科書とかに載ってるん?
勉強しようとしたとき、断片的にしか勉強できる資料がないんだが。
0990デフォルトの名無しさん (ワッチョイ b39b-5xeh)
2016/12/11(日) 21:31:20.00ID:OGD68Kvc0最近だとアルゴリズム図鑑とかいうアプリが面白そうだったぞ
0991デフォルトの名無しさん (ワントンキン MMef-g0tO)
2016/12/11(日) 21:34:51.99ID:YzZYeMV4Mあれば激安かと
0992デフォルトの名無しさん (ワッチョイ a77b-vMYJ)
2016/12/11(日) 23:06:53.66ID:hiiS8aXy0Narasimha Karumanchi(インド人) 著
セジウィックの本も、有名。
他にも、アルゴリズムの入門書は、たくさんある
Webサイトでは、会津大学のプログラミング・コンテストも有名
Aizu Online Judge(AOJ)
まず、クイックソート・2分ヒープ・ハッシュを勉強する
0993デフォルトの名無しさん (ワッチョイ 4fe1-cKcd)
2016/12/12(月) 02:20:21.93ID:TI/I0vvc0メモリリークとか、ファイルハンドルを解放してないとかがあるんじゃないか?
0994デフォルトの名無しさん (ワッチョイ b37b-km+g)
2016/12/12(月) 04:05:31.02ID:wAsQV1H60ハッシュテーブルなんて作らずに単純に検索するファイルを全部読み込んでメモリに持って
1.ファイルサイズが一致してるか
2.一致してる場合はデータが完全に一致してるか
ってファイル毎に行う方が全ファイルを読み込む必要が無い分平均的には早いかもしれないけどね
0995デフォルトの名無しさん (ワッチョイ 2316-ZZzq)
2016/12/12(月) 14:46:52.68ID:9T9t0mJs0すいません、なんか私が変な質問したみたいです。
処理自体は重複の確認のためにファイルをCreateFileMapping
してCryptCreateHash他関数を呼んでMD5の128ビットの
ハッシュ値をもらい、それを配列に入れ、全ファイル
終わったらソートして重複があれば書き出す。
という処理です。自分でハッシュ値を作るわけではなくて
<wincrypt.h> の関数を呼んでます。
と、書いててこの関数の時間測ったら平均0.057秒でした
単純に5000個で0.057なら5分近く掛りますね、これですね。
自分には関数呼ぶくらいしかできないので我慢しますわ。
回答どうもでした。
0996デフォルトの名無しさん (ワッチョイ a74f-drn7)
2016/12/12(月) 14:54:59.93ID:WPCsPjPg0n個のファイル郡のなかで相互に重複してるものを探し出したい ということか
マップと線形リストの組み合わせになるんかねー
0997デフォルトの名無しさん (アウアウカー Sa67-l58V)
2016/12/12(月) 15:39:46.35ID:mRGCsUDoa詳しくはないけど抽出するデータは1KBで十分なんじゃないの
1MBのデータは2の8000000乗通りの値をとるけどMD5ハッシュは2の128乗通りの値しかとれないわけで、過剰に大きなデータのハッシュを取ってもハッシュがかぶる可能性は変わらないんじゃないかな
詳しい人がいるなら訂正して
0998デフォルトの名無しさん (ワッチョイ d377-IJHD)
2016/12/12(月) 15:40:05.35ID:89qHcou000999デフォルトの名無しさん (ワッチョイ a74f-drn7)
2016/12/12(月) 15:46:19.18ID:WPCsPjPg0ファイルヘッダ部分付近だけをハッシュするのは衝突の可能性が高いかもねー
1000デフォルトの名無しさん (ワッチョイ 0b42-bB/5)
2016/12/12(月) 15:46:38.30ID:FHfa2E0G0サイズが違えばファイルは別だ。
あと先頭や後ろの1kが違っても別だ。
完全一致した巨大ファイルがあると網羅するしかなく手間だが・・・
それは簡単判定してしまい前、後、中を適当にとって一致したら同一候補として上げてしまい人力か別ソフトに委ねるとかは。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 68日 19時間 22分 40秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。