トップページ⇒tech
1002コメント343KB

C言語なら俺に聞け 137 [無断転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 1b7b-m9GF)2016/10/04(火) 20:23:58.44ID:iEd5oTSN0
C言語の話題のみ取り扱いますC++の話題はC++スレへ
質問するなら環境(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+Zkcgg0
乙
0003デフォルトの名無しさん (ワントンキン MMcf-Xr8z)2016/10/04(火) 22:26:07.73ID:b4l9l8B3M
初めてK&Rのプログラミング言語Cを読んだよ
今となってはほぼわかってることだけど
新しい発見もいくつかあって読物として面白かった
日本語が変なのでソースから意味を読み取れないと厳しいかもね
0004デフォルトの名無しさん (ワッチョイ 477b-eUFH)2016/10/04(火) 23:09:56.96ID:MLgwtfwZ0
部分式が評価される順番が決まっているものは、&& || ?: ,(カンマ)の4つだけ。
式の評価が、確実に終了している場所を、副作用完了点と言うが、この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+CuacNrM
MISRAは++自体を非推奨にすればいいのに
0007デフォルトの名無しさん (アウアウ Sa77-S8iu)2016/10/05(水) 09:48:02.71ID:i3PbFTOfa
dupについてですが、よくdupを使った例としてwebでは
fd = 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:EaKfNvzs0
1 0は標準入力だから、画面出力には何も影響しない
2 あえて標準入出力を変更する意味があるからやっている

でもそのソースは不要なclose(0)してるのでシロウトが意味を理解せずにマネだけしてる可能性もある
その場合はdup2じゃなくてdup使えば空いてるFDを割り当ててくれる
0009デフォルトの名無しさん (アウアウ Sa77-S8iu)2016/10/05(水) 12:17:59.11ID:oUFckdfla
>>8
初心者なのでバカな質問かもしれませんが、変更する意味があるとはどの様な場合でしょうか?簡単な例えには出来ないですかね?
0010デフォルトの名無しさん (ドコグロ MM27-rzru)2016/10/05(水) 13:11:55.91ID:9+CuacNrM
>>9
シェルが標準入出力をリダイレクトする場合とか
webサーバがCGIプログラムを起動するときとか
0011デフォルトの名無しさん (ワッチョイ c37b-7Sel)2016/10/05(水) 13:12:00.77ID:g1EfRYOl0
典型的な例ではexecして子プロセスに標準FDを渡す時
0012デフォルトの名無しさん (ワッチョイ 1f13-kUAU)2016/10/05(水) 19:38:51.18ID:VUH0FpmF0
>>7
0, 1 を潰すことはあっても 2 を潰すことはないな‥
0013デフォルトの名無しさん (スフッ Sda8-xaNP)2016/10/06(木) 16:58:52.07ID:VkVdfdR0d
スタックを操作するようなプログラムを作りたいのですが教えていただけないでしょうか
0014デフォルトの名無しさん (ワッチョイ f97b-Nuoi)2016/10/06(木) 17:08:42.17ID:eAWsHHNz0
イヤどす
0015デフォルトの名無しさん (ワッチョイ b1dc-lo/1)2016/10/06(木) 17:15:28.15ID:5ou6x1p80
>>13
質問が漠然としすぎてて答えられないよ。
Cで「スタックを操作する」と言われて俺でもすぐ思いつくネタがいくつもある。
可変引数関数、スタックマシンのエミュレータ、Luaなんかとの連携...

もっと具体的に絞り込んでくれ。
0016デフォルトの名無しさん (ワッチョイ 98ff-psoB)2016/10/06(木) 17:15:43.44ID:qjp5uqHo0
どっちのスタック?
コレクションの話なのかメモリエリアの話なのか
0017デフォルトの名無しさん (スフッ Sda8-xaNP)2016/10/06(木) 18:49:22.65ID:VkVdfdR0d
>>15
すいません
popとキーボードで入力したらスタックをポップする
pushだとスタックをプッシュするといった感じのものです
0018デフォルトの名無しさん (ワッチョイ ab6f-xaNP)2016/10/06(木) 18:54:54.41ID:cxWhlLpu0
宿題スレへ
0019デフォルトの名無しさん (ワッチョイ c63c-lsIp)2016/10/06(木) 18:56:01.73ID:fmiAnVuG0
LIFOバッファ (後入れ先出し) の機構と
入力操作により 何を詰み 何を取り出すのか
0020デフォルトの名無しさん (JP 0Ha5-xaNP)2016/10/06(木) 18:56:16.43ID:nqog8BGgH
関数呼んだらpushだし、returnしたらpopだよ
0021デフォルトの名無しさん (ワッチョイ c67d-yd9a)2016/10/06(木) 19:12:22.12ID:RCNTdGW50
FORTH使ったら
0022デフォルトの名無しさん (ドコグロ MM94-xaNP)2016/10/06(木) 19:32:51.60ID:pwZHamuxM
>>21
昔、68000 で実装したわ
(a0)+ みたいなアドレッシングモードがあるので結構相性よかった
0023デフォルトの名無しさん (アウアウ Sac5-xaNP)2016/10/06(木) 20:20:06.40ID:PohpMD2Qa
>>17
質問も説明もめちゃくちゃだな。もうちょい勉強頑張れ。
1配列を作る
2pushでポインタをインクリメント
3popでポインタをデクリメント
あとは自分で考えよう。
0024デフォルトの名無しさん (ワッチョイ beb2-lsIp)2016/10/06(木) 20:25:15.02ID:BuOsO87Q0
LIFO処理したいだけ?
0025デフォルトの名無しさん (アウアウ Sac5-xaNP)2016/10/06(木) 21:08:53.95ID:PohpMD2Qa
>>24
質問者の語彙を見るとその質問の意味が伝わんない気がする。。。
0026デフォルトの名無しさん (ワッチョイ c63c-xaNP)2016/10/06(木) 21:59:36.18ID:Xaq9g6kU0
>>13
http://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:RCNTdGW50
>21
CP/MでFORTHを使ったことがある。
FORTHで、実数計算ができると便利だとおもうのですが、
実数計算のできるFORTHってあるのでしょうか。
0028デフォルトの名無しさん (ワッチョイ 6b7b-xaNP)2016/10/06(木) 23:29:54.79ID:+4a+9Smq0
1人で何やってるんだろう?
0029デフォルトの名無しさん (スプッッ Sdf8-xaNP)2016/10/06(木) 23:44:42.58ID:WOr5awvqd
読点の打ち方が気持ち悪い
0030デフォルトの名無しさん (ワッチョイ 3041-pu+C)2016/10/07(金) 00:16:03.31ID:WyrSxLB80
やっちまったな
0031デフォルトの名無しさん (ブーイモ MMa8-9w9I)2016/10/07(金) 00:37:11.84ID:rPaqbGGGM
○でしこか?死ねばいいのに
0032デフォルトの名無しさん (ワッチョイ 15c1-99xo)2016/10/07(金) 01:31:44.62ID:4M3j5gXh0
pipeを使って親子プロセス間通信をさせる場合に、writeとreadを使って
子 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
>>33
なるほどテキストベースだと¥nを区切りにして
バイナリーだと区別のつけようがないのでsizeofで指定されたバイトいっぱいか終端くるまで読み込むんですかね?
0035デフォルトの名無しさん (ワッチョイ c63c-lsIp)2016/10/07(金) 02:08:19.70ID:wePoJpkC0
バイナリで
 固定長なら その長さ単位で
 可変長さなら ヘッダに長さを置いて 続けてバイナリ本体を
ってな具合
0036デフォルトの名無しさん (ワッチョイ c63c-lsIp)2016/10/07(金) 02:17:08.42ID:wePoJpkC0
あ ただ1つのバイナリデータだけを受けるんなら EOF になるまで
ひたすらうけっぱなしにしてくだけ だな
0037デフォルトの名無しさん (ワッチョイ 15c1-RF7M)2016/10/07(金) 03:20:16.46ID:4M3j5gXh0
>>36
なるほど有難うございます
0038デフォルトの名無しさん (ドコグロ MM5c-xaNP)2016/10/07(金) 08:18:39.49ID:H2xXfCEOM
>>27
float 使えないって、いつの時代だよ。
FORTH94 から標準化されてるぞ。
0039デフォルトの名無しさん (ワッチョイ c67d-yd9a)2016/10/07(金) 10:27:34.54ID:oA26EQDq0
>>38
そうでしたか。
情報有難うございます。
なにしろ8BitのCASIO FP-1100の時にFORTHをやっただけで、
今のWindows 7のパソコンでは、やっていないものですから。
さっそく、試してみます。
0040デフォルトの名無しさん (ガラプー KKdb-zJSo)2016/10/07(金) 10:31:07.97ID:NRQfl7yKK
>>33
それはストリームの前にバッファがあるから
問題が少し違うんじゃね
0041デフォルトの名無しさん (アウアウ Sac5-RF7M)2016/10/07(金) 14:12:20.56ID:vDcoLEHxa
>>40
>>32です。
それもお聞きしたかったです。
あるプロセスでバッファを用意してそこにデータを貯めてストリームに流そうが、単発でどんどんストリームに流そうがデータを受けるプロセスがいつストリームから読んでくれるか分からない以上ストリーム内部にバッファする機能があると思うのです。これのサイズとかってどうやって決められているんでしょうか?
0042デフォルトの名無しさん (ドコグロ MM9b-xaNP)2016/10/07(金) 18:13:13.16ID:I3WlgDG5M
>>41
read(2), write(2)だとFILEのストリームは使われない
FILEのバッファならsetvbuf
0043デフォルトの名無しさん (ガックシ 0639-99xo)2016/10/07(金) 19:11:15.85ID:dwW+5xo06
>>42
read,writeでファイルディスクリプタに流すときはバッファ機能はないんですか?
004442 (ワッチョイ ab6f-Ea/d)2016/10/07(金) 22:14:58.54ID:gWzjBkAk0
>>43
read(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:n14d8Sf50
winsockを使って1対1のチャットプログラムみたいなのが作りたいのですが
1対1なんで、各PCがサーバ兼クライアントみたいになると思うんですが
クライアント用のソケットとサーバ用のソケットの同居が難しくて
サーバ用はacceptすると待機状態になってプログラムの進行が止まって
クライアント用はサーバがacceptしていないとそもそも接続が成り立たないみたいで
サーバとして待機するか、クライアントとして接続しに行くかの二者択一状態にあります

なので、クライアントの対向のサーバへの接続を、自己のサーバでのacceptと同時並行する
みたいな方法があれば便利なのですが、ありますかね?

それともそもそもクライアントとサーバのプログラムは別々にしていた方がやっぱり楽なのでしょうか?
0046デフォルトの名無しさん (スッップ Sda8-xaNP)2016/10/08(土) 00:36:17.84ID:VHjsKdufd
>>45
スレタイ読める?
winsockは言語に依存しないAPIだぞ
0047デフォルトの名無しさん (ワッチョイ 5b00-BQsb)2016/10/08(土) 00:38:12.24ID:c/yhHh8V0
>>45
ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1414709836/
0048デフォルトの名無しさん (ワッチョイ b17b-lsIp)2016/10/08(土) 00:41:21.91ID:n14d8Sf50
>>46
>>47
すみません、C言語で使ってたもんで
0049デフォルトの名無しさん (ワッチョイ 15c1-RF7M)2016/10/08(土) 04:22:04.60ID:3dit4BZy0
>>44
有難うございます。
まさにそれでした。パイプの管の中に入れるサイズが知りたかったので
0050デフォルトの名無しさん (ワッチョイ fc7b-glPk)2016/10/08(土) 11:01:23.54ID:cRcu85q40
>>45-48
本に書いてあるサンプル程度なら、たいてい、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+A0
プロセスBで、出来るかどうか、試してみれば?
shmget(12345, 0, 0);

それと、そのサンプルが正しいとは限らないので、違うサンプルも見た方がいい
0053デフォルトの名無しさん (ワッチョイ 9ec0-mVVp)2016/10/12(水) 07:16:10.95ID:sC2BZgb30
先に起動した方が作るなら両方でやる必要があるね
0054デフォルトの名無しさん (ワッチョイ 5b00-BQsb)2016/10/12(水) 07:53:23.13ID:3Wyv7hu00
>>51
どう実用的な意味があるのかは分からないけど、このAPIは例えばAが100バイト確保したのを
Bは50バイトだけ共有するというのを許しているのでサイズは指定する必要あり。
パーミッションは、そのプロセスの読み書きの意思表示を指定するになる。 Bが例えば書く
パーミッションを指定しても、Aが許してなければBはこのコールでEACCESエラーになる。
0055デフォルトの名無しさん (アウアウ Sac5-RF7M)2016/10/12(水) 13:46:51.99ID:22p18m+ma
>>52
>>53
>>54
なるほど。回答有難うございます
0056デフォルトの名無しさん (ワッチョイ 2187-TInN)2016/10/12(水) 18:53:55.97ID:Ecy043Us0
環境はWindows10 64bit、Cygwin、gccです

ttp://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:Ecy043Us0
あと、具体的にどこでSegmentation faultが起きるのかも調べましたが、
insert_nth関数の

cp->next = make_cell(x, cp->next);

で起きるようです
0058デフォルトの名無しさん (アウアウ Sac5-xaNP)2016/10/12(水) 19:10:35.69ID:5VjkdN+Ga
List l;
はローカル変数だからmake_listから抜けた時点で破壊されるから
0059デフォルトの名無しさん (ワッチョイ 2187-TInN)2016/10/12(水) 19:21:54.37ID:Ecy043Us0
>>58
レスありがとうございます!
その場合関数を飛び越えても構造体が破壊されない領域にポインタが指す構造体が記憶されるっていうことでしょうか。
もしそうならその場所はヒープ領域で合ってますか?
0060デフォルトの名無しさん (ワッチョイ 2187-TInN)2016/10/12(水) 19:22:26.45ID:Ecy043Us0
その場合=malloc使った場合、でした
0061デフォルトの名無しさん (ワッチョイ 2187-TInN)2016/10/12(水) 19:35:00.26ID:Ecy043Us0
多分>>59-60は自己解決しました。mallocが何やってるかが抜けてたようです。
ただローカル変数が生き残らないというのは自分じゃ解決できなかったと思います。ありがとうございました。
0062デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 10:22:56.64ID:pWVjxgqB0
0x000000みたいなバイナリが入った変数から特定の位置の1ビットだけ抜き出したい
場合はどうしたらよいのでしょうか、型はQWORDです。
0063デフォルトの名無しさん (ワッチョイ 1b7b-Oa01)2016/10/13(木) 10:29:44.71ID:H3/IB+RL0
抜き出すとは?
1 0 判定なら & だけど
0064デフォルトの名無しさん (ワッチョイ 874f-8qPS)2016/10/13(木) 10:31:01.18ID:Ld+W/t4G0
1を特定の位置までビットシフトして & する
QWORD って型で、それをどう記述するかは知らない

int 型変数 i なら
  i & (1 << j)
j は特定の位置 0 〜 int 型のビット数-1 まで
0065デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 10:33:45.02ID:pWVjxgqB0
16ビットの内の4ビット目が何になっているから、IF文とか作りたいのです。
0066デフォルトの名無しさん (ワッチョイ 1b7b-b88/)2016/10/13(木) 10:46:18.01ID:H3/IB+RL0
if (a & 0x0008 != 0) {
1 だよ;
}
0067デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 10:56:51.84ID:pWVjxgqB0
ビットシフトを勉強してみます。
0068デフォルトの名無しさん (JP 0H1f-Oa01)2016/10/13(木) 11:05:01.05ID:nvgFGz34H
いや、ビットシフトなんてややこしいことしないで>>66の方がいいと思うけど
0069デフォルトの名無しさん (ワッチョイ e300-n62S)2016/10/13(木) 11:27:25.75ID:FTZZo7+T0
>>66
C では != 演算子の方が & より優先度が高いので

if ((a & 0x0008) != 0) {
1 だよ;
}

としないとだめだよ。
0070デフォルトの名無しさん (ワッチョイ 1b7b-Oa01)2016/10/13(木) 11:33:31.41ID:H3/IB+RL0
ごめんよぅ
0071デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 11:50:33.60ID:pWVjxgqB0
やってみます。ありがとうございました
0072デフォルトの名無しさん (ワッチョイ cba1-97v9)2016/10/13(木) 11:54:02.21ID:mw9SJIVD0
#define MASK_SIZE 32
 int 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
いまどきはintrinsics使う ビットシフト w
石器人かよ
0074デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 12:46:26.42ID:pWVjxgqB0
うまくいきませんでした。
0x20A40000というバイナリがaに入っていた場合に

if(a & 0x20)で0x20があるかという意味になるのでしょうか
勘違いをしていたらすいません
0075デフォルトの名無しさん (ワッチョイ 6f9f-vjb2)2016/10/13(木) 12:51:41.22ID:ARQtMSWi0
>>74
> if(a & 0x20)で0x20があるかという意味になるのでしょうか
Yes

ちなみに0x20A40000 に 0x20 のビットは無いぞ
0076デフォルトの名無しさん (ワッチョイ 1b7b-Oa01)2016/10/13(木) 12:55:39.30ID:H3/IB+RL0
>>74
論理積、論理和、排他的論理和
勉強してみてちょ
0077デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 14:17:24.60ID:pWVjxgqB0
if((a & 0xf0000000)==0x20000000)

これで0x20A40000の中に0x20000000があるかという意味になりますでしょうか
0078デフォルトの名無しさん (ワッチョイ 874f-8qPS)2016/10/13(木) 14:36:58.67ID:Ld+W/t4G0
とある1ビットだけが ON して欲しい比較か
4ビットまとまりが 0010 になってて欲しいのか
0079デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 14:51:50.71ID:pWVjxgqB0
ビットというよりバイトですね、
特定の8バイトがどうなっているかを知りたいです
0080デフォルトの名無しさん (アウアウ Sa97-Oa01)2016/10/13(木) 14:58:28.96ID:gFIKAE5ea
QWORDって8バイトの型じゃないの?
その全8バイトを比較するって普通に==でいいんじゃ…
0081デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 15:00:14.97ID:pWVjxgqB0
間違いました特定の8ビットです。
0082デフォルトの名無しさん (アウアウ Sa97-Oa01)2016/10/13(木) 15:51:47.31ID:gFIKAE5ea
上位8bit比較で>>77がしたいなら
(a & 0xff000000)==0x20000000

ちゃんと「ビットアンド」とかで自分で調べたほうがいいよ
0083デフォルトの名無しさん (ワッチョイ 077b-ziuw)2016/10/13(木) 16:15:07.74ID:Uji1zuLq0
QWORDだと上位8bitではないよ
その位置の8bitと比較したいのであれば0x00000000ff000000でマスクしないと
上位DWORDにビットが立っていたら判定ミスする
0084デフォルトの名無しさん (ワッチョイ 87ef-8qPS)2016/10/13(木) 16:28:14.46ID:pWVjxgqB0
>>82-83
ありがとうございます。なんとなくわかってきました。
やりたいことができそうです
0085デフォルトの名無しさん (ドコグロ MM37-Oa01)2016/10/13(木) 16:42:43.33ID:N8ZLQmvbM
エンディアンで泣きをみる
0086デフォルトの名無しさん (ワッチョイ eb85-torC)2016/10/13(木) 18:25:41.64ID:zUN0ltZm0
sizeof(int)==8
の処理系を探しています
誰か心当たりはありませんか?
C++じゃなくてもいいです
0087デフォルトの名無しさん (ワントンキン MM8f-310H)2016/10/13(木) 19:22:23.00ID:u+icdn37M
上位8ビットのどれかがONを知りたい
(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:tbh8ZbrJH
>>86
https://en.m.wikipedia.org/wiki/64-bit_computing
のILP64,SILP64のとこ見れば、特殊な処理系はありそうだね
入手や使用は難易度高そう
0089デフォルトの名無しさん (アウアウ Sab7-ByRo)2016/10/13(木) 19:59:50.46ID:RHCll5oYa
変数や関数の名前を決めるときに

rightとleftとかopenとcloseの文字数が違って発狂しそうなんだけどどうすればいい?
0090デフォルトの名無しさん (ドコグロ MM2f-Oa01)2016/10/13(木) 20:06:23.07ID:TvKloCS2M
>>89
精神を鍛えて気にしないようにする
0091デフォルトの名無しさん (ワッチョイ 6f9f-vjb2)2016/10/13(木) 20:10:20.39ID:ARQtMSWi0
>>87
> (a & 0x20000000)==0x20000000
> でもこれだと
> a == 0x20000000
> と同じだね

全然違う
0092デフォルトの名無しさん (ワントンキン MM8f-310H)2016/10/13(木) 20:34:06.89ID:u+icdn37M
>>91
あ、すまん
0093デフォルトの名無しさん (ブーイモ MM4f-KUav)2016/10/13(木) 20:47:38.84ID:GbenlpnTM
>>89
長さが違うからミスに気づきやすいと前向きにかんがえる
0094デフォルトの名無しさん (ワッチョイ 9f13-torC)2016/10/13(木) 20:53:14.10ID:iSzZT/Mz0
>>88
OS に関係なく int を 64 bit にとることは可能だとは思うんですが
需要はないようですね,なんだかもったいない
0095デフォルトの名無しさん (ワッチョイ d70b-Oa01)2016/10/13(木) 22:24:55.16ID:/hd0MmIW0
最大値900京なんてほとんどの場合無意味だからでしょ
intが8バイトになったらむしろメモリがもったいない
0096デフォルトの名無しさん (ワッチョイ ef3c-Oa01)2016/10/13(木) 22:33:37.10ID:hvG1pVAX0
>>94
わざわざ互換性をなくすほどのメリットないから当たり前
0097デフォルトの名無しさん (ワッチョイ d790-Oa01)2016/10/13(木) 22:54:23.60ID:ZHmg8o8/0
64bitプロセッサならintが64bitなのが自然な感じ。
0098デフォルトの名無しさん (ワッチョイ ef7d-dAUv)2016/10/13(木) 23:51:05.99ID:98QyjLq50
>>86
8バイトの整数ならば、
Fortran 95 では、
integer(8)
と宣言することで、8バイトの整数になります。
0099デフォルトの名無しさん (ワッチョイ d70b-Oa01)2016/10/14(金) 00:30:09.45ID:7CIQwa030
いや、Cだってlong long intにすれば8バイト以上使えるけど…
0100デフォルトの名無しさん (ワッチョイ e300-n62S)2016/10/14(金) 05:48:02.98ID:nsUszi540
サイズ指定するならstdint.hに定義されている int64_t なんかが使えるよ。
0101デフォルトの名無しさん (ワッチョイ ef7d-dAUv)2016/10/14(金) 06:45:03.22ID:cSk0pU640
>>99
gccで使えますか。
私は、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:swVgBBHi0
long long long int は128bitになるんだろうか?
long long long long int は256bit?
unsigned long long long long int とかもできるのかな?
0103デフォルトの名無しさん (ドコグロ MM6f-Oa01)2016/10/14(金) 08:46:25.11ID:QBLxORarM
あほか
0104デフォルトの名無しさん (ドコグロ MM87-Oa01)2016/10/14(金) 09:05:31.40ID:HwCvFXaSM
たぶん、C言語創生期に long long int は 64bit とか言ったら「あほか」って言われたろうね。
0105デフォルトの名無しさん (ワッチョイ 8742-8qPS)2016/10/14(金) 09:25:31.21ID:ws3u9Hag0
いっそ、可変長にしてしまえば
0106デフォルトの名無しさん (ワッチョイ 3b4e-x3Zw)2016/10/14(金) 09:51:15.71ID:lawu0WKC0
>>101
任意精度演算
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
>>106
御教示ありがとうございます。
MAPMを使ってみようかと思っています。
0108デフォルトの名無しさん (アウアウ Sab7-ByRo)2016/10/14(金) 11:32:24.48ID:sMs61t4Ka
int64_t
0109デフォルトの名無しさん (JP 0Hcf-8qPS)2016/10/14(金) 14:15:36.04ID:fG6UsqE8H
Github見てると 、_getcharみたいに
アンダースコア入れてる人いるんだけど
_getchar
getchar
何がちがうの?
0110デフォルトの名無しさん (ワッチョイ 9f13-torC)2016/10/14(金) 21:23:59.12ID:5nO9NwFR0
>>96
short int / int /long int のビット数が変わるとバグる書き方そのものがすでにおかしい
0111デフォルトの名無しさん (ワッチョイ ef3c-Oa01)2016/10/15(土) 09:23:17.36ID:amISm65B0
>>110
おかしいからって無視していいものでもない
0112デフォルトの名無しさん (ワッチョイ eb85-torC)2016/10/15(土) 10:50:49.45ID:eBSmAB5D0
>>111
バグのあるプログラムは切っていいと思う
0113デフォルトの名無しさん (ワッチョイ 8742-8qPS)2016/10/15(土) 11:03:20.90ID:/HXJq9om0
大抵のプログラムにはバグがつきものなんだけどな
0114デフォルトの名無しさん (ワッチョイ d790-Oa01)2016/10/15(土) 11:43:55.72ID:DVENaldK0
>>110
long int は32bitって決まってるんだからbit数変わったらバグっても文句は言えんだろ。
0115デフォルトの名無しさん (ワッチョイ 8390-Oa01)2016/10/15(土) 11:50:34.93ID:fZpbICuu0
>>114
誰が決めたんだよ
0116デフォルトの名無しさん (ドコグロ MM6f-Oa01)2016/10/15(土) 12:32:05.06ID:F0NY5SKqM
>>112
バグ?
移植性の話とバグの区別もつかないアホは黙ってろ
0117デフォルトの名無しさん (ワッチョイ 67d4-Vk+K)2016/10/15(土) 12:56:01.28ID:9RFQ8dC+0
>>109
その _getchar が、どこかで #ifdef〜#else 等で括られて
#define されてたら、何でそうゆうことをするのかちょっと考えてみよう
0118デフォルトの名無しさん (ワッチョイ 4fe1-Oa01)2016/10/15(土) 14:49:32.59ID:gt76Wp9S0
intが64bitとか40bitとかの環境を想定していったらきりがない
普通のプログラムは32bitときめつけることでプログラムを簡単かつ高速にできてる
0119デフォルトの名無しさん (ササクッテロ Spd7-DI90)2016/10/15(土) 15:08:48.00ID:XLlIg/XVp
どんな環境で動かすかは最初に決めるべきだし、決まらないならautoconfなりで動かない環境を弾くべき
ただそれだけ
全ての環境で動かすって崇高な目的があるならその通り作ればいい
0120デフォルトの名無しさん (ワッチョイ 6f85-/yIn)2016/10/15(土) 17:15:47.72ID:4k82dJ130
size_tが64ビットの環境と32ビットの環境で違うから
これが4バイトとしてそれに依存したことやってるとそこでバグるんだよな
0121デフォルトの名無しさん (ワッチョイ 8742-8qPS)2016/10/15(土) 17:37:15.73ID:/HXJq9om0
今あるプログラムのどれだけが16ビットOS環境で動くだろうか
0122デフォルトの名無しさん (ドコグロ MM87-Oa01)2016/10/15(土) 17:51:24.19ID:C50yWB55M
>>115
最小で32bitだったね。
LONG_MINとLONG_MAXで毎回チェックすればいいのかな?
0123デフォルトの名無しさん (ワッチョイ 9f13-TMgs)2016/10/15(土) 18:58:53.03ID:e9kQ2fo60
>>114
決まってない

>>116
移植性を考えたプログラミングなら int のビット数が変わったくらいで挙動が変わってはいけない
0124デフォルトの名無しさん (ワッチョイ 4fe1-Oa01)2016/10/15(土) 19:15:46.94ID:gt76Wp9S0
>>123
そりゃそうだ
Cの仕様はかなり柔軟なので完全な移植性を目指すとコストがかかるし速度も遅くなる
現状だとパソコン用なら1byteは8bit、intは16bitか32bitぐらいは仮定してもいいんじゃない?
0125デフォルトの名無しさん (ワッチョイ 237b-2yk0)2016/10/15(土) 19:32:56.04ID:v/sUl3PG0
ところが幅指定整数は処理系依存のヘッダーで提供されると言うクソ仕様
0126デフォルトの名無しさん (ワッチョイ ef3c-Oa01)2016/10/15(土) 19:50:59.72ID:amISm65B0
>>123
> 移植性を考えたプログラミングなら int のビット数が変わったくらいで挙動が変わってはいけない
で、それがどうかしたのか?
まさかそれをバグって言う訳じゃないだろ
0127デフォルトの名無しさん (ワッチョイ 237b-h+jq)2016/10/15(土) 21:13:36.49ID:OYcQDep80
コマンドライン引数にnull文字(\0)を指定して、
スタックセグメントに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/sUl3PG0
>>127
nul文字を渡せるコマンドインタープリターは存在しないので不可能
0130デフォルトの名無しさん (ワッチョイ 0bc1-xOZv)2016/10/16(日) 00:47:33.52ID:FFXFOptY0
socketなんですけどaddrinfo構造体って名前解決する事が無ければ使わなくても良いですよね?socketを使った通信をする場合はsocketやbindやconnectなどのシステムコールとstruct sockaddr_inへの接続先ホスト情報の格納さえ行えば大丈夫で接続先のホストを名前解決する必要性がありそうな場合はaddrinfo構造体を使うのでしょうか?
0131デフォルトの名無しさん (ワッチョイ d70b-Oa01)2016/10/16(日) 01:25:23.57ID:hq87OQMU0
せやで

ipアドレスが分かってるなら直接sockaddr_inを作ればいい

名前解決する可能性があるならgetaddrinfo()の結果のaddrinfo構造体からsockaddrなどを取り出して使用する
0132デフォルトの名無しさん (アウアウ Sa97-xOZv)2016/10/16(日) 11:07:21.88ID:eyN4rlMja
>>131
有難うございます
0133デフォルトの名無しさん (アウアウ Sa97-xOZv)2016/10/16(日) 11:18:46.00ID:eyN4rlMja
>>131
もうひとつ聞きたいのですが結果的にDNSに名前を問い合わせ対になるIPを取ってくるのはリゾルバだと思うのですが、となるとgetaddrinfo()の役割としては単純にリゾルバに名前を渡すだけの関数ということでよろしいでしょうか?
0134デフォルトの名無しさん (ワッチョイ 9b6c-8qPS)2016/10/16(日) 11:49:46.62ID:8/Jh+qKx0
今時、第2版で出るんだな

Cクイックリファレンス 第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
8bit機が現役だった時代、BASICとは異なり、Cで書けば機種に依存しない
汎用的なプログラムが作成できる、なんて言われたこともあったけど。

Cの規格やコンパイラの仕様が更新され続けた結果、
最新のC規格に準拠して作成したソースは、レガシーなコンパイラだと通らないことが結構ある。
Cのメリットが1つ失われた気がして、少し寂しい。

このCクイックリファレンス第2弾は、どのCをターゲットにしてるんだろう。
0136デフォルトの名無しさん (ワッチョイ d70b-Mjzk)2016/10/16(日) 12:47:46.15ID:hq87OQMU0
>>133
それがメインになるだろうけど
他にもipv4とipv6を全く区別せずに書けるとか
0137デフォルトの名無しさん (ワッチョイ d70b-Mjzk)2016/10/16(日) 12:49:37.33ID:hq87OQMU0
切れたので続き

httpみたいなサービス名からポート番号をセットできるとか
できることは他にもあるよ
0138デフォルトの名無しさん (ワッチョイ 8742-8qPS)2016/10/16(日) 12:53:24.66ID:Tg88YI8G0
v6って今現在どの位普及しているのかな?
実際に使っているシステムってあるのかな
0139デフォルトの名無しさん (ワッチョイ 077b-61yj)2016/10/16(日) 13:15:37.56ID:p5H3vybT0
Windows10を使用しているのであれば
ping localhost
試してみると面白いものが見られるかも
0140デフォルトの名無しさん (ワッチョイ eb42-Pcks)2016/10/16(日) 13:18:56.05ID:Oj4qTYfT0
>>135
そうだったとすると、特定のコンパイラをターゲットにはしない傾向が強まるのでは?
標準準拠で。
どのコンパイラでも動かないか、保証しないが、標準だったら動くと。
0141デフォルトの名無しさん (ワッチョイ bb55-KiBM)2016/10/16(日) 13:56:15.95ID:eTxNhckx0
マジな話、デニス・リッチー氏とオズワルド・ヴェブレン氏はどっちの方が頭が良いの?
0142デフォルトの名無しさん (アウアウ Sa97-xOZv)2016/10/16(日) 14:09:37.47ID:eyN4rlMja
>>137
なるほど。有難うございます
socket通信は使われる変数や構造体が種類豊富で迷いますね...
0143デフォルトの名無しさん (ワッチョイ eb3f-Oa01)2016/10/16(日) 15:15:33.53ID:EV3272f00
>>135
そんなこと言われたことあったか?
BASICで特定の命令使うなってほうが遙かに汎用性あったろ
0144デフォルトの名無しさん (ワッチョイ 8742-8qPS)2016/10/16(日) 17:19:17.26ID:Tg88YI8G0
当時のBASICってPCメーカー毎に命令が拡張されていたりして
汎用性という意味では残念な面もあった
Cコンパイラは一応OS(多分CP/M)上で動かしているので、
OSさえ動く環境なら、他の機種でもそのまま動作可能だったと思う。
0145デフォルトの名無しさん (ワッチョイ 237b-2yk0)2016/10/16(日) 17:46:40.58ID:r3gdRhV60
>>138
AppStoreに登録するには対応必須だよ
0146デフォルトの名無しさん (ワッチョイ 8742-8qPS)2016/10/16(日) 19:14:28.60ID:Tg88YI8G0
>>145
知らなかったw
ありがとう
0147デフォルトの名無しさん (ワッチョイ ef7d-dAUv)2016/10/17(月) 00:05:22.04ID:nm1KFp4F0
>>144
>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:2f4uORQM0
汎用性とは stdio.h しか使わないような、そうゆうプログラムの話だと理解
0149デフォルトの名無しさん (ワッチョイ 236f-EL3R)2016/10/17(月) 07:46:35.66ID:TukeUWYl0
汎用性が高いというのは、別に修正差分がゼロって意味じゃないだろう

UNIXはC言語で書かれていたので移植性が高かったと言われるけど
機種依存が無かったわけじゃなくて、当時一般的なオールアセンブラよりは
移植性が高かったということ
0150デフォルトの名無しさん (ドコグロ MM6f-Oa01)2016/10/17(月) 08:27:08.74ID:RYEF4GXMM
議論するのはいいけど汎用性と移植性の区別ぐらいはつけてくれよ...
0151デフォルトの名無しさん (ワッチョイ 8742-8qPS)2016/10/17(月) 09:07:55.58ID:rdB0GR9t0
汎用性って、
異なる環境でソースなりバイナリなりが修正無しにそのまま動作する
または、そのまま動作する様に書くこと、と理解してる
0152デフォルトの名無しさん (ワッチョイ bbfd-8qPS)2016/10/17(月) 12:02:32.35ID:TECxXdp50
俺ルール、俺解釈乙!!
0153デフォルトの名無しさん (ワッチョイ 6fba-dAUv)2016/10/17(月) 16:46:47.83ID:WCNZhonh0
次の方どうぞ
0154デフォルトの名無しさん (ワッチョイ 0bc1-0NeI)2016/10/17(月) 17:50:47.90ID:0X6foIUK0
socket通信についてです。

クライアント側
・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
>>154
環境はmacOS X sierraです
0156デフォルトの名無しさん (ワッチョイ 77ff-PHo3)2016/10/17(月) 18:06:50.80ID:4hpKEwJL0
server.sin_addr.s_addr = (uint32_t)"127.0.0.1";
を
server.sin_addr.s_addr = inet_addr("127.0.0.1");
にして
server側の中括弧ちゃんと合わせたら動いたけどな
0157デフォルトの名無しさん (ワッチョイ 236f-EL3R)2016/10/17(月) 19:04:12.51ID:TukeUWYl0
>>154
>>・クライアント側でbindする必要はないのか?

必要はない。するのは自由。

>>・1つのソケットで読み書きできるのか?

ソケットは双方向。 read (recv) も write (send) もできる。

>>・サーバー側のソケットAはクライアントからの要求を聞くためで、ソケットBで読み or 書きをするのか?

その通り
0158デフォルトの名無しさん (ワッチョイ 0bc1-xOZv)2016/10/17(月) 22:23:24.46ID:0X6foIUK0
>>157
有難うございます!
0159デフォルトの名無しさん (ワッチョイ 0bc1-xOZv)2016/10/18(火) 07:26:54.81ID:mznmuPbS0
>>156
inet_addrについてまだよく分からなかったので取り敢えず定義されている型に合わせて代入してみたら動かなかったですね。inet_addrで動きました
0160デフォルトの名無しさん (ブーイモ MM4f-KUav)2016/10/18(火) 23:07:58.25ID:MLPW0iClM
a[3]=5;
は
3[a]=5;
と書いてもいいらしいけどなんか有意義な使い方ある?
0161デフォルトの名無しさん (ワッチョイ d741-DI90)2016/10/19(水) 01:36:26.91ID:iujbIW5D0
>>160
シンタックスシュガーだね。
*(a+3)=*(3+a)=5とか?
0162デフォルトの名無しさん (ドコグロ MM6f-Oa01)2016/10/19(水) 07:00:34.15ID:WbU1o71PM
>>160
初心者にどやるぐらいじゃね?
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+0
ネットワークプログラミング相談室 Port30 [転載禁止](c)2ch.net
http://echo.2ch.net/test/read.cgi/tech/1414709836/
0165デフォルトの名無しさん (アウアウ Sa97-xOZv)2016/10/19(水) 20:28:35.98ID:UPd0NLz2a
>>164
スレチでしたか...すみません。
0166デフォルトの名無しさん (ワッチョイ 237b-2yk0)2016/10/19(水) 22:34:35.72ID:cHR82HPh0
いや、ネットワーク固有の問題でもないのでこのままで構わない
0167デフォルトの名無しさん (ワッチョイ 237b-2yk0)2016/10/19(水) 22:50:23.21ID:cHR82HPh0
パス名の最大長はサーバー側のシステムパラメータなので
1-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:B7siVDNB0
>>167
PATH_MAXなんて使うなよ
0169デフォルトの名無しさん (アウアウ Sa21-I3aV)2016/10/20(木) 08:46:21.50ID:JFmVjGEOa
>>167
結局さきにパスのサイズ送った後からパス名送るようにしました。出来ればまとめてヘッダ情報として送りたかったので(なんとなくカッコイイ)、このようにしてみたのですが

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+0
writev
winsockならWSAsend

4byte(int)はhtonlでネットワークバイトオーダーに変換して送るべし
0171デフォルトの名無しさん (ワッチョイ 9f7b-CGyA)2016/10/20(木) 09:15:43.63ID:7bfVuAd+0
あと、構造体のパディングならコンパイラ依存の詰める記述がある
CPUによっては自前でアラインしないとバスエラー起こす可能性があるけど
0172デフォルトの名無しさん (アウアウ Sa21-I3aV)2016/10/20(木) 09:28:40.12ID:JFmVjGEOa
>>170
有難うございます。脳内ライブラリが少なくてすみません...
0173デフォルトの名無しさん (ワッチョイ 8053-9aor)2016/10/20(木) 09:30:21.11ID:ltvdJv0s0
>>169
パス長を数字で送るのであれば%02zuとかで桁数固定にできないかな
あとココで続ける気ならネットワークスレではココに誘導して
0174デフォルトの名無しさん (アウアウ Sa21-YT5Q)2016/10/20(木) 10:15:16.91ID:w5wq1yEma
俺ならデータは全部テキストで長さを表す数字とパス文字列をスペースとかで区切るようにするかな
0175デフォルトの名無しさん (ワッチョイ 1c4f-AIfR)2016/10/20(木) 10:21:59.36ID:t3tIMcAX0
テキストベースなら長さ送らず終端記号使う
多分 \n あたり
0176デフォルトの名無しさん (ドコグロ MM35-YT5Q)2016/10/20(木) 13:19:24.08ID:T4FOXPZSM
telnet やftpやhttpとかの行末はCRLFなのでCRLFにする手もあるかも
telnetでデバッグできるし
0177デフォルトの名無しさん (JP 0H81-IXeA)2016/10/20(木) 13:36:17.28ID:v7f/vbnmH
そういうの含んだファイル名も扱えなきゃな
0178デフォルトの名無しさん (JP 0H72-YT5Q)2016/10/20(木) 13:38:30.82ID:Ckzu+IfIH
改行を含められるファイルシステムってあるの?
0179デフォルトの名無しさん (ワッチョイ 1c4f-AIfR)2016/10/20(木) 13:42:22.52ID:t3tIMcAX0
base64エンコードでテキスト化してもええんやで
0180デフォルトの名無しさん (ワッチョイ fe9f-yj6p)2016/10/20(木) 15:08:09.11ID:pTCG0XjY0
>>178
とりあえずNTFSとext4は含められるのを確認した
たぶん殆どのファイルシステムで可能だろう
0181デフォルトの名無しさん (ササクッテロ Sp89-xWHK)2016/10/21(金) 13:03:09.45ID:pvNanfpdp
C言語の基礎問題ですが
わかる方お願いします!

文字列を入力し、その文字列中の文字がすべて数字なら「数字列である」そうでなければ「数字列でない」と判定、表示するプログラムを標準関数isdisitを使ってつくる

というものです。お願いします!
0182デフォルトの名無しさん (ドコグロ MM35-YT5Q)2016/10/21(金) 13:16:38.67ID:6b929g8wM
宿題スレいけ
0183デフォルトの名無しさん (アウアウ Sa21-I3aV)2016/10/21(金) 14:24:40.36ID:+dFjXUGAa
C勉強中の初心者です。
sprintfって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
>>184
なるほどつまり上記のような格納の仕方をしたとして、バイナリベースで読むようなデータの扱い方をしたら

3バイト読んでabc
1バイト読んで5
3バイト読んでdef

として復元するのですね
有難うございます
0186デフォルトの名無しさん (ワッチョイ 9f7b-CGyA)2016/10/21(金) 14:43:51.86ID:ib3L8+770
> char x[3] = "abc";
> 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+TneK
そうか、文字列の終端には'¥0'が付くんですもんね。
0188デフォルトの名無しさん (ワッチョイ 81c1-SJ9Z)2016/10/22(土) 08:04:39.68ID:LYF8Ip3O0
質問です。
enum 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:LYF8Ip3O0
>>188
command_list = command
の部分がダメで、例えばcommandが “typeA”と入力されたとして
文字列としての”typeA”として扱うのではなく、enumで列挙されているtypeAに変換できないものでしょうか?
0190デフォルトの名無しさん (ドコグロ MMe1-YT5Q)2016/10/22(土) 08:44:30.03ID:vMy7orzVM
文字列比較してマッチしたenum代入
0191デフォルトの名無しさん (ワッチョイ fa13-AIfR)2016/10/22(土) 09:27:21.02ID:an9BR4xS0
>>189
列挙型と文字列を直接比較することはできない
列挙型の列挙子のつづり方の情報は,コンパイル時にはすでに失われる

文字列入力されたものを列挙子に変換するアルゴリズムを自分で書くしかない
0192デフォルトの名無しさん (ワッチョイ 81c1-SJ9Z)2016/10/22(土) 11:59:18.48ID:LYF8Ip3O0
>>191
やっぱり自分で書くしかないのですね。。。
わかりました。有難うございます
0193デフォルトの名無しさん (ワッチョイ f5ee-vevC)2016/10/22(土) 18:53:15.68ID:nuGLd0Th0
enumをやめて"typeA"、"typeB"、"typeC"のconst 文字列を用意しといてstrncmpで比較すれば?
0194デフォルトの名無しさん (アウアウ Sa21-I3aV)2016/10/22(土) 19:48:22.55ID:hqnRWy6Na
>>193
strcmpにしました。
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+c0
副作用完了点までのどこかで加算/減算する
0197デフォルトの名無しさん (ワッチョイ 8017-AIfR)2016/10/23(日) 07:56:46.92ID:zWe7g/vm0
いまさらだが、Visual Studio 2015 に付属しているC標準ライブラリの fgetc() が低速で残念すぎるね。
バッファを意識せずにいられる事がfgetc()の優位性のはずなのに。
0198デフォルトの名無しさん (ブーイモ MMb8-7tdK)2016/10/23(日) 09:00:50.93ID:KxGiTi6wM
今時バッファリングしてないのおそいのは当然
ってバッファ無かったらungetc出来ないじゃん
どういうことだってばよ
0199デフォルトの名無しさん (ワッチョイ 4090-YT5Q)2016/10/23(日) 10:19:18.60ID:B3qNSG5L0
>>196
a++ って、a をインクリメントしたいんだから、a が増えるのを副作用と呼ぶのは変な気がするよね。
0200デフォルトの名無しさん (ワッチョイ 4d17-vevC)2016/10/23(日) 10:41:13.41ID:fzKPp/in0
みなさんはどっち派ですか?
a++;
a += 1;
ちなみに僕は後者です。fof文でもインクリメントは使いません。
0201デフォルトの名無しさん (ワッチョイ 5d4e-A7+C)2016/10/23(日) 10:47:25.38ID:EzsOVTEu0
逆に使っていいのはそれが単独で使われる場合のみじゃね?
0202デフォルトの名無しさん (ワッチョイ 8448-Oc0U)2016/10/23(日) 12:44:35.43ID:dcw2mSdA0
>>200
どっちでもいいけど単独で使うようにしてる
どうしても式の中に入れるときは()でくくる
0203デフォルトの名無しさん (ワッチョイ 8448-Oc0U)2016/10/23(日) 12:47:12.99ID:dcw2mSdA0
>>195
奇数偶数のとこに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
kiloっていうテキストエディタのソースを写経して勉強しようと思ってるのですが、ポインタとか基礎的な知識のみでは厳しいでしょうか?

インクルードしてるライブラリなど、用途とか使い方とか分からない状態で、学習する順番が違うかなと思っていまして。
0206デフォルトの名無しさん (ワッチョイ b1a1-YT5Q)2016/10/23(日) 15:25:10.38ID:52pdDc8O0
必要なのはそれらを困った時に調べるツールや能力で
細々した関数の仕様などは使いながら覚えていくのが普通だと思います
0207デフォルトの名無しさん (ワッチョイ 1942-14kE)2016/10/23(日) 15:32:01.42ID:yPpSETWV0
C言語の勉強にはなるとおもうが、アプリ開発だとあまり意味なさげ。




世の中の開発者が最終的に自分の手で実装してみたいソフトウェアの一つにテキストエディタが挙げられるかもしれません。
本日紹介する「Kilo」はそんな夢に向かって踏み出すためのきっかけになるかもしれないコンパクトなテキストエディタの実装です。

Kiroはライブラリに依存せず(cursesでさえ)、標準のVT100エスケープシーケンスだけを使って作られたシンプルなテキストエディタで、
唯一のソースコードkilo.cの行数は1000行以下というコンパクトさを誇っています。
http://www.softantenna.com/wp/review/kilo/
0208デフォルトの名無しさん (ワッチョイ 1c42-9S67)2016/10/23(日) 15:43:49.36ID:FLPjJgcJ0
>標準のVT100エスケープシーケンスだけを使って

Termcap使って欲しいところ
0209デフォルトの名無しさん (ワッチョイ eddc-Jkuj)2016/10/23(日) 15:49:48.78ID:uIiMGu9Q0
UTF-8の漢字1文字あたり3byteと
表示する際の「ASCII文字の2倍の幅」の
ずれがモロに見えてる感じね。

Cでソース1000行ならとりあえず読んでみるのも良いでしょ。
全然ダメだったわ、という感想になっても大した無駄じゃない。

ところでソースはどこかな。
0210デフォルトの名無しさん (ワッチョイ b25b-cOcu)2016/10/23(日) 16:22:07.64ID:vn0/lGNH0
githubのリポジトリはここです。
https://github.com/antirez/kilo.git

VT100エスケープシーケンスだのTermcapだのさっぱり訳わかめです。

やりはじめると人生終っちゃいそうなぐらい
勉強しなきゃいけないことありそうだなー
0211デフォルトの名無しさん (ワッチョイ fa13-AIfR)2016/10/23(日) 21:06:48.10ID:uyu460VL0
>>197
fgetc() はバッファ前提だよ
0212デフォルトの名無しさん (ドコグロ MM9c-YT5Q)2016/10/23(日) 21:29:53.07ID:Szazv7FsM
>>208
特定のライブラリに依存したくないんでしょ
だからと言って VT100 に依存するのがいいかどうかは微妙だけど
0213デフォルトの名無しさん (ワッチョイ 96c0-8SCy)2016/10/23(日) 21:32:54.28ID:GtfQU5YV0
0幅文字の事も思い出してあげて
0214>>195 (アウアウ Sa21-9S67)2016/10/23(日) 21:41:27.39ID:oFMeEqcGa
副作用完了点という言葉を初めて聞いたのでググって調べたら理解できました。
インクリメントやデクリメントはいつされるか、というのは規定されていないのですね。
ただ次の副作用完了点までの間のどこかで実行されることは保証されている、と。
ありがとうございました。
0215デフォルトの名無しさん (ワッチョイ 8017-AIfR)2016/10/25(火) 00:04:39.07ID:9BlPg1gT0
>>211
くわしく
0216デフォルトの名無しさん (ワッチョイ 81c1-I3aV)2016/10/25(火) 01:25:17.56ID:W0rrkoRY0
fwrite freadはなぜxバイトをy個書き込むのような引数の取り方になっているんでしょうか?
単純に書き込むバイト数を書くのようなやり方はだめなんですか?
0217デフォルトの名無しさん (ワッチョイ 177b-b1pf)2016/10/25(火) 01:40:52.79ID:I8hKAN8S0
昔は配列をそのままファイル出力する事が多くて、そういうインターフェースの方が使いやすいと思われてたんじゃね?知らんけど
0218デフォルトの名無しさん (ワッチョイ 96c0-8SCy)2016/10/25(火) 05:19:58.93ID:vLkI5v6U0
レコードという概念
0219デフォルトの名無しさん (ワッチョイ fa13-NERT)2016/10/25(火) 07:03:14.79ID:g6Mxg6+u0
>>215
int fputc(int c, FILE *fp);
だろう?
第二引数にバッファが設定されているじゃないか?
昔は read/write に比べて高水準といったものだよ
0220デフォルトの名無しさん (ワッチョイ fa13-NERT)2016/10/25(火) 07:04:43.52ID:g6Mxg6+u0
>>215
おっと
int fgetc(FILE *fp);
だったね,でもこれも入力バッファを指定しているだろう?
0221デフォルトの名無しさん (ワッチョイ 400b-aV7M)2016/10/25(火) 09:05:43.60ID:rsJoV7Wk0
FILEはsetvbufでバッファリング無効化できるし
したらfgetcは使えないわけでもないってことを言いたいんじゃない?
0222デフォルトの名無しさん (アウアウ Sa21-I3aV)2016/10/26(水) 14:41:19.41ID:yv2UqaQqa
ビット演算についてです。
x = 0x1234;
この値から0x3という値を取り出したいとすれば
x = (0x1234 & 0xf0) >> 4;

とし、andして0x0030 のちに4ビットずらし
0x0003にするのが一般的でしょうか?
0223デフォルトの名無しさん (ワッチョイ 5d4e-A7+C)2016/10/26(水) 15:06:35.25ID:YDlOSXgx0
ビット演算て2進数でやるんだけど、
その例えであってるの?
0224デフォルトの名無しさん (ワッチョイ 88ff-kL33)2016/10/26(水) 15:39:53.85ID:pd0Eh94t0
好きなようにしたらいいけど、 0x00f0 のが見やすいかも
右シフトしてから下の桁だけ取り出すほうがやりやすい気が
指定した桁が取れるようにするからね普通
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
16進数での桁抜き出しなら他にもやりようはありそうだけど
ビットシフトとマスクのほうがはやいだろうな

※ sprintf して文字列操作で抜き出し
0227デフォルトの名無しさん (アウアウ Sa21-I3aV)2016/10/26(水) 21:22:41.69ID:TYkve0sna
なるほど、みなさん回答有難うございます
0228デフォルトの名無しさん (ワッチョイ fd7b-AhK1)2016/10/26(水) 22:37:05.49ID:0iglgEMo0
>>225
前者は汎整数拡張後の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
>>230
使うよ。

CPUに接続された機器を制御する時に、ポインタ、アドレス、デリファレンスの関係を知らないとちょっと辛いかも。
まあ、誰かがマクロなり関数なり用意してくれれば、直接意識する事はない場合もあるけど。
0232デフォルトの名無しさん (ワッチョイ 9ec9-qUpq)2016/10/26(水) 23:45:51.51ID:6txvpNVn0
>>231
230です。ありがとうございます。
0233デフォルトの名無しさん (ワッチョイ 966c-AIfR)2016/10/26(水) 23:46:58.61ID:4EKbatdM0
>>230
そもそもポートアクセスがポインタだから。
ポートを定義しているファイルを読み込んでるからP1DDRとか使えるけど
裏では
#defien P1DDR (*(volataile unsigned char *)0xfffc0)
などが定義されている
0234デフォルトの名無しさん (ワッチョイ 9ec9-qUpq)2016/10/26(水) 23:58:03.11ID:6txvpNVn0
>>233
230です。ありがとうございます。

とりあえずヘッダとかの中を見て勉強します。
0235デフォルトの名無しさん (ワッチョイ 235b-vqh8)2016/10/27(木) 02:12:51.50ID:P5MR+ZQ70
なんでも良いから8ビットのマイコンでLCDでも動かせばポインタの重要性が分かるはず
0236デフォルトの名無しさん (ドコグロ MMff-Jz20)2016/10/27(木) 08:19:45.09ID:uoSnPm98M
>>233
IO 命令でアクセスするプロセッサもあるんだが...
0237デフォルトの名無しさん (ワッチョイ e3fd-corf)2016/10/27(木) 13:57:30.32ID:tSnYMHpZ0
常識的基準からどマイナーな仕様まで全て網羅して答えないと突っ込まれるスレ。





但しイケメン(ry
0238デフォルトの名無しさん (オッペケ Sr7f-Jz20)2016/10/27(木) 18:12:36.85ID:lZzTR8O/r
>>236
IOにもアドレス存在するから、ポインターは必要。
0239デフォルトの名無しさん (ドコグロ MM7f-Jz20)2016/10/27(木) 18:47:10.57ID:zlkIZgN3M
>>238
なんでアドレスがあるとポインタが必要?
0240デフォルトの名無しさん (ドコグロ MMff-Jz20)2016/10/27(木) 19:00:15.89ID:uoSnPm98M
>>238
たいていの環境で I/O アドレスって数値で指定するけどポインタで指定する環境なんてあるのか?
0241デフォルトの名無しさん (ワッチョイ 6f9f-FZcf)2016/10/27(木) 20:17:15.94ID:DYIrgAE/0
C言語でアドレスを扱う唯一の方法がポインタ
0242デフォルトの名無しさん (ワッチョイ 0fea-WjTj)2016/10/27(木) 20:22:32.63ID:9KD5A9Mr0
アセンブラ視点だとあほらしい主張だな。
0243デフォルトの名無しさん (オッペケ Sr7f-Jz20)2016/10/27(木) 21:09:53.02ID:lZzTR8O/r
>>240
レジスタにアドレス値入れないと、アクセス出来ないだろ?
0244デフォルトの名無しさん (ワッチョイ 8790-Jz20)2016/10/27(木) 21:18:10.78ID:SdMxGcnQ0
writeio() みたいな関数やマクロが容易されていればポインタ要らないと思っても不思議じゃないけどね。
0245デフォルトの名無しさん (ワッチョイ d742-WjTj)2016/10/27(木) 21:36:54.34ID:Kh1gfqji0
まさか、ポートアドレスだからポインタだと?
0246デフォルトの名無しさん (オッペケ Sr7f-Jz20)2016/10/27(木) 21:45:48.49ID:lZzTR8O/r
>>245
Cでは、ポインタで表現するしかない。
0247デフォルトの名無しさん (ワッチョイ 0fea-WjTj)2016/10/27(木) 21:50:53.02ID:9KD5A9Mr0
インライン使えよ。
0248デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)2016/10/27(木) 22:10:14.37ID:+V+XGj2N0
ttp://www.eleki-jack.com/h8/2009/09/h8-21h8c.html
>はじめてのH8マイコン 基礎編

PCだとインラインかハード用のライブラリ使うだろうな。
0249デフォルトの名無しさん (ワッチョイ d742-WjTj)2016/10/27(木) 22:19:49.28ID:Kh1gfqji0
こういう主張する人って初めてだ
0250デフォルトの名無しさん (ワッチョイ d742-WjTj)2016/10/27(木) 22:23:31.75ID:Kh1gfqji0
ポートへのI/Oに対応するCPU命令と、メモリアクセスのCPU命令は別の物でしょ?
C言語上同じポインタで記述出来たとして、コンパイラはそれをどうやって区別するの?
0251デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)2016/10/27(木) 22:56:17.91ID:+V+XGj2N0
メモリマップドI/OとポートマップドI/Oの2種類がある。
アセンブラの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:ABDKK6BxK
>>251
PC-98に詳しい人を発見!!!
G-VRAMのメモリーモデルについて教えて下さい!!!
0253デフォルトの名無しさん (ワッチョイ 8790-Jz20)2016/10/27(木) 23:07:54.21ID:SdMxGcnQ0
>>236
x86 だって、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
wikipedia
>「メモリマップド」の表記も一般的だが、「メモリマップト」と「ト」に濁音を付けない表記も用いられている。後者の方が英語の原音(/m?m[?]rimapt/)に近い。

それはともかく
>G-VRAMのメモリーモデルについて教えて下さい!!!
日高の「マシン語ゲームグラフィックス」とEICの「PC-9801 プログラマーズBible」に書かれてることしか知らんがね。
98のプレーン方式グラフィックの解説が希望なの?
0256片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)2016/10/27(木) 23:30:02.56ID:ABDKK6BxK
>>255
現在、VeySicK ProというBASIC環境を作っていて、PC-98のメモリーモデルを真似をしないといけないのです。
98のグラフィックはカラープレーン方式でしたよね。アドレスなどを教えて下さい。
0257デフォルトの名無しさん (ガラプー KK7f-cpoA)2016/10/27(木) 23:34:50.74ID:ABDKK6BxK
あげ
0258デフォルトの名無しさん (ガラプー KK7f-dzl6)2016/10/27(木) 23:40:12.72ID:Qd6HxA5dK
PC-98って何?パソコン?
0259デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)2016/10/27(木) 23:42:01.31ID:+V+XGj2N0
アドレス(セグメント)なら
A800H B面
B000H R面
B800H G面
E000H I面
0260片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)2016/10/27(木) 23:42:08.58ID:ABDKK6BxK
>>258
NECの旧式のパソコン。
0261片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)2016/10/27(木) 23:44:50.11ID:ABDKK6BxK
>>259
アドレスA800Hが20H、他がゼロのとき、青い点はどこに現れる?
0262デフォルトの名無しさん (ワッチョイ fb7b-Jz20)2016/10/27(木) 23:56:18.48ID:4OB59ii+0
昔のPC板に移動してくれ
0263デフォルトの名無しさん (ワッチョイ 0fd1-WjTj)2016/10/27(木) 23:59:00.99ID:+V+XGj2N0
20H -> 0010 0000
よって座標 X=2,Y=0 に描画。

ここでこれ以上語るのはスレチだな。
98スレの方がよくね?
0264片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-cpoA)2016/10/28(金) 00:02:37.90ID:RWm1DZ2kK
充分な情報が得られました。有難う御座います。
0265デフォルトの名無しさん (ワッチョイ 837b-LwMx)2016/10/28(金) 00:31:23.36ID:uUyTmzcE0
あるスマホアプリ作者(東方系、ゆ虐)  ゆ○○○○○きで、

2ちゃんねるで煽られてる!?荒らしだ!ゆるさない!
更新しないぞ!とか発言している人がいるのだが・・・・・・

またその作者はユーザーの批判等やりとりしたメールをGoogledriveで公開、
「俺のソフトを買い取れ!おまえに批判されて評判がおちた!」
「広告収入(アプリの)で結構な額だが支払え!」
「それなりに金がかかってる(開発するのに)!」

「Twitterで俺を2ちゃんで批判することをやめるように呼びかけろ」
等の発言をしている
又、Googleストアの説明欄を利用して、
「2ちゃんでの荒らしがいるかぎりソフト更新しない!」と言ってみたり、
「俺はソフト作りやりたいんだ」といってみたり、発言が二転三転



どう思うだろうか?
0266デフォルトの名無しさん (スプッッ Sdff-Jz20)2016/10/28(金) 08:05:27.65ID:ly8ns8Xnd
すれ違い死ねって思う
0267デフォルトの名無しさん (ワッチョイ 8717-0DI1)2016/10/28(金) 10:13:57.21ID:+sfiJbiA0
「バッファを意識」することがなぜか「バッファ前提」に脳内変換されて「FILE* fpだからバッファだろ」となった流れ。
こういう人は日本語の理解能力低いから業務連絡さえできなさそう。仕事振れない。ごめんね。
0268デフォルトの名無しさん (ワッチョイ d742-WjTj)2016/10/28(金) 10:39:06.40ID:jzdvITvL0
仕事の話持ち出す奴に限って、実際には仕事してなかったりするからな

#言語の話しているのに、何で仕事の話したがるか、理解できないわ
0269デフォルトの名無しさん (ワッチョイ 8717-0DI1)2016/10/28(金) 11:41:15.55ID:+sfiJbiA0
正直、話題がサービスを使う側の視点なのかサービスを作る側の視点なのかを把握して説明することさえできない人と会話するのは疲れるよ
0270デフォルトの名無しさん (ドコグロ MMff-Jz20)2016/10/28(金) 11:44:43.06ID:oL18zSzIM
>>268
C# はスレチ
0271デフォルトの名無しさん (ワッチョイ d3a1-vnDO)2016/10/28(金) 11:46:33.49ID:MgXI7th20
# は、Perl, Rubyのコメント
0272デフォルトの名無しさん (ワッチョイ d74f-0DI1)2016/10/28(金) 11:48:25.13ID:9y3ADLwd0
その言語ができる前から # をコメント扱いしてるの見るし
始祖は何だろう
0273デフォルトの名無しさん (ワッチョイ 3b00-xrkA)2016/10/28(金) 11:57:51.72ID:RDyL+5F70
Bourne shellかね? 
0274デフォルトの名無しさん (JP 0Hff-0DI1)2016/10/28(金) 14:16:14.92ID:kwVH1O50H
C言語で、簡単なゲーム作りたいんだけど
誰か、わかり易いサイト知りませんか?
ソースコードが全て載っていて説明するではなく
少しずつ説明してるとこ・・・
0275デフォルトの名無しさん (アウアウ Sa7f-hMcj)2016/10/28(金) 16:40:03.19ID:vVnaUV4Ja
ゲームアルゴリズムの解説サイトとか?
GUIでやりたいならライブラリの知識が必要。
0276デフォルトの名無しさん (ドコグロ MMff-Jz20)2016/10/28(金) 17:30:44.77ID:5zLfv7L+M
>>271
Perl も Ruby もスレチ
0277デフォルトの名無しさん (ブーイモ MM7f-+V+y)2016/10/28(金) 20:21:49.02ID:xvHmsxkzM
>>269
ungetcがあるんだからバッファ意識前提だろ。あ?
0278デフォルトの名無しさん (ブーイモ MM7f-+V+y)2016/10/28(金) 20:33:31.87ID:xvHmsxkzM
>>267
バッファを意識しないことがバッファを使わない=早いに変換される
まずお前の頭の悪さを意識しろや
0279デフォルトの名無しさん (ワッチョイ ef3c-Jz20)2016/10/28(金) 22:30:07.53ID:9iz4x+2p0
>>273
> 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
>>277,78
お前、誰の目線で話をしているかわからない真正のアホだったか。
ライブラリを使う側と作る側の話を混同している時点で、職場で使えない人扱いされてたんだろうな、ってのがよくわかるわ。
ライブラリ利用者がバッファ意識するなら自前でバッファを用意してfread()なりfgets()を使う。

誰視点の説明なのかわからないようでは、かなりのダメな人間。
お前はわんわりと仕事外された経験あるだろうが、お前がそのことに気づいてないだけでな。
0281デフォルトの名無しさん (ワッチョイ 6f16-p8ij)2016/10/29(土) 11:33:57.48ID:BbhRVaVI0
下記の(void)の部分て何を意味するんでしょうか?

void (*vectors[])(void) = {start, NULL};
0282デフォルトの名無しさん (ワッチョイ df5a-0DI1)2016/10/29(土) 11:47:55.47ID:F88la5KY0
>>281
引数。vectors配列に格納されている関数への。
関数ポインタだよ。
配列名からして割込みベクタの定義だな。
0283デフォルトの名無しさん (ワッチョイ 6f16-p8ij)2016/10/29(土) 12:07:16.84ID:BbhRVaVI0
>>282 ありがとう。理解した。
0284デフォルトの名無しさん (アウアウカー Sa7f-eFA4)2016/10/29(土) 15:02:05.15ID:UZGSqbvua
C言語とJavaの実行速度はどのくらい違うの?
0285デフォルトの名無しさん (ワッチョイ 53eb-Jz20)2016/10/29(土) 16:45:25.26ID:+mL3RgIn0
42倍くらいじゃね?
0286デフォルトの名無しさん (ガラプー KK7f-dzl6)2016/10/29(土) 18:41:28.59ID:ptff9bVJK
いや100倍くらいだろw
0287デフォルトの名無しさん (ブーイモ MMff-+V+y)2016/10/29(土) 19:47:48.53ID:cHN5GLp6M
>>280
答えられる所だけ答える詭弁の典型やね
お前の頭の悪さと卑劣さが伝わってくるわ
ところで頭悪くて表層しか理解できないようだけどお前ってポインタ使えるの?
0288デフォルトの名無しさん (ワッチョイ 3f13-0DI1)2016/10/29(土) 22:02:48.63ID:RGDx1OIt0
>>246
IO空間をアドレス空間で見えるようにしない限り,IO空間はCではポインタでは表現できないのが普通では?

>>237
x86 という超メジャーを網羅できないようでは駄目だね
0289デフォルトの名無しさん (ワッチョイ 93bd-d7wh)2016/10/29(土) 23:10:00.85ID:SOF+NvUl0
C/C++ の書籍って「C/C++で○○を作る」ってのが amazon でも皆無だから
とっかかりづらい。
フレームワーク的な概念はないのか?この言語は
0290デフォルトの名無しさん (ワッチョイ ef3c-0DI1)2016/10/29(土) 23:23:27.06ID:I2XN8o6s0
フレームワークを作る為の基礎をたたき上げる言語
0291デフォルトの名無しさん (ワッチョイ 93bd-d7wh)2016/10/29(土) 23:52:55.63ID:SOF+NvUl0
>>290
では、フレームワークってのはさ、何らかのフレームワークのプロジェクト
に抜擢されて初めて言語の使い道があるってこと?
フレームワーク自体ってさ、一人で作れるほど素朴なもんでもないし、
皆が使ってくれなきゃ意味ないわけじゃん?
個人で完結したものを作りたい場合には向いてないの?
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
>>293
俺は参照カウント方式のフレームワーク自分で作ったよ。
プラットフォームのAPIにまったく依存しない開発環境だぜ。
Cの存在意義はそこにある。
0295デフォルトの名無しさん (ワッチョイ 93bd-d7wh)2016/10/30(日) 00:17:00.39ID:r3eRdHaA0
>>294
なるほど、参照カウント方式というワードに俺の知らない何かが
ありそうだな。ありがとう、ちょっと調べてみる。
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
>>295
おいwはやまるなw
0298デフォルトの名無しさん (ワッチョイ fb6f-iZh3)2016/10/30(日) 00:27:10.21ID:zJ52/Kzt0
ちょっとしたWindowsアプリならwin32apiで作るのが楽だし、Cで作るよ
0299スッキリ厨 (ワッチョイ d77b-ythx)2016/10/30(日) 00:31:18.68ID:rQxX2zI20
Ruby, Pythonから来たのなら、「スッキリわかる Java入門 第2版、2014」を読んで、
オブジェクト指向を学ぶのが速い

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
IoTで、組み込み等のメモリの制限が
きつい部分はC言語やアセンブラでは?
新規開発でまっさら、ライブラリ無し、コンパイラがかろうじてあるようなCPU使う時等。
0301デフォルトの名無しさん (ワッチョイ 0f4e-Jz20)2016/10/30(日) 08:57:32.81ID:9xXSxIG40
>>300
組み込みはハードを直接制御する部分大きいからな。
Java とかの様にハード依存部分を隠蔽する事を目指す言語とは、目指す方向が違う。
0302デフォルトの名無しさん (ワッチョイ 93bd-d7wh)2016/10/30(日) 17:38:28.93ID:r3eRdHaA0
ラズパイはPythonとかJavaScriptで書くんだろ?
0303デフォルトの名無しさん (ワッチョイ df5a-0DI1)2016/10/30(日) 21:37:09.05ID:z1fG1juu0
>>302
Cでも書けるぞ
0304デフォルトの名無しさん (ワッチョイ 870b-Jz20)2016/10/30(日) 22:03:09.85ID:C5ai4WmZ0
ラズパイは組み込み向けではないだろ
もとから学習用のコンピューターだ
実際の製品に使われるものじゃない
0305デフォルトの名無しさん (ワッチョイ 6f17-WjTj)2016/10/31(月) 00:35:13.10ID:9faQJIhV0
フレームワークのAPIを叩くことしかできん奴をPGと呼んではいけない
0306デフォルトの名無しさん (ワッチョイ 93bd-d7wh)2016/10/31(月) 16:47:22.58ID:Uhsyfejv0
>>305
自分一人でフレームワークを軽視するのは構わないが勝手な
価値観を押し付けるな気色悪。。
一生一人でハードウェアレベル、アセンブリレベルのコードだけを
シコシコいじってろ。
0307デフォルトの名無しさん (ワッチョイ d77b-QpRP)2016/10/31(月) 17:46:53.37ID:R+gJxrwJ0
どっちもドキュメント読めれば普通は出来る
0308デフォルトの名無しさん (ブーイモ MM7f-+V+y)2016/10/31(月) 21:00:45.19ID:2ka7AnRNM
コンパイル時にエンディアン判別する方法ある?
unix系にはendian.hがあるらしいが…
0309デフォルトの名無しさん (ワッチョイ ef3c-0DI1)2016/10/31(月) 21:54:52.49ID:aOoddU/U0
実行時なら想像できるけど、プリプロセッサの命令セットだで判別できるんかなぁ?
0310デフォルトの名無しさん (ガラプー KK7f-cpoA)2016/10/31(月) 21:57:48.20ID:taQA+O7QK
#ifdef
0311デフォルトの名無しさん (ワッチョイ ef3c-0DI1)2016/10/31(月) 22:07:14.47ID:aOoddU/U0
>>310
<式> に何を与えたらいいの?

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
>>308
クロスコンパイラっつーものがあるからどうみても無理だろ
コンパイラと実行環境のエンディアンが同一と仮定していいならエンディアンを判定するプログラム書いて結果によってマクロを設定して make 呼ぶとかかな
0313デフォルトの名無しさん (ワッチョイ 6f9f-FZcf)2016/10/31(月) 22:39:48.99ID:cU6Ijqgk0
> #ifdef BIENDIAN

興味深い
0314デフォルトの名無しさん (ブーイモ MM7f-+V+y)2016/10/31(月) 22:41:22.05ID:2ka7AnRNM
やっぱ無理か
0315デフォルトの名無しさん (ガラプー KK7f-cpoA)2016/10/31(月) 22:45:49.09ID:taQA+O7QK
cmake使えよ
0316デフォルトの名無しさん (ワッチョイ ef3c-0DI1)2016/10/31(月) 22:52:20.42ID:aOoddU/U0
>>313
あ"ー なんで間違ったんだろ
0317デフォルトの名無しさん (ワッチョイ d77b-QpRP)2016/10/31(月) 22:52:58.70ID:R+gJxrwJ0
StackOverFlowにあった
#define I_AM_LITTLE (((union { unsigned x; unsigned char c; }){1}).c)
0318デフォルトの名無しさん (ワッチョイ ef3c-0DI1)2016/10/31(月) 22:59:03.49ID:aOoddU/U0
それ マクロの形してるけどプリプロセッサで分岐できずに 実行時判定なんじゃ
0319デフォルトの名無しさん (ワッチョイ d77b-QpRP)2016/10/31(月) 23:12:58.33ID:R+gJxrwJ0
if (I_AM_LITTLE)
hoge();
else
hage();
とかやればオプティマイザが選択してくれると思う
0320デフォルトの名無しさん (ワッチョイ 45c1-JPBa)2016/11/03(木) 00:05:48.84ID:cI9aS8Tt0
下記のコードについて質問なのですが

int 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:p3Ch2bU20
可変長の引数は型が決めれないからサイズは4バイトとってるんじゃない?
0322デフォルトの名無しさん (ワッチョイ 3ec0-GpcS)2016/11/03(木) 01:04:32.68ID:yjP+XKqq0
charのffは-1
intの-1はffffffff
0323デフォルトの名無しさん (ワッチョイ bc7b-ZnKD)2016/11/03(木) 01:21:42.24ID:TDi/4+oI0
b = 0100_1101 (0x4d)

例えば、上なら、どう表示される?
0324デフォルトの名無しさん (ワッチョイ 517b-KXPE)2016/11/03(木) 02:13:51.95ID:ok7c548h0
変数そのもののサイズはchar型で1バイトであっても、式の中で評価するときは汎整数拡張でプロモーションされる
char型はint型に格上げされる
printf文はどちらも評価結果(int型に格上げされた結果)の内容を変換指定子に従って出力しているだけ
0325デフォルトの名無しさん (ワッチョイ 45c1-t5SF)2016/11/03(木) 02:30:09.83ID:cI9aS8Tt0
>>324
汎整数拡張でプロモーションとはキャストとはまた別ですか?別だとしたら違いはなんでしょう?
0326デフォルトの名無しさん (ワッチョイ 45c1-t5SF)2016/11/03(木) 02:32:15.15ID:cI9aS8Tt0
>>324
wiki見て納得しました。
みなさん回答有難うございます
0327デフォルトの名無しさん (ササクッテロラ Spbd-m5qj)2016/11/03(木) 13:08:36.53ID:H0IjIqmWp
>>315
cmakeだろうがgmakeだろうがnmakeだろうが無理だろ
0328デフォルトの名無しさん (ワッチョイ bc7b-6WlR)2016/11/03(木) 13:40:07.82ID:h7OLIGrQ0
>>327
エンディアン判定プログラムをコンパイル、実行すれば可能
0329デフォルトの名無しさん (ワッチョイ bc4f-8n5s)2016/11/03(木) 13:45:30.18ID:U0puS1NV0
コンパイルする環境が実行環境と同じとき限定やね
0330デフォルトの名無しさん (ワッチョイ e63c-DGmA)2016/11/03(木) 15:22:13.01ID:NjbREez30
>>327
知らないのに無理とか言うなよ
TestBigEndian でググれ
0331デフォルトの名無しさん (ワッチョイ e63c-DGmA)2016/11/03(木) 15:23:31.15ID:NjbREez30
>>329
すでに指摘されとる ⇒ >>312
0332デフォルトの名無しさん (アウアウオー Sade-2euV)2016/11/03(木) 16:13:16.87ID:w2mbel+ma
#include <stdio.h>s

int main() {
//変数fooとbarを文字列結合して出力してください。
char foo[7] =
0333デフォルトの名無しさん (ブーイモ MM28-Qsvr)2016/11/03(木) 20:09:39.23ID:EO+3S9G6M
barどこだよ
0334デフォルトの名無しさん (ガラプー KKeb-Pg6j)2016/11/04(金) 08:50:35.45ID:JWDjY2VBK
いないいないbar
0335デフォルトの名無しさん (ドコグロ MMde-DGmA)2016/11/04(金) 09:08:14.23ID:I3L1XoDqM
string.h 無しかよ。
0336デフォルトの名無しさん (アウアウカー Sab5-t5SF)2016/11/04(金) 13:29:49.63ID:hSv3Op9Da
strcat
0337デフォルトの名無しさん (ワッチョイ 5ed1-Xqtn)2016/11/04(金) 18:37:09.11ID:9t4eUgUn0
void *bar;
0338デフォルトの名無しさん (ワッチョイ 7213-8n5s)2016/11/04(金) 20:07:20.16ID:CUjt06/h0
>>308
エンディアンに依存しないコードを書くのが吉
0339デフォルトの名無しさん (ワッチョイ 5ed1-Xqtn)2016/11/04(金) 20:25:38.18ID:9t4eUgUn0
某ゲーム機のセーブデータはビッグ/リトル入り乱れた内容だった。
0340デフォルトの名無しさん (ワッチョイ d39b-DGmA)2016/11/05(土) 02:35:41.68ID:azfvKCq90
UTF-8のテキストにBOM付けた方がトラブルが少ないのがいまだに納得いかん
0341デフォルトの名無しさん (ワッチョイ 3ec0-GpcS)2016/11/05(土) 04:23:04.56ID:hXk57f910
日本語がないとUTF8かSJISか判断出来ないから

どっちでもいいだろって突っ込みはあるが、その後に日本語が入った時にどっちにしていいか分からない

それぐらいしか思い浮かばない
0342デフォルトの名無しさん (ワッチョイ 137b-fIL9)2016/11/05(土) 06:31:46.86ID:bv3OHyVZ0
SJISなんぞ捨て去ればいい
0343デフォルトの名無しさん (ワッチョイ e63c-DGmA)2016/11/05(土) 07:11:49.37ID:6wNzhQFs0
>>339
解析されにくくするためにわざとやってるのかもね
0344デフォルトの名無しさん (ワッチョイ 714e-dKGq)2016/11/05(土) 08:07:44.52ID:OwUAtwzN0
プログラム内では全てUTF-8であるという前提なら、
charで扱っていいよね?
0345デフォルトの名無しさん (ドコグロ MMde-DGmA)2016/11/05(土) 09:10:58.33ID:ylYyr/A+M
ただし、char は、6byteな。
0346デフォルトの名無しさん (ブーイモ MM28-Qsvr)2016/11/05(土) 10:09:58.12ID:YLOhhbbrM
winがutf16なのが困る
おかげでGNUツールが化ける
後発なんだからそろえろよなあ
0347デフォルトの名無しさん (ワッチョイ 137b-fIL9)2016/11/05(土) 10:14:59.09ID:bv3OHyVZ0
>>345
は?
>>346
Windows(のUCS-2)が先だろ。
UTF-16はそのままでも(どうでも)いいが、Shift-JISはさっさと捨てて欲しい
0348デフォルトの名無しさん (ワッチョイ 714e-dKGq)2016/11/05(土) 10:58:53.41ID:OwUAtwzN0
>>345
UTF-8なら文字のバイト数の判定は文字列のどの位置でもできるし、
5,6バイト文字は実質廃止なので最大でも4バイト。
0349デフォルトの名無しさん (ワッチョイ 714e-dKGq)2016/11/05(土) 10:59:56.07ID:OwUAtwzN0
なので俺は全部char型で扱うことにしてるんだが、問題あるだろうか。
0350デフォルトの名無しさん (ワッチョイ 717b-U2b2)2016/11/05(土) 14:17:28.41ID:O9i4rwQI0
>>341
utf8もsjisも英数部分は同じなわけでどちらもasciiを内包している
よって日本語環境でテキストを扱うときはたとえ英数のみのファイルだろうと
文字エンコードのデフォをutf8またはsjisとするのだよ
asciiはただのサブセットにすぎないのだから
0351デフォルトの名無しさん (ワッチョイ 1342-Xqtn)2016/11/05(土) 14:29:23.15ID:TjERyIHd0
>>347
全世界共通のエンコードにする方が良いよね
0352デフォルトの名無しさん (ワッチョイ d39b-DGmA)2016/11/05(土) 18:22:48.68ID:azfvKCq90
あれ、BOMの意味通じてないのかな?
なんでマジレスされてんだろ
0353デフォルトの名無しさん (ワッチョイ c69f-/hNr)2016/11/05(土) 20:04:07.46ID:r4TaQ56a0
BOMなしUTF-8しか使わないけどトラブったこと無い
0354デフォルトの名無しさん (ワッチョイ 7b5b-DGmA)2016/11/05(土) 20:12:34.28ID:kLv6FcI90
BOMB
0355デフォルトの名無しさん (ワッチョイ 1342-Xqtn)2016/11/05(土) 20:15:19.98ID:TjERyIHd0
Webで使う場合はBOMついているとまずいんだったよね
0356デフォルトの名無しさん (ワッチョイ e63c-DGmA)2016/11/05(土) 20:55:27.32ID:6wNzhQFs0
勝手に BOM をつけちゃうソフトもどうかと思うが BOM がついてるのを頑なに認めないソフトもどうかと思うわ
0357デフォルトの名無しさん (ワッチョイ 7b6f-NiuY)2016/11/05(土) 21:32:18.85ID:tm4T+wFZ0
Unix文化圏ではBOMつきUTF-8を絶対に広めたくないから
潰すためにあえてサポートしない
MSが折れるのを待ってるんだよ
0358デフォルトの名無しさん (ワッチョイ b094-whJA)2016/11/05(土) 22:00:13.59ID:AA4Sk0Wd0
>>308
int hoge=1;
if(*(char *)(&hoge))
{
}
else
{
}

最適化すれば判定も通らない処理も除かれる
0359デフォルトの名無しさん (ワッチョイ 3ec0-GpcS)2016/11/05(土) 23:08:59.19ID:hXk57f910
>>350
だからそのファイルに後から日本語格納したらどっちにしたらいいかってこと書いてんだが
0360デフォルトの名無しさん (スプッッ Sd78-DGmA)2016/11/05(土) 23:11:31.77ID:A6/yGRShd
>>359
分かってない奴に説明するほど無駄なことは無いよ
0361デフォルトの名無しさん (ワッチョイ 1342-Xqtn)2016/11/05(土) 23:12:06.56ID:TjERyIHd0
>>358
それって動作させないと判定できなくない?
0362デフォルトの名無しさん (ワッチョイ b094-whJA)2016/11/05(土) 23:19:19.82ID:AA4Sk0Wd0
>>361
最適化で不要なロジックは生成されない
0363デフォルトの名無しさん (ワッチョイ 1342-Xqtn)2016/11/05(土) 23:34:38.50ID:TjERyIHd0
>>362
しつこく聞いて悪いんだけど

最適化オプション付けてコンパイルして、アセンブラソース出力させ
その出力結果からエンディアンを判定するって事?
0364デフォルトの名無しさん (ワッチョイ b094-whJA)2016/11/06(日) 00:15:21.06ID:MLGlQdvO0
>>363
コンパイラが静的に判断して、不要な変数,不要なif文,通らないロジックは
生成しない

int hoge=1;
if(hoge==1)
{
}
else
{
}
最適化すればelseの中もhogeもifのところにあたるロジックも生成されない
0365デフォルトの名無しさん (ワッチョイ 653c-m5qj)2016/11/06(日) 00:17:58.15ID:gP4JS71d0
>>357
最大の自己中集団のアメリカ人が楽だから、ということに過ぎない、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
unixのソフトってutf8をサポートしてるんじゃなくて
単にascii用のコードがそのままutf8を入力しても使えちゃってるだけじゃないの

もしくはその変更なしのまま動くのをサポートしていると呼んでいるが
utf8のためにわざわざBOM対応の処理を追加するのは嫌なのか
0368デフォルトの名無しさん (ワッチョイ 653c-m5qj)2016/11/06(日) 00:33:06.44ID:gP4JS71d0
>>308
gcc -E -dM とかしてそれっぽいのを探す
0369デフォルトの名無しさん (ワッチョイ d39b-DGmA)2016/11/06(日) 00:36:12.69ID:EjJCIG4E0
>>367
BOMは本来エンディアンの判別用って分かってるのかな
0370デフォルトの名無しさん (ワッチョイ 1342-Xqtn)2016/11/06(日) 00:44:11.83ID:xHDOqiQx0
>>366
生成させないと言う説明ははもう分かったからいい
コンパイラを使う人間が、
生成された物から、
エンディアンがどちらであるか
判断するタイミングはどの時点?

>コンパイル時にエンディアン判別する方法ある?

質問がこうあるので、回答としては
コンパイル時に分からないといけないんじゃ無いかな?
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
time(NULL)の値をそのままファイルに書き込みたいんだがどうしたらいい?
エポック秒のまま書き込みたいんだ。
0373デフォルトの名無しさん (ワッチョイ 91fd-KjJO)2016/11/08(火) 12:02:28.55ID:8CSk6e280
バイナリーで出力するのは?
0374デフォルトの名無しさん (ワッチョイ 7b8b-DGmA)2016/11/08(火) 12:29:48.72ID:FGV1Wd8r0
ごめん、sprintf使ったら行けたわ
答えてくれてありがと
0375デフォルトの名無しさん (アウアウカー Sab5-t5SF)2016/11/08(火) 17:01:10.52ID:vVLdL2WGa
符号付き変数の場合ってなんで符号ビットだけがたった状態でマイナスのMAX値なんでしょうか?たとえばint型で0xffffは-1ですよね?感覚的には全てビットがたてば-のMAXになりそうなんですが、そういうものだからって言われればそれまでなのですが...
0376デフォルトの名無しさん (アウアウカー Sab5-t5SF)2016/11/08(火) 17:05:01.62ID:vVLdL2WGa
>>375
8bit符号ありなら
01111111 = 127 わかる
ひとつ桁が上がって
10000000 = -128 !?
11111111 = -1 !?!?
という感じです感覚的には
10000000 = -1
11111111 = -128
であってほしいなあっと
0377NAS6 ◆n3AmnVhjwc (ワッチョイ 8a5b-bOSl)2016/11/08(火) 17:05:32.33ID:Mlh8MpAy0
>>375
ビットの足し算引き算は負数を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
>>376
-1 に 1足すと 0
11111111 に 1 足すと (1)00000000
という辻褄が合うし、-0と+0の2つが存在することを防げる
2の補数表現という、これで検索ね
0380デフォルトの名無しさん (ワッチョイ 3b4f-uTye)2016/11/08(火) 17:22:43.82ID:cZ0szOqu0
2の補数だろう。
0381NAS6 ◆n3AmnVhjwc (ワッチョイ 8a5b-bOSl)2016/11/08(火) 17:24:04.92ID:Mlh8MpAy0
そそ、間違えた
2の補数は1の補数に1を加える
だった
0382デフォルトの名無しさん (ワッチョイ bc4f-8n5s)2016/11/08(火) 17:33:41.74ID:X2hYabzd0
符号なし 君の 2の補数
*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
なるほどわかりやすい!
有難うございます
0384 ◆QZaw55cn4c (ワッチョイ 7213-8n5s)2016/11/08(火) 19:50:47.80ID:cx7V3wOV0
>>377
それは 2 の補数
0385デフォルトの名無しさん (ワッチョイ e63c-8n5s)2016/11/08(火) 20:49:41.33ID:Zd3HZx+G0
符号なしなら 15 → 0 の区画で 符号付なら 7 → -8 の区間を除いて
隣り合う値の大小関係は維持してるから 符号付・符号なしを意識せずに演算できるようになってる
0386デフォルトの名無しさん (エーイモ SEd1-M9UC)2016/11/08(火) 22:47:30.86ID:uEjrEKyrE
int a = 1;
printf(a)
みたいなことって出来ないんですか?

printf("%d", a);
しかできないんですか?
printf以外で出来る関数ってないですか?
0387デフォルトの名無しさん (スッップ Sd28-DGmA)2016/11/08(火) 22:58:37.38ID:hH9QzIf9d
printf(a);
で表示できるでしょ?
0388デフォルトの名無しさん (ワッチョイ 1342-Xqtn)2016/11/08(火) 23:00:06.29ID:AlKHpmFD0
putchar(a+'0');
0389デフォルトの名無しさん (スッップ Sd28-DGmA)2016/11/08(火) 23:00:42.66ID:hH9QzIf9d
("%d", a)みたいにするときはaに何か付け足すときに使う
("aは%dです", a)みたいな
0390デフォルトの名無しさん (ドコグロ MM75-DGmA)2016/11/08(火) 23:01:31.93ID:iZpLu2rpM
puts
0391デフォルトの名無しさん (エーイモ SEd1-M9UC)2016/11/08(火) 23:01:49.37ID:uEjrEKyrE
#include <stdio.h>

int 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:hH9QzIf9d
printfの中がaじゃなくてnになってる気がするが
0393デフォルトの名無しさん (エーイモ SEd1-M9UC)2016/11/08(火) 23:04:48.47ID:uEjrEKyrE
ああっタイポです。それを修正してもエラーが出ます
test.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:AlKHpmFD0
int printf(const char*format,...)
0395デフォルトの名無しさん (エーイモ SEd1-M9UC)2016/11/08(火) 23:10:04.11ID:uEjrEKyrE
naruhodo
printfでエラーが出るのか仕様ってことですね
printf("%d", a)って書くようにします
0396デフォルトの名無しさん (ワッチョイ 1342-Xqtn)2016/11/08(火) 23:16:26.69ID:AlKHpmFD0
>>395
>>388 試してみて
0397デフォルトの名無しさん (ワッチョイ e63c-8n5s)2016/11/08(火) 23:18:04.01ID:Zd3HZx+G0
int n = 10;
"nは" + n + "です"
のように記述できるバリアント型のある言語に慣れた人かな?
0398デフォルトの名無しさん (エーイモ SEd1-M9UC)2016/11/08(火) 23:18:52.90ID:uEjrEKyrE
レス気づきませんでした・・すいません
putcharでもいけますね+'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
>>387
第一引数は、char型のポインターで無ければならない。
後、¥0が来るまで処理されるから、下手すると例外が発生する。
0401デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)2016/11/10(木) 09:15:59.70ID:+LTUeX840
質問です。
char * str1, str2;
str1="abc";
str2="def";

エラーが出ます。
0402デフォルトの名無しさん (ワッチョイ 134e-dJcJ)2016/11/10(木) 09:20:47.72ID:cc774ulR0
>>401 アスタリスクが足りない

char *str1, *str2;
0403デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)2016/11/10(木) 09:26:01.65ID:+LTUeX840
'0'のキャラクターコードに+aして、
例えばa=1ならa+'0'は'1'になる。
それをputcharしてるんですよね?

これつてつまり
キャラクターコードの0123456789の並び
からしてa>9の時はputchar(a+'0')は
上手く機能しないですよね?
0404デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)2016/11/10(木) 09:27:39.98ID:+LTUeX840
>>402
有難うございます。
初歩的なことのようでしたが、
ポインタの変数宣言は常に*つけない
といけないみたいですね。
0405デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)2016/11/10(木) 09:34:01.23ID:+LTUeX840
>>398
'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
>>405
>>386 の仕様は満たしている。
0408デフォルトの名無しさん (ドコグロ MMff-PwKp)2016/11/10(木) 10:12:09.88ID:83H+Rdo0M
他のやり方を示しても、「マイナスの時は出来ない」とか「long でもやりたい」とか言い出すんだろ?
0409デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)2016/11/10(木) 10:20:05.76ID:+LTUeX840
>>408
他のやり方なんて無いと思います。
0<=a<10なら
putchar(a+'0')は機能しますし
使ったこともあります。
0410デフォルトの名無しさん (ワッチョイ 134e-dJcJ)2016/11/10(木) 11:00:27.13ID:cc774ulR0
>>386への答えとしては「printfではできません。そういう関数を自作しましょう。」

void print_int(int i) {
 printf(“%d¥n”, i);
}
0411デフォルトの名無しさん (ワッチョイ 237b-e60R)2016/11/10(木) 12:54:45.10ID:xL6VF5Jb0
>>409
0x3aには:が割り当てられているので
こいつ↓は完全なウソ

> 0<=a<10なら
> putchar(a+'0')は機能しますし
> 使ったこともあります。
0412デフォルトの名無しさん (ワッチョイ b74f-teht)2016/11/10(木) 13:00:08.03ID:69ogPHI/0
0<=a<10 を a の値域が 0 〜 9 と読むか否か
0413デフォルトの名無しさん (ワッチョイ 237b-e60R)2016/11/10(木) 13:08:25.09ID:xL6VF5Jb0
<=と空目してた、メガネ作り直す時期か…
0414デフォルトの名無しさん (ドコグロ MMef-PwKp)2016/11/10(木) 13:12:08.02ID:17noS2hUM
0以上10未満と言いたいことはわかりにくいけど、まあわかる
それより0x3aと断定するのはどうか。EBCDICかもしれないのに
0415デフォルトの名無しさん (ワッチョイ 6b5b-PwKp)2016/11/10(木) 18:08:20.60ID:+LTUeX840
>>410が一番明快な気がします。
0416デフォルトの名無しさん (ブーイモ MM1f-8b/f)2016/11/10(木) 20:05:11.26ID:KAHJiECtM
Cの仕様上0〜9は必ず連番だから
0417デフォルトの名無しさん (ワッチョイ 7f13-ChQh)2016/11/10(木) 20:08:44.95ID:abqCyQLg0
>>416
C が ebcdic でないと言い切れる根拠は?
0418デフォルトの名無しさん (ブーイモ MM1f-8b/f)2016/11/10(木) 20:28:52.38ID:KAHJiECtM
ちょっと待っててくださいね
誰か知ってる人居ませんか〜?
0419デフォルトの名無しさん (ドコグロ MM3f-PwKp)2016/11/10(木) 20:39:24.22ID:6KREf9X3M
>>417
0x3a は知らんけど '0'〜'9' は連続したコードになってると言うのがCの仕様で EBCDIC もその条件は満たしてる
ちなみに EBCDIC では 'A'〜'Z' は連続してないので使う機会がある人は注意してね
0420デフォルトの名無しさん (ワッチョイ 6b42-WVKM)2016/11/10(木) 20:45:43.54ID:Flh9WlH30
一体何の話しているんだろ
0421デフォルトの名無しさん (ガラプー KK8f-sVJD)2016/11/10(木) 20:48:44.51ID:c/bGVWCPK
>>420
文字コード
0422デフォルトの名無しさん (ワッチョイ 134e-dJcJ)2016/11/10(木) 20:53:34.38ID:cc774ulR0
>>419
> '0'〜'9' は連続したコードになってると言うのがCの仕様
そんな仕様あるの?
0423デフォルトの名無しさん (ワッチョイ 0fed-WVKM)2016/11/10(木) 21:12:48.15ID:wjzEvz5i0
ttp://kikakurui.com/x3/X3010-2003-01.html
日本工業規格 プログラム言語 C
X 3010:2003 (ISO/IEC 9899:1999)

ソース基本文字集合及び実行基本文字集合の双方において,10 進数字に関する上の並びにおいて,
0 の右側に並んでいる各文字の値は,一つ左側にある文字の値に比べ 1 だけ大きくなければならない。

これのことか?
日本だけってことはないよね?
0424デフォルトの名無しさん (ワッチョイ a70b-OdgI)2016/11/10(木) 21:39:14.64ID:3W6twwb/0
n1570にも書いてある

5.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:KAHJiECtM
どうやら規格で連番のようだね
itoaが非標準だから一瞬やっちまったか?と思ったがよかったよかった
0426デフォルトの名無しさん (ワッチョイ 134a-Cgco)2016/11/10(木) 23:42:08.27ID:UuqYAwCi0
t = itoi("FA");
0427デフォルトの名無しさん (ワッチョイ a790-PwKp)2016/11/10(木) 23:52:02.30ID:h5BznXMa0
>>423
ISO/IECだから日本だけってことはないだろ。JIS Xは他から持ってきた規格が多いよな。
0428デフォルトの名無しさん (アウアウカー Saaf-kx01)2016/11/11(金) 13:21:20.24ID:aYWOTZ/Ja
変な割り込みしてすみません。
ebcdicってはじめて聞きました
これって現行で使ってたりする所あるんですか?
0429デフォルトの名無しさん (JP 0H6f-2n2A)2016/11/11(金) 13:42:49.07ID:6JJTq1XSH
ASCII の常識が通用しないとだけおぼえておけば
後は忘れてていい たぶん一生困らない
0430デフォルトの名無しさん (ワッチョイ 237b-dJcJ)2016/11/11(金) 14:14:00.75ID:2tUkhNCX0
覚えなくていい知識を
教え込むスレです
0431デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)2016/11/11(金) 15:13:56.28ID:0OlKLZsF0
過去に忘れ去られた仕様を何度も掘り起こして情弱と罵るスレです。
0432デフォルトの名無しさん (アウアウカー Saaf-AFXk)2016/11/11(金) 16:09:59.70ID:EpZdq0+qa
例えばdouble型の変数に
123.456789
というデータが入っている場合、これをint型の変数で
123456789
と変換させる標準関数はあるのでしょうか?
0433デフォルトの名無しさん (ワッチョイ a70b-PwKp)2016/11/11(金) 16:54:43.17ID:JQalwGbJ0
単に10の累乗かけるんじゃだめなの?
0434デフォルトの名無しさん (ワッチョイ b74f-teht)2016/11/11(金) 17:11:40.54ID:5TMvu3fK0
sprintf して頭から(小数点を飛ばして)整数化するんかのう
0435デフォルトの名無しさん (ワントンキン MM9f-WFrU)2016/11/11(金) 17:32:44.91ID:VACb0+QzM
えびすでっく懐かしぃ
0436デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)2016/11/11(金) 17:40:31.89ID:0OlKLZsF0
>432
標準関数にするほどに多用するのか?
0437デフォルトの名無しさん (ワッチョイ 134e-dJcJ)2016/11/11(金) 18:30:56.11ID:6s+TzTnG0
52bitの仮数部だけマスクしてint64_tにコピーとかでいけないかな?
0438デフォルトの名無しさん (ワッチョイ a70b-PwKp)2016/11/11(金) 18:55:42.95ID:JQalwGbJ0
浮動小数点の指数部は10ではなく2の累乗で表されてるから
ビット抜き出しただけではダメだね
0439デフォルトの名無しさん (ワッチョイ a70b-PwKp)2016/11/11(金) 18:55:43.31ID:JQalwGbJ0
浮動小数点の指数部は10ではなく2の累乗で表されてるから
ビット抜き出しただけではダメだね
0440デフォルトの名無しさん (ドコグロ MM5f-PwKp)2016/11/11(金) 19:38:46.81ID:7sFk++lSM
>>428
汎用機って言うでっかいコンピューターを後生大事に使ってるところは未だにある
0441432 (アウアウカー Saaf-PwKp)2016/11/11(金) 21:10:07.38ID:37A0aE2Xa
標準関数としては用意されていないようですね
おとなしく自分で作ろうと思います
ありがとうございました
0442デフォルトの名無しさん (ガックシ 06ef-kx01)2016/11/11(金) 21:21:21.87ID:kzNknik+6
>>440
なるほど有難うございます
0443デフォルトの名無しさん (ワッチョイ 8fc0-fsQo)2016/11/11(金) 22:31:01.21ID:3L5PjATE0
日本人ならEBCDIK
0444デフォルトの名無しさん (ワッチョイ 6b42-WVKM)2016/11/12(土) 00:26:48.12ID:aMxeZQXn0
EBCDIKって、ネットでエンコードに採用しても大丈夫?
0445デフォルトの名無しさん (ワッチョイ df7b-mupw)2016/11/12(土) 02:49:34.13ID:vePuKJXk0
日立の中の人?
0446デフォルトの名無しさん (ワッチョイ 4b6f-PwKp)2016/11/13(日) 00:23:25.29ID:yOekueOi0
拝承
0447デフォルトの名無しさん (ドコグロ MM5f-PwKp)2016/11/13(日) 10:19:02.02ID:ZjdX2IN8M
宛 (>>444)
全く問題ありませんので、今回の件につきましてはこれで終わりと致したく
0448デフォルトの名無しさん (ワッチョイ 7fea-jzcv)2016/11/13(日) 19:53:59.05ID:mDfCIeMQ0
C言語のビルドって何でやるのが主流なのでしょうか。
0449片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)2016/11/13(日) 20:01:21.76ID:6aidVFzXK
>>448
CMakeがいいらしいよ。
0450デフォルトの名無しさん (ワッチョイ ef23-PwKp)2016/11/13(日) 20:21:49.54ID:Ggvvb/9+0
>>448
主流ってのは無いねー。
実際に動かす先の都合で、ほぼ決まっちゃう。
組み込みならメーカーお仕着せが多かったり、windowsならVSだったり、OSSならクロスコンパイルも含めてeclipse/cdtってところじゃないか?
0451デフォルトの名無しさん (ワッチョイ 83bd-OdgI)2016/11/13(日) 20:39:50.52ID:5YmDMkhP0
Cのprintf文って書きにくすぎ、%d とかいちいち型指定するのがほんと
ストレス、要らんだろこれ。
0452デフォルトの名無しさん (ワッチョイ 0fed-WVKM)2016/11/13(日) 21:13:25.70ID:v/Qpz9In0
日本語変だよ。

まぁ文句はC言語作った外人に言ってくれ。
0453デフォルトの名無しさん (ワッチョイ 4b5b-PwKp)2016/11/13(日) 21:28:55.15ID:rcRsfR9/0
自前で関数なりマクロでも作ったらいいんじゃないの
0454デフォルトの名無しさん (ワッチョイ 6b42-WVKM)2016/11/13(日) 21:36:42.83ID:s20F/plG0
表示関数を自作すれば良いと思う
0455デフォルトの名無しさん (ガラプー KK6f-sVJD)2016/11/13(日) 21:37:46.54ID:6aidVFzXK
_Generic
0456デフォルトの名無しさん (ワッチョイ 6b42-WVKM)2016/11/13(日) 21:53:47.30ID:s20F/plG0
文字列や整数だったら、自力で出力関数作るのは難しくはなさそうだけど
実数型だと、内部格納形式を調べながらの作業になりそう
0457デフォルトの名無しさん (ワッチョイ 83c1-R+gX)2016/11/13(日) 21:59:49.35ID:jVFv5u9w0
externについて質問です

関数の宣言時にexternをつけることによってその関数の定義がないファイルからでもどこかにある定義を見る様にコンパイラに促す事ができるのでしょうか?
inlineをつけることによって関数を展開できますよね、けどこれは関数定義があるファイルからしか呼び出す事ができません。他のファイルからinline関数を呼び出す事ができその際にはexternをつけるみたいなのですがどういう仕組みなのかよくわかりません。定義のないソースファイルで宣言するときにもexternをつける必要があるのでしょうか?この辺を詳しく教えてください
0458片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)2016/11/13(日) 22:06:51.24ID:6aidVFzXK
関数型の宣言にexternは不必要。externが必要なのは外部変数を参照したいとき。
externは英単語のexternal(外部の)を意味してる。いろんな場所から使われるインライン関数はヘッダーから読み込むのが普通。
0459デフォルトの名無しさん (ワッチョイ c3a1-zfai)2016/11/13(日) 22:16:19.60ID:6BLqY2xc0
>>451
当初、Javaには、printfがなかったが、結局、printfに相当するものが追加された
printfは、すごいんだぞ
Cを愛するなら「printfってすごいね」というだろう
0460デフォルトの名無しさん (ワッチョイ ef17-WVKM)2016/11/13(日) 22:18:38.14ID:l5Rh05Ce0
>>451
自作すればどうして%指定が必要なのかもわかるよ
ヒントはstdarg.h
0461デフォルトの名無しさん (ワッチョイ a790-PwKp)2016/11/13(日) 22:26:27.44ID:SUTcqM6e0
型推論してくれればいいのかね?
0462デフォルトの名無しさん (ワッチョイ 83bd-OdgI)2016/11/13(日) 22:37:03.18ID:5YmDMkhP0
なるほど、%を自動添付するメソッドを自分で開発してインポすればいいのか。
型推論ってあれか?型が何であるか推測するコナン的なエンジンか。
面白そうだな、ちょっと作ってみるわ。
0463片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)2016/11/13(日) 22:42:54.05ID:6aidVFzXK
_Genericとマクロを使えば型で分岐できるよ。
0464デフォルトの名無しさん (ワッチョイ ef17-WVKM)2016/11/13(日) 22:53:29.95ID:l5Rh05Ce0
可変長と_Genericって組み合わせられるん?
0465片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)2016/11/13(日) 22:59:34.06ID:6aidVFzXK
Cの可変長引数には型情報がない。
0466デフォルトの名無しさん (ワッチョイ ef17-WVKM)2016/11/13(日) 23:01:49.41ID:l5Rh05Ce0
ですよね
多分_Genericとマクロを組み合わせても%無しのprintfは作れないはず
0467片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)2016/11/13(日) 23:05:34.45ID:6aidVFzXK
p("a = "), p(a);
p("e = "), pwp(e, 0, 2);

こんな感じかな?
0468デフォルトの名無しさん (ワッチョイ ef17-WVKM)2016/11/13(日) 23:14:15.11ID:l5Rh05Ce0
すまんわからんです。。。
0469デフォルトの名無しさん (ワッチョイ 6b42-WVKM)2016/11/13(日) 23:17:49.57ID:s20F/plG0
本来の型とは違う出力して欲しい時もあるからね
0470片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)2016/11/13(日) 23:23:31.80ID:6aidVFzXK
#define p(X) _Generic((X), \
char: 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
Cは型情報を持っていないから、
型情報を外から与えるしか無い
その与え方が%
なので%はなくせない
こればかりはどんなに面倒でも仕方がない
0472デフォルトの名無しさん (ワッチョイ 9342-FQoa)2016/11/13(日) 23:27:23.47ID:z/YWoW/C0
いやCがマシン語に近く凄くないだけだろ。不便なだけだったらC++使って自作したらいい。
こっちは自動認識するから。
0473片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)2016/11/13(日) 23:27:27.95ID:6aidVFzXK
void print_int(int n)
{
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:6aidVFzXK
これでp(123);と書くと123を出力し、p("hello");と書くとhelloを出力する。
0475デフォルトの名無しさん (ワッチョイ ef17-WVKM)2016/11/13(日) 23:40:25.02ID:l5Rh05Ce0
>>474
それは分かるけど引数1個しか取れないじゃん
それじゃprintfの代わりにはなれないよ
0476片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK8f-sVJD)2016/11/13(日) 23:46:58.90ID:6aidVFzXK
#define pw(X,w) _Generic((X), \
char: 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
void print_intw(int n, int w)
{
printf("%*d", w, n);
}
...(以下略)
0478デフォルトの名無しさん (ワッチョイ c756-MJQ8)2016/11/14(月) 01:30:20.70ID:z0u6fxyS0
>>457
ヘッダーファイルにinlineを書いて、その関数を使うファイルにヘッダーファイルを読み込む記述を
0479デフォルトの名無しさん (ワッチョイ 0f8b-PwKp)2016/11/14(月) 01:31:01.91ID:KpxNuMja0
自作関数の戻り値で文字列を取得するにはどうしたらいいですか?
0480デフォルトの名無しさん (ガラプー KK8f-sVJD)2016/11/14(月) 01:34:49.36ID:L1+AAJlgK
>>478
#include "ファイル名"
0481片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK6f-sVJD)2016/11/14(月) 01:45:39.32ID:L1+AAJlgK
>>479
文字列を関数で返すためには、どこかに文字列が格納されていなければならない。
malloc,calloc,realloc,strdupなどで動的に格納する場所を作るか、
事前に用意したバッファに格納する。
0482片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK6f-sVJD)2016/11/14(月) 01:52:10.31ID:L1+AAJlgK
mallocなどで確保したメモリーブロックに文字列を流し込む場合、
memcpy, strcpy, strncpyなどを使うことができる。
0483デフォルトの名無しさん (ワッチョイ 83c1-kx01)2016/11/14(月) 02:10:57.33ID:qeitxhXf0
>>458
有難うございます
0484デフォルトの名無しさん (ワッチョイ df7b-uCRY)2016/11/14(月) 02:11:09.00ID:7FW0rmhY0
>>479
普通は関数の戻り値で文字列を扱う場合は文字列へのポインタを返す
0485デフォルトの名無しさん (JP 0H6f-2n2A)2016/11/14(月) 07:11:21.14ID:IkO1tjwLH
>>479
●前提
・文字列は文字の配列
・Cでは配列をそのまま戻り値として返すことはできない
・文字列の末尾に 0 がつくので配列の長さを余分に取る
●対策
A.呼び出し元で十分な長さの配列を用意しそれを指すポインタを引数で渡してもらう
B.関数内で作成した配列へのポインタを返す

Aは一見面倒だが長さがわかってて決め打ち出来る場合はお手軽

Bは長さがわからない場合に関数内でメモリを確保(malloc)し使用
呼び出し側で毎回解放(free)の手間がかかりうっかり忘れて見えないバグにつながるので避けたい
0486デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)2016/11/14(月) 09:33:06.00ID:j3M9laUg0
PRINT USING "######",D
0487デフォルトの名無しさん (ワッチョイ c3a1-zfai)2016/11/14(月) 13:38:18.85ID:qs04J1oz0
>>479
知識としては…
Cでも構造体を返すことができます。構造体は、コピーされます。
int, char[]が構造体にはいっている
0488デフォルトの名無しさん (ワッチョイ c3a1-zfai)2016/11/14(月) 14:00:42.81ID:qs04J1oz0
#define BUFFER_SIZE 128
#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
#define BUFFER_SIZE 128
#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:q7LJNjlP0
最近思うことだが、全てのコンピュータシステムの根幹って、
stdio.h と stdlib.h 何じゃないかと思う。

他の言語のメソッドとか回りくどい概念をいちいち覚えるよりも、
この2つを九九のごとく頭に叩き込んで体に覚えさせれば、
他の言語や処理系も、同じようなことを文法をかえて、それぞれ独自に
アレンジしてるだけだからすんり理解できるんじゃないか?
どうして誰もこのような方法を教えてくれなかったんだろうか?

何で九九をマスターさせずに虚数みたいなものから解説しようとするのか
俺には理解に苦しむね。
0491デフォルトの名無しさん (ワッチョイ c756-MJQ8)2016/11/15(火) 00:34:26.89ID:i7kpJCwQ0
>>490
押しつけ的な教育が楽だからでしょ。
0492デフォルトの名無しさん (ワッチョイ ef17-WVKM)2016/11/15(火) 00:44:19.98ID:uqDvjpmu0
そこで言う虚数とは?
「順次処理」「分岐処理」「繰り返し処理」をその言語でどう表現するか(構文)を
リファレンスから辿れば普通に理解できるわけなんだけど
わからん奴は「アドレス」とは何かなどの基本のコンピュータの仕組みが分かってないだけと思う
0493デフォルトの名無しさん (ワッチョイ 83bd-OdgI)2016/11/15(火) 01:32:32.92ID:q7LJNjlP0
Javaとかオブジェクト指向が虚数みたいなもんかな、
何をやってるのかを隠ぺいしている。
0494デフォルトの名無しさん (ワッチョイ 6f3c-teht)2016/11/15(火) 01:46:59.76ID:7xV8Yp/e0
>>492
データ構造にまつわるポインタは慣れてないとその概念をつかむのは難しい
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:i7kpJCwQ0
へ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
0497デフォルトの名無しさん (ワッチョイ 8fe1-PwKp)2016/11/15(火) 03:55:05.43ID:PhOBmSZe0
Cはポインタとかが邪魔なのでRubyとかの基本リファレンスでも叩き込んだほうがマシかな
特にCはメモリ確保と文字列、配列あたりが他の言語よりかなり使いづらい
0498デフォルトの名無しさん (ワッチョイ 83bd-OdgI)2016/11/15(火) 08:06:33.72ID:q7LJNjlP0
でも例えば、Rubyのputs はCのprintf や puts の「焼き増し」であり、
printf System.out console.log echo なんて同じものをいくつも
時間をかけて覚えなくたって、「焼き増し」の部分は勘ですぐ使える
ようになるだろ?
ということは、各種言語の「焼き増しじゃない部分」を見分けるためには、
一番参考元になっているCのライブラリを暗記するのが最適じゃ
ないか?
Cのライブラリを覚えておいて、他の言語の「身に覚えがない」部分だけ
注意深く学習するんだよ。
0499デフォルトの名無しさん (ワッチョイ 377b-EKpQ)2016/11/15(火) 08:43:27.36ID:7W+Eb75M0
Cは文法が綺麗だし合理的で、仕様もこじんまりしていて簡単に覚えられる。
しかも強力だ。

1.文法がきれい
2.仕様が小さい(簡単に覚えられる)
3.強力

これだけの利点があるのだから覚えない、教えないのはもったいない。
これが基本にあるかないかは大きいと思う。

Cのポインターとキャストは生生しく柔軟過ぎて、危険すぎるもの
ではあるが危険を取り払うと感性が鈍る。これに慣れ親しむというのが
勉強にはいい。
0500デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)2016/11/15(火) 09:58:38.11ID:IxmHzjUK0
アセンブラ先にやるとCの仕様も理解できる。

ただポインタと構造体の記述フォーマットには戸惑った。
アロー演算子(->)なんてジョークかと思った。
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:8O6rwMYtM
とあるプロジェクトで構造体変数の定義を必ず配列にしてるようなソースあったなぁ
0504デフォルトの名無しさん (ドコグロ MMef-wOPQ)2016/11/15(火) 11:31:46.78ID:r6BgB6bMM
アローは直感的で好き
Cの仕様は総じてシンプルで分かりやすい。まあビット演算子の優先度が比較より低い件はいまいちだけど
あと代入のイコールはPASCALみたいに:=にする方が良かった
0505デフォルトの名無しさん (ワッチョイ 6f3c-teht)2016/11/15(火) 11:34:32.28ID:7xV8Yp/e0
比較の回数と代入の回数だと、代入のほうが多いから少なくタイプできる = を代入にしてる
って知り合いに聞いて ほぇー ってなった
0506デフォルトの名無しさん (ワッチョイ 8fe1-zoBz)2016/11/15(火) 12:38:09.07ID:PhOBmSZe0
C言語の文法が単純なのはそうだけど、仕様はかなり複雑だろ。これの半分も正解できるやつどれぐらいいるの?
http://qiita.com/yohhoy/items/960ee7a7b502e5c764b4

もっと単純なところで、副作用2回とかi++と++iの違いとか、*p++って書いて有る場合の優先順位とかもわかりにくい
sprintfの引数に文字列だけ&をつけないとか、間違った処理(メモリ破壊など)をしてもエラーで止まらないとかも初心者殺し
文字終端\0やマクロ、プロトタイプ宣言、ファイル分割の方法といった他の言語とことなる部分も多い

強力というが、機械の制御とか以外では実用性のあるプログラムは(初心者には)書けない
0507デフォルトの名無しさん (ワッチョイ 93fd-MJQ8)2016/11/15(火) 12:44:04.61ID:IxmHzjUK0
そりゃ初心者はスクリプト言語とかBASIC勧めるわ。
0508デフォルトの名無しさん (JP 0H6f-2n2A)2016/11/15(火) 14:30:43.80ID:4QSE1fRAH
>>506
プロなら無意識に避ける潜在バグやコーナーケースばっかりやないか

1問目はやられたと思ったけどw
0509デフォルトの名無しさん (ワッチョイ efba-Cgco)2016/11/15(火) 17:22:21.27ID:tf1AFsOG0
仮定義ってのは知らなかったな
何かいいことあるの?
0510デフォルトの名無しさん (ワッチョイ 237b-e60R)2016/11/15(火) 17:41:53.82ID:Pl5GrYtp0
externはいらない子

とほざいて未来永劫バカにされる事が出来る
0511デフォルトの名無しさん (ワッチョイ 7f13-teht)2016/11/15(火) 20:29:53.06ID:vYoawJH30
実際 extern っていらないよね‥
0512デフォルトの名無しさん (ワッチョイ 6b42-WVKM)2016/11/15(火) 20:48:16.43ID:k8jObWYJ0
「バグ退散」の護符ってことで 許してやって
0513デフォルトの名無しさん (ワッチョイ 8fc0-fsQo)2016/11/15(火) 21:55:27.46ID:HcDSv4MP0
エクスたん
0514デフォルトの名無しさん (ワッチョイ 0fed-WVKM)2016/11/15(火) 22:45:25.43ID:XOuL+TpX0
スパコンのC/C++のヘッダ見たら
C++用ヘッダではextern使われてたけど
C用では使われてなかったな。
0515デフォルトの名無しさん (ドコグロ MMff-wOPQ)2016/11/16(水) 07:28:38.05ID:mvy4oGzgM
>>506
> これの半分も正解できるやつどれぐらいいるの?
半分ぐらいなら普通にいるだろ

> 副作用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
>>516
コンパイラ的にはどちらも同じ
宣言を見てその関数を使う人が引数の意味を推測しやすくするために名前を付ける
0518デフォルトの名無しさん (JP 0H6f-2n2A)2016/11/16(水) 13:48:14.44ID:Io8tNnmjH
>>516
メモリもディスクも画面サイズも足りなかった時代の悪習だから
後者は忘れていい
0519デフォルトの名無しさん (ワッチョイ 87ff-8a14)2016/11/16(水) 13:52:46.59ID:hL8zHUS90
>>518
それはちょっと勘違いしてる
0520デフォルトの名無しさん (JP 0H6f-2n2A)2016/11/16(水) 13:57:09.10ID:Io8tNnmjH
覚えておくべきことがあるとすれば
宣言の側はただの飾りだから
実体側の引数名と一致しない場合がある(エラー検出されない)
0521デフォルトの名無しさん (ワッチョイ 6f4e-dJcJ)2016/11/16(水) 15:26:49.89ID:SMjNMGeh0
ヘッダの宣言は、説明的な引数名にしておけばわかりやすいし、
IDEによっては補完候補にも表示してくれる。
定義の方はローカル変数だから短くて良いと。
0522デフォルトの名無しさん (ガラプー KK8f-dPkQ)2016/11/16(水) 17:15:23.54ID:smgZxLVEK
C言語対応のIDEを教えてほしいです
お願いします!
0523デフォルトの名無しさん (ワッチョイ df7b-H10S)2016/11/16(水) 17:39:43.54ID:9EL6ismP0
ほとんどの人がC++処理系のIDEを使っていると思うよ
自分はWindows環境なのでVisualStudioを使ってる
0524デフォルトの名無しさん (ガラプー KK6f-dPkQ)2016/11/16(水) 18:33:46.56ID:smgZxLVEK
どうもありがとうございます
参考にさせていただきます!
0525デフォルトの名無しさん (ドコグロ MM5f-wOPQ)2016/11/16(水) 19:53:09.80ID:KQ3YixihM
>>519
kwsk
0526デフォルトの名無しさん (ワッチョイ 4b77-9KU2)2016/11/16(水) 20:58:02.36ID:xT6pR/ja0
>>525
519じゃないけど
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:rMQ4TTNg0
apiってあるからどんな環境で呼ばれるか分からないような汎用コード向けのルールだな
0529デフォルトの名無しさん (ワッチョイ 6f3c-teht)2016/11/16(水) 21:17:55.90ID:riFmGWu20
size_t num と size_t unit_size が並ぶ qsort とか、名前無しプロトタイプだと
どっちがどっちかわからんくなるな
0530デフォルトの名無しさん (ワッチョイ 6f4e-dJcJ)2016/11/16(水) 21:26:15.75ID:SMjNMGeh0
俺はcallocでいつも確認してた。
どっちでもいいんだけど几帳面だから。
0531デフォルトの名無しさん (ワッチョイ 6f4e-dJcJ)2016/11/16(水) 21:32:36.74ID:SMjNMGeh0
>>526
この場合は定数にdefineを使うべきじゃなくconst intにすべきだし、
定数名は大文字キャメルケースなりprefix付けるなりすべきだと思うな。
define多用は良くないよ。
0532デフォルトの名無しさん (ワッチョイ 6f4e-dJcJ)2016/11/16(水) 21:38:47.23ID:SMjNMGeh0
これやっちゃうとあらゆる場面でstatusが使えない。
そっちの方が問題。
0533デフォルトの名無しさん (ワッチョイ 6f3c-wOPQ)2016/11/16(水) 22:18:20.03ID:TE0DjPON0
>>526
これってプロトタイプでエラーにならなくても関数定義側でエラーになるだろ w
>>527 の言うようにマクロは大文字で書けって言う方がマシやん
0534デフォルトの名無しさん (ワッチョイ b37b-e60R)2016/11/16(水) 23:11:38.87ID:98uH8XY70
アホなユーザーの支離滅裂なマクロ定義を回避する方法は存在しない
木を見て森を見ない噴飯もののルール
0535デフォルトの名無しさん (ワッチョイ ef17-WVKM)2016/11/16(水) 23:13:06.14ID:O6EmXZtQ0
>>526
俺も仮引数名つけない派
0536デフォルトの名無しさん (ブーイモ MM1f-wOPQ)2016/11/16(水) 23:20:19.76ID:0aBht35qM
そそ、みんなグローバル変数にしちゃえば良いんだ
0537デフォルトの名無しさん (ワッチョイ ef17-WVKM)2016/11/16(水) 23:24:14.05ID:O6EmXZtQ0
>>536
それはダメ
むしろなくさなければいけない
0538デフォルトの名無しさん (ワッチョイ 0f8b-wOPQ)2016/11/16(水) 23:25:48.79ID:T0veAKNy0
みんな日本語の扱いはどうしてる?
0539デフォルトの名無しさん (ワッチョイ b37b-e60R)2016/11/16(水) 23:33:16.09ID:98uH8XY70
#define update_status 23
void update_status(int);

ダメじゃん w
0540デフォルトの名無しさん (ワッチョイ 6b42-WVKM)2016/11/16(水) 23:33:26.80ID:+mSoNAtY0
ソースからスクリプトでプロトタイプ生成するから仮引数もソースと同じように入る
0541デフォルトの名無しさん (ワッチョイ 3f6f-+4oZ)2016/11/17(木) 02:26:33.69ID:8xmBWk670
>>526
この違反コード例って、引数名をつけることが問題の原因じゃなくて、
#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
>>541
分担して作成していたら、名前がかぶった
だったら、関数の仮引数に下がってもらおうという話でしょ
0543デフォルトの名無しさん (ワッチョイ be9f-0/hK)2016/11/17(木) 02:47:52.57ID:UY2cVCQk0
int update_status(int /*ステータス*/);
これでもいいって書いてあるのに可読性のクレームは筋が悪い
0544デフォルトの名無しさん (ワッチョイ 3f6f-+4oZ)2016/11/17(木) 03:52:02.76ID:8xmBWk670
>>542
そういう名前がかぶって仮引数に下がってもらった案件があったとしても、
「関数プロトタイプでは引数に名前をつけない」という一般化になるのが
理解できない。それが原因じゃないよね、って感じる。

>>543
妥協案はそのコメントにする方法だけど、そもそもコメントにする必要もない。
「プロトタイプの引数に名前をつけない」が間違ってるならね。
あとそこは、/* status */ にすべきだろうね。翻訳しすぎ
0545デフォルトの名無しさん (ドコグロ MM1c-RUi6)2016/11/17(木) 06:58:27.73ID:MTp7l4mwM
>>526
これだから日本の役所っぽいところが作ったコーディングルールなんて役に立たないんだよな

って書こうとしたらこれの単なる翻訳なんだな
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:7TLsjsTe0
女子プログラマーにはどんどん使って欲しい。
0548デフォルトの名無しさん (ドコグロ MMb8-RUi6)2016/11/17(木) 08:38:16.19ID:SX2OfUTfM
>>547
可愛けりゃまだな
0549デフォルトの名無しさん (ワッチョイ 5e4e-Th+s)2016/11/17(木) 09:58:14.97ID:+o4tuiiL0
>>531
キャメルじゃなくてスネークケースの間違いだった。
このように、人間はミスを犯すのです。
0550デフォルトの名無しさん (アウアウカー Sa41-478M)2016/11/17(木) 11:01:05.21ID:GIzhT3Zca
関数へのポインタって&つけてもつけなくてもどっちでも良いんですかね?これは配列同様と思えばokですか?
0551デフォルトの名無しさん (ワッチョイ 5e4e-Th+s)2016/11/17(木) 11:09:55.39ID:+o4tuiiL0
おkですね。&付けなくても関数ポインタです。
0552デフォルトの名無しさん (アウアウカー Sa41-478M)2016/11/17(木) 11:17:12.69ID:GIzhT3Zca
>>551
有難うございます
0553デフォルトの名無しさん (エーイモ SE2d-dXbs)2016/11/17(木) 15:04:56.23ID:G+5xeCS2E
clang 3.9使ってるんですけど
最新の仕様とか古い仕様とわず一番簡単に動的に配列を作る方法ありませんか?

0から100までの整数Nを100個ランダムに生成して
Nが偶数なら配列変数gに、奇数なら配列変数kに代入していきたい

gとkのサイズの合計は100だとわかるけど
gとkそれぞれのサイズの合計がわからないのでこういう場合はどうやって配列を作るといいですか?
0554デフォルトの名無しさん (ワッチョイ 88ff-d8X5)2016/11/17(木) 15:27:44.31ID:5aO/SijD0
動的ならmalloc
でも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
>>550
配列の&の有無は意味が違うよ
arrayだけだと先頭要素へのポインタ
&arrayだと配列全体へのポインタ
代入するときに型が合わないと警告される
0557デフォルトの名無しさん (ブーイモ MM65-RUi6)2016/11/17(木) 15:48:25.84ID:wmO78uwBM
>>553
最大100の配列が2個でいいんなら両方静的に作っておけばいいんでは?
もし仮に最悪1GBだけど平均1KBの配列が10個とかいう条件なら
mallocとreallocを駆使するのが最善かな
でも平均100MBとかで巨大なreallocが何度も実行される可能性を嫌うなら
適当なチャンクごとにツリー状に配列の配列みたいな構造を作る
0558デフォルトの名無しさん (JP 0H65-wlUq)2016/11/17(木) 16:49:52.71ID:GuPz6eIGH
http://ideone.com/gnaGCh
可変長引数って先頭に引数の数を渡さないといけないんですかね?
不定数の文字列を渡して連結するような関数を書きたいんですが、URLの様にかくと”hello”の部分が
飛ばされてしまうのでなんとかならないですか?
0559デフォルトの名無しさん (ワッチョイ 9fd4-UoMj)2016/11/17(木) 17:04:23.61ID:IpUgROqr0
ループに入る前に printf("%s ", format); をしてみるとか
0560デフォルトの名無しさん (ワッチョイ 88ff-d8X5)2016/11/17(木) 17:26:06.86ID:5aO/SijD0
1個目は確定してんだから、>>559 でいいんだよ
0561デフォルトの名無しさん (ワッチョイ 9fd4-UoMj)2016/11/17(木) 18:03:10.05ID:IpUgROqr0
>>553
(サンプル数の合計が定数なら、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
>>559,560
ありがとうございます、これって結局可変長引数は第一引数を引数の個数にする必要はないってことですよね?数値渡すなら最後-1とかにすれば終わりが分かるので…
0563デフォルトの名無しさん (ワッチョイ 88ff-d8X5)2016/11/17(木) 18:41:39.19ID:5aO/SijD0
>>562
まあ全部が同じ型なら終端も判別できるしそれでいいと思うよ
printfは最初の文字列で、次以降の変数の型と個数までわかる仕様だし
別に個数そのものが入ってるわけじゃない
ただ呼ぶ側がミスると終端飛び越しちゃう可能性あるから注意だな
0564デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)2016/11/18(金) 02:52:37.17ID:SgtZza8z0
int* char* がどういう意味なのかどうしても分からない。
どうして型に * がついていて、末尾側についているんだ?
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:1TQ7nfkR0
int32 は変数の型で、int32* はメモリ上のアドレス・メモリサイズの型

int32* 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 と書けばいいものを、
わざわざ int* p にするんだ?
この型が出てくると混乱するんだよ。
0568デフォルトの名無しさん (ワッチョイ 56c0-E4Cj)2016/11/18(金) 07:07:09.68ID:2yb3wpBY0
>>566
嘘書くな
0569デフォルトの名無しさん (ワッチョイ f64e-RUi6)2016/11/18(金) 07:09:37.79ID:y1CkkXMt0
>>567
&は変数のアドレス値を返す演算子。
*はポインターの示す場所に入っている値を返す演算子
0570デフォルトの名無しさん (ワッチョイ 9fd4-UoMj)2016/11/18(金) 08:20:54.14ID:QnIUDUY40
>>567
ちょっとわろた。
int* p でもいいけど、int *p と書いた方が分かりやすいかな。
*p と書くと int になる変数p、ということで合ってるじゃん?
0571デフォルトの名無しさん (ワッチョイ bdfd-DGos)2016/11/18(金) 08:25:03.56ID:t2CjkJl40
>じゃあ何で int &p と書けばいいものを、
C++の関数の引数で採用されたよ。
0572デフォルトの名無しさん (ワッチョイ b178-RUi6)2016/11/18(金) 09:03:58.67ID:6I0OJhBc0
なぜ関数の引数限定?
0573デフォルトの名無しさん (ワッチョイ 627b-RfK+)2016/11/18(金) 09:04:39.07ID:yf1LiC800
C++の参照型変数とポインタ型変数は別物だよ
0574デフォルトの名無しさん (ブーイモ MM0d-RUi6)2016/11/18(金) 09:56:20.90ID:mEWv72c0M
質問者が混乱するだけだから参照の話はやめとけ
混乱させて遊びたいのなら別だが
0575デフォルトの名無しさん (オッペケ Sra9-RUi6)2016/11/18(金) 11:08:07.97ID:HK7Im3JLr
>>567
&だと、ポインターがint型って事になって、おかしいだろ。

*なら、ポインターの示す先がint 型って事だから、分かりやすい。
0576デフォルトの名無しさん (ワッチョイ 9c4f-XpIe)2016/11/18(金) 11:22:32.64ID:2s4GJbwa0
宣言
 生の型に * がつくと ポインタ

利用時
 生の型の変数に & がつくとポインタ
 ポインタの変数に * をつけて(指し先の)生の型

そういう文法なので
「何故?」ではなく、「そういうもんだ」として理解するしかない
0577デフォルトの名無しさん (ワッチョイ feba-37p2)2016/11/18(金) 12:11:31.70ID:4pR1EysP0
>>514
++では仮定義は無いらしい
宣言と定義があいまいで混乱の元だからだろ
0578デフォルトの名無しさん (ドコグロ MMd5-RUi6)2016/11/18(金) 12:12:27.35ID:i8W18eRqM
&つくとその変数のアドレス、でいいじゃん
アドレスはポインタではないでしょ?
0579デフォルトの名無しさん (ドコグロ MMd5-RUi6)2016/11/18(金) 12:27:52.21ID:Un45qbnZM
&を付けるとその変数オブジェクトのポインタが得られる
0580デフォルトの名無しさん (ワッチョイ 627b-RfK+)2016/11/18(金) 12:35:50.67ID:elv809Fr0
迷走が始まったな
0581デフォルトの名無しさん (ワッチョイ feba-37p2)2016/11/18(金) 12:45:39.07ID:4pR1EysP0
アドレスはポインタオブジェクトではない
だな
0582デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)2016/11/18(金) 13:00:38.73ID:SgtZza8z0
int* p == int *p  でいいの?
int * p もありなの?
空白スペースの区切りで何か変わるのか、順番だけが重要なのか、
恐らく int*p はエラーになると思うんだよ。型と引数が連結してるん
だから。 普通 型と引数で演算したりしないだろ、
それなのに演算子がこの間にあるあるのが嫌なの。
境界がよくわからんから気持ちが悪い。
0583デフォルトの名無しさん (アウアウカー Sa41-2XGH)2016/11/18(金) 13:18:51.48ID:9iqMa1Dca
int* pでもint *pでも全く意味は同じ

かけ算の演算子*とはたまたま同じ記号を使ってるだけでこの*は演算子じゃない
0584デフォルトの名無しさん (ワッチョイ fe16-u2Hn)2016/11/18(金) 14:08:56.40ID:Kc9LvC1S0
int* p, q;
次はなぜ q はポインタじゃないのよムキーッとなるだろう
0585デフォルトの名無しさん (ワントンキン MM40-RUi6)2016/11/18(金) 14:23:10.78ID:0gQQCyidM
r=p/*q; がエラーになるんですけど
0586デフォルトの名無しさん (ワッチョイ 9c4f-XpIe)2016/11/18(金) 14:29:57.00ID:2s4GJbwa0
プリプロセッサの処理のほうが先にやっちゃうから
/*
がコメント開始になっちゃうんだな
0587デフォルトの名無しさん (ワッチョイ 7742-tQqt)2016/11/18(金) 18:54:56.85ID:RivhHfJv0
/と*の間に空白を入れてみたら
0588デフォルトの名無しさん (ワッチョイ 3a13-XpIe)2016/11/18(金) 20:25:44.91ID:7RNwkfhn0
>>564
そんなんでコンパイルが通るのか?
0589デフォルトの名無しさん (ワッチョイ be9f-0/hK)2016/11/18(金) 21:04:50.98ID:eISdsYkv0
>>582
int*p; はエラーじゃないしint * p;もありだし、なんならint(*p);とかint*(p);もあり
int* p;とかint *p;みたいにスペース入れてるのは他の宣言hogetype x;のように
型名と変数名を区切るためにスペースが必要になる場合と見た目を合わせてるだけ
0590デフォルトの名無しさん (ワッチョイ 3a13-XpIe)2016/11/18(金) 21:45:07.81ID:7RNwkfhn0
int* p;
なんでC++ の悪習だね
0591デフォルトの名無しさん (ワッチョイ 51a1-/Gnx)2016/11/18(金) 21:56:09.13ID:Z3dj2p9G0
typedef int* INT_POINTER;
INT_POINTER p;
0592デフォルトの名無しさん (ワッチョイ f25a-XpIe)2016/11/18(金) 22:11:34.98ID:gD9+wH1A0
宣言の int a[10];
の[]は配列を宣言するために必要な[]、

式で利用するときの
a[3] = 5;
は、配列の中身にアクセスするための角カッコ演算子

こういった対称性というか一貫性を持たせたということ
ポインタの宣言と利用のときも同じ。
0593デフォルトの名無しさん (ワッチョイ 56e1-RUi6)2016/11/19(土) 00:56:04.67ID:1yryIr4y0
ポインタの宣言周りは代表的なC言語の欠陥

掛け算と同じ*を使う
&や逆参照の*が紛らわしい
型ではなく変数名に*をつける

まだプログラムの文法とか機能がよく考察されてない頃に適当に考えて普及しちゃったのでしょうがない

C#とかでは型を重視するのでint* p,qは両方ポインタになる
注意がいるけど、C#でポインタを使うのはまれだし、かなり制限が厳しいので勘違いしてもコンパイルエラーで気づけるって判断だろうな
0594デフォルトの名無しさん (ワッチョイ b590-RUi6)2016/11/19(土) 01:11:15.86ID:cbZzwZ/B0
>>593
ポインタの文法の一貫性に気づけないとは
0595デフォルトの名無しさん (ドコグロ MM1c-hkLf)2016/11/19(土) 01:25:22.28ID:Z22xlOXbM
参照演算子を左に寄せるか、右に寄せるか一貫性あるならさっさと寄せろ
0596デフォルトの名無しさん (アウアウカー Sa41-478M)2016/11/19(土) 08:14:45.51ID:s9nLugpra
配列の宣言時にはその要素数を明示的にする必要がありますよね?

int 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
>>594
関数ポインタはfuncでも&funcでも&&&&&funcでもいいけど素晴らしい一貫性ですね
0598デフォルトの名無しさん (ワッチョイ 7cd2-RUi6)2016/11/19(土) 08:38:12.97ID:BE9TkxlS0
>>588
コンパイラにとって、基本は、空白に意味はない。
0599デフォルトの名無しさん (ワッチョイ 9c7b-wMId)2016/11/19(土) 08:38:54.94ID:gGKRRZRa0
>>596
引数に渡す場合、アドレスのサイズがわかれば十分

int32 a[ ], int32* p
どちらの表記でも、4byte(32bit)だとわかる
0600デフォルトの名無しさん (ワッチョイ 4090-RUi6)2016/11/19(土) 08:39:34.48ID:k41T9UK80
>>596
領域を確保する必要がないからではないでしょうか?
0601デフォルトの名無しさん (ワッチョイ 5e3c-XpIe)2016/11/19(土) 08:40:02.12ID:O4HKgKoh0
引数での int a[] は int *a と同等

http://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
>>596
配列の先頭のポインタ値が渡されるだけだから。
0603デフォルトの名無しさん (ワッチョイ b57b-SIJ6)2016/11/19(土) 10:10:17.42ID:8T+Z9t5R0
>>596
>配列の宣言時にはその要素数を明示的にする必要がありますよね?
こっちは変数の宣言

>では関数へ引数として配列を渡す場合にはなぜ
こっちは関数引数の宣言

記述方法は似ているが、文法的に異なるもの
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
>>605
どのレスの事を言ってんのかわからんけどポインタも包丁も危険なのは事実だから
危険だからこそ気をつけて使えって話
0607デフォルトの名無しさん (オッペケ Sra9-RUi6)2016/11/19(土) 14:18:11.98ID:TiiNhnqIr
>>606
今時のC言語って、ハードに近い部分の記述にしか使わないのに、ポインターごときで危険とか。
レジスタに書く値間違えただけで、壊れる可能性有るのに。
0608デフォルトの名無しさん (ワッチョイ 325b-nAsy)2016/11/19(土) 14:20:00.25ID:46Hc19Oo0
>>606
そもそも危険という言い回しがおかしいんじゃねー?
ポインターを間違った思い込みでコード書いた場合、予期せぬ動作をするだけであって、善も悪もない。
間違ったコードを書いた本人が失敗しただけ。
GOTO排除と一緒の雰囲気がするな。
0609デフォルトの名無しさん (ワッチョイ 7d4e-Th+s)2016/11/19(土) 14:23:57.44ID:723d8cAJ0
ポインタもgotoも便利に使わせて頂いてるよ
0610デフォルトの名無しさん (ワッチョイ 379b-RUi6)2016/11/19(土) 14:25:05.15ID:g9Pmrtlr0
包丁ほど危険なイメージは無いけどな
せいぜいガラスの灰皿くらいじゃ
0611デフォルトの名無しさん (ワッチョイ 777b-X8JF)2016/11/19(土) 14:31:41.08ID:0cH3YNKy0
>>607
C言語自体が危険と言い換えてもいいけど?
危険なものは危険だと認識して使わないとだめだろ?

>>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
>>611
言語の仕様で、利用者が危険危険いってるだけじゃねーの?
ポインターなしで縛りプレイのC言語なんて冷めたピザのようなものだ。
0614デフォルトの名無しさん (ワッチョイ 325b-nAsy)2016/11/19(土) 14:44:27.57ID:46Hc19Oo0
よくわからんが、バッファーオーバーフローを脆弱性と定義してるのは誰?
観測者がいなければ宇宙は存在しない。
問題を問題としなければ問題とならないし、それは実行後の現象であるわけだ。
仕様なのか、エラーとするかは、作り手しだいじゃねーの?
作り手が、知恵を出してバッファーオーバーフローにならない対策をとればいいんじゃね?
0615デフォルトの名無しさん (オッペケ Sra9-RUi6)2016/11/19(土) 14:47:38.21ID:TiiNhnqIr
>>611
逆に危険な事が出来ない言語は、ハードの制御出来ない。
0616デフォルトの名無しさん (ワッチョイ 7d4e-Th+s)2016/11/19(土) 15:12:41.49ID:723d8cAJ0
デインジャラアスなのな
0617デフォルトの名無しさん (ブーイモ MM0d-RUi6)2016/11/19(土) 15:39:11.83ID:9cnRDmpwM
スタックはオーバーフローするけど
バッファはオーバーランだよね。オーバーフローってどういう状態なんだろう
0618デフォルトの名無しさん (ワッチョイ 379b-RUi6)2016/11/19(土) 15:46:15.93ID:g9Pmrtlr0
どっちも同じことを指してると思うけど
https://en.wikipedia.org/wiki/Buffer_overflow
0619デフォルトの名無しさん (ワッチョイ 56e1-RUi6)2016/11/19(土) 19:35:20.11ID:1yryIr4y0
>>614
雑な詭弁だな
(他の高水準言語と比べて)C言語、特にポインタは危ないって話だろ
バッファオーバーフローだから脆弱性なんじゃなくて、脆弱性の原因がバッファオーバーフロー
知恵を出してならない対策をする必要があるのは危険なんだから当然。初心者には難しいし、高度な技術者でも完全ではない
0620デフォルトの名無しさん (ワッチョイ f25b-S3Pk)2016/11/19(土) 20:03:55.45ID:N6H05B630
元はOS記述言語でもあるから、ロジック、ハードウェア制御、多用途に出来ないといけない。
ドライバも書くし、コンパイラも記述する。
0621デフォルトの名無しさん (ワッチョイ 7742-tQqt)2016/11/19(土) 20:25:13.08ID:O4/w9IIT0
>>617
バッファという有限の器に、その容量を超えてデータを格納する行為

溢れると言う表現でもあながち間違いとは言えないんじゃ
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:oyIzevqQ0
sage
0625デフォルトの名無しさん (ワッチョイ 325b-nAsy)2016/11/19(土) 22:11:29.40ID:46Hc19Oo0
危険じゃなくて、作り手の設計そのものが間違ってるだけ。
危険だからと初心者にあらかじめレッテルを張るのはどーかと思うんだけどな。
壊れても大丈夫な環境で使わせて慣れさせるのが大事なんじゃね?
0626デフォルトの名無しさん (ワッチョイ be17-tQqt)2016/11/19(土) 23:54:31.43ID:RTOSNdEW0
スクリプター風情がプログラマーの真似すると火傷する
0627デフォルトの名無しさん (ワッチョイ 51a1-/Gnx)2016/11/20(日) 00:24:22.29ID:ISNLrJ750
>壊れても大丈夫な環境
NEC PC-98の古い機種には、リセットボタンがあった。リセットすると再起動した。
MS-DOSだから、インストールもたいしたことなかったから、Cは、もちろん、アセンブラに適していたとおもう
アセンブラやってたら、寿命がちじまるおもいがした
0628デフォルトの名無しさん (ワッチョイ 627b-RfK+)2016/11/20(日) 00:38:38.36ID:x1F526JX0
フロッピーディスクを何枚もとっかえひっかえしていたあの単調作業がたいしたことなかっただと?
0629デフォルトの名無しさん (ワッチョイ 6d17-ihSy)2016/11/20(日) 00:38:46.44ID:RSV7nlYW0
いまなら OS に VM が付いてるじゃまいか。
あれなにやってもチェックポイントに戻せば済むからホントに便利。
0630デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)2016/11/20(日) 00:46:21.74ID:zuVL9nD+0
プロトタイプ宣言って何なの?
なぜこれを書かなきゃいけなくて、中身の実装と分離しなきゃいけないのか
わかなん。
0631デフォルトの名無しさん (ワッチョイ 3fd2-RUi6)2016/11/20(日) 00:48:37.09ID:CuaHUiLn0
>>629
今時、Windows とか、linuxとか上のアプリをC 言語でなんて組まない。
0632デフォルトの名無しさん (ワッチョイ 7742-tQqt)2016/11/20(日) 00:50:29.78ID:VXCu+bTp0
>>627
初期のMS-DOSには、アセンブラなどが同梱してたね
0633デフォルトの名無しさん (ワッチョイ f6ed-tQqt)2016/11/20(日) 01:08:55.48ID:8/S9xgLL0
>630
小さなプログラム/プロジェクトならいらない。
大きなプログラム/プロジェクトだと無いと不便。
0634デフォルトの名無しさん (ワッチョイ be17-tQqt)2016/11/20(日) 01:15:26.23ID:Bt0RvCI60
>>630
ソースファイル単位でしかオブジェクトファイルを生成できないから
オブジェクトファイルが他のオブジェクトファイルのリソース(関数や変数)を使用するために
他のオブジェクトファイルどういうリソースを持っているかを知るために必要
0635デフォルトの名無しさん (ワッチョイ 4e68-UUEt)2016/11/20(日) 07:06:02.33ID:kpvFXroJ0
お前らおはよう
githubで↓みたいなコードを見つけたんだが、これのsizeof(*obj)って言語仕様的に合法なの?
struct obj *obj = malloc(sizeof(*obj));
0636デフォルトの名無しさん (JP 0H0d-2BAc)2016/11/20(日) 08:53:14.18ID:rUGeTkRIH
>>630
言語とコンパイラの設計が
大昔のメモリもパワーもわずかなゴミ同然のハードを前提としてて
それを大事に継承しているから
0637デフォルトの名無しさん (ワッチョイ 3fd2-RUi6)2016/11/20(日) 09:03:19.03ID:CuaHUiLn0
>>630
関数を記述する順番を変えれば、プロトタイプ宣言は必要ない。

そうすると、main関数が最後尾とかになるから、見ずらくなるけど。
0638デフォルトの名無しさん (ワッチョイ b57b-RUi6)2016/11/20(日) 09:35:03.71ID:HWcRBAeS0
633 に同意
複数の人間で一つのソースファイルを同時には弄れないからね
0639デフォルトの名無しさん (ワッチョイ fe16-u2Hn)2016/11/20(日) 09:56:59.79ID:hwyvqIzJ0
>>635
たぶん合法だと思う
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/AX0
>>631
openglやらdirectxやらwin32apiなど、普通にC/C++使ってアプリ作るけど?
0641デフォルトの名無しさん (ワッチョイ 4090-RUi6)2016/11/20(日) 10:49:23.14ID:YyLE8LOD0
>>627
最近はCで書いてあっても^cで止まったりするけどね。
0642デフォルトの名無しさん (ワッチョイ 4e68-UUEt)2016/11/20(日) 18:00:06.75ID:kpvFXroJ0
>>639
VLA を知らなかったのでググったけど可変長配列のことか
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
>>643
プロトタイプ宣言の意味すら理解していないレベルで何言ってんの?
0645デフォルトの名無しさん (ワッチョイ 777b-X8JF)2016/11/20(日) 18:56:13.71ID:bRgpXaT+0
>>644
ヒント:ネタ
0646デフォルトの名無しさん (ワッチョイ 8017-XpIe)2016/11/20(日) 19:06:52.36ID:FQAOwFla0
参照型はスタックを何バイト消費するのだろうか?
sizeof 演算子は参照先の実体の型サイズを返すのはわかっているんだが。
0647デフォルトの名無しさん (ワッチョイ 4090-RUi6)2016/11/20(日) 19:13:13.43ID:YyLE8LOD0
参照型は微妙にスレチだよな。
0648デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)2016/11/20(日) 19:45:32.89ID:Y223jndk0
>>643
まあ、やめた方がいいよ


会社のためにも 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
もともとCにはプロトタイプ宣言もなかったので、
定義の順番を考慮する必要があったが、
プロトタイプ宣言が導入されてその必要がなくなったということらしい。
0651デフォルトの名無しさん (ワッチョイ 7742-tQqt)2016/11/20(日) 20:46:49.48ID:VXCu+bTp0
>>649
複数ソースに分けてプログラムを作成するような経験は持っていないの?
0652デフォルトの名無しさん (ワッチョイ 5e3c-XpIe)2016/11/20(日) 20:55:48.97ID:k7LsjqbH0
プロトタイプの存在を無きものにするということは
コンパイル時にシンボルから引数と戻りの型が類推できる為の情報が収集済みである必要があるが
スクリプト系のヴァリアント型を採用してる言語ならありえる話だけど C言語じゃなぁ・・・
0653デフォルトの名無しさん (ワッチョイ 4090-RUi6)2016/11/20(日) 21:24:14.45ID:YyLE8LOD0
全ソースを一度に読み込んでコンパイルすればいい。
0654デフォルトの名無しさん (ワッチョイ f6ed-tQqt)2016/11/20(日) 21:29:11.19ID:8/S9xgLL0
誰だかしらん奴の言う一つの例で、誰だかわからん人を無能認定しろという無茶ぶり。
0655デフォルトの名無しさん (ワッチョイ 9c7b-wMId)2016/11/20(日) 22:16:27.48ID:zhAQ+Nfm0
巨大な1つだけのヘッダファイルを使って、作るのはやめましょうって、
確か、セガ本に書いてあったw

会社では、独力の仕事なんて無いから、上司は技術力よりも、
指導力・コミュ力・人に好かれるか・常識があるか、つまりチームワークが優先される

君は色々なことを他人に教えて、尊敬されたり好かれたりしているか?
0656デフォルトの名無しさん (ワッチョイ 4359-XpIe)2016/11/20(日) 22:49:19.68ID:hxNwjLKU0
ヘッダ1つにされると、ヘッダ弄った時の再ビルドに時間が掛かって面倒
0657デフォルトの名無しさん (ワッチョイ 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:s75jnKW40
ヘッダのじゃなくて前方宣言を要らないって言ってるのでは?
0661デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)2016/11/21(月) 03:37:12.29ID:q1m1IXb30
.h と中身の実装を一緒にしてはいけないの?
0662デフォルトの名無しさん (ワッチョイ 627b-RfK+)2016/11/21(月) 03:46:13.54ID:Bv8mdyId0
ヒント:部品化と再利用
0663デフォルトの名無しさん (ワッチョイ 627b-TdGY)2016/11/21(月) 03:53:46.33ID:Bv8mdyId0
さらに言えばその思想を更に突き詰めていけばオブジェクト指向のクラスの宣言と実装に至る
0664デフォルトの名無しさん (ワッチョイ 627b-KUU4)2016/11/21(月) 04:00:56.06ID:Bv8mdyId0
言い換えればインタフェイスとプロセスの分離と言ってもいい
0665デフォルトの名無しさん (ワッチョイ bdfd-DGos)2016/11/21(月) 07:54:09.28ID:VwKZ+S890
大規模開発やったことの無い人なんだろう。
つまり経験不足。
0666デフォルトの名無しさん (アウアウカー Sa41-2XGH)2016/11/21(月) 08:08:13.31ID:rZbWoJvra
ソースとヘッダをいちいち直すのが面倒なのは分かる。それが無駄だと思ってるのはコンパイラとリンカの仕組みを知らないからだろう。
0667デフォルトの名無しさん (ワッチョイ 7742-XpIe)2016/11/21(月) 08:09:43.07ID:VFteHQsb0
Privateもヘッダで宣言せにゃならんとか分離できてないよ!
0668デフォルトの名無しさん (ワッチョイ 9c4f-XpIe)2016/11/21(月) 08:24:15.35ID:RWHjIZlz0
C言語の構造に疑問を感じるのなら ここで愚痴るより
新しい言語作るなり、どっかのスタンダード委員会みたいなのに提案するなり
もっと建設的な方向にパワー使えばいいのに
それが嫌なら長いものに巻かれろ
0669デフォルトの名無しさん (ブーイモ MMb8-PKBG)2016/11/21(月) 08:24:49.62ID:cpCOb7HjM
へ?プライベート相当はstaticにしてソース内だけだろ
0670デフォルトの名無しさん (ワッチョイ 627b-RfK+)2016/11/21(月) 08:25:09.15ID:Bv8mdyId0
>>667
抽象的な概念でロジックを考えられない人だな、頭が固すぎる
コーディングはロジカルである必要があるが、設計は柔軟にものごとを捉えないと致命的なミスするぞ
0671デフォルトの名無しさん (JP 0H0d-2BAc)2016/11/21(月) 09:30:31.51ID:NLM6L+VlH
>>660 以外は意図を正しく汲み取れず不整合をバラまくバグ製造機の群れ
0672デフォルトの名無しさん (ワッチョイ 88ff-d8X5)2016/11/21(月) 10:43:56.10ID:RFCc0VFb0
最近できた言語はこれ解決してるからな、みんななんとかしたいとは思ってるんだろう
0673デフォルトの名無しさん (ワッチョイ 7d4e-Th+s)2016/11/21(月) 13:46:24.21ID:s75jnKW40
実際、パーサーがもうひと頑張りすれば前方宣言は要らないよw
0674デフォルトの名無しさん (ブーイモ MMb8-PKBG)2016/11/21(月) 15:56:23.25ID:vyvBWDN0M
草うぜえ
ワンパスで済むように言語仕様が決められてるのは有名な話だろ
0675デフォルトの名無しさん (ワッチョイ 7d4e-15x9)2016/11/21(月) 16:01:53.80ID:s75jnKW40
>>674
なにこら
0676デフォルトの名無しさん (オッペケ Sra9-RUi6)2016/11/21(月) 16:07:45.13ID:VPZ9Lleqr
>>668
それがC++だろ?

ハード回り記述するには、Cの様な低レベルの言語が必要だから、残ってるだけで。
0677デフォルトの名無しさん (アウアウカー Sa41-RUi6)2016/11/21(月) 16:51:18.97ID:cDH5AbC+a
#include <stdio.h>

int 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+a
特にこの辺が
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;
}
0679デフォルトの名無しさん (ワッチョイ 7c7b-pYnr)2016/11/21(月) 17:00:30.91ID:pqkU0qrI0
lyに値が代入されないで比較されてるから未定義踏んでる
0680デフォルトの名無しさん (ワッチョイ 9c4f-XpIe)2016/11/21(月) 17:04:40.52ID:RWHjIZlz0
× leap_year(year);
○ 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:lC6EtNP00
質問ですが、malloc()で確保した領域ってポインタ変数から求めることってできないですよね?

p = malloc(sizeof(int) * 10);

pからint * 10個分のサイズを求める方法です。
sizeof(p)とかだとポインタ変数そのもののサイズ返っちゃうので…
0683デフォルトの名無しさん (ワッチョイ 5e3c-XpIe)2016/11/21(月) 18:31:40.59ID:/VfGG7xI0
一般的にはない
0684片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK3f-I7Id)2016/11/21(月) 18:32:11.30ID:bG1+lpHYK
>>682
VC++なら_msize関数で調べられるよ。
0685デフォルトの名無しさん (ワッチョイ 21c1-wlUq)2016/11/21(月) 18:38:45.16ID:lC6EtNP00
>>683,684
早い返答ありがとうございます。
0686デフォルトの名無しさん (ワッチョイ f94a-E4Cj)2016/11/22(火) 17:30:15.40ID:EJKURZYz0
>>573
同じようなもんだろ
0687デフォルトの名無しさん (ワッチョイ f94a-E4Cj)2016/11/22(火) 17:34:12.52ID:EJKURZYz0
>>612
出ましたが何か?
0688デフォルトの名無しさん (ワッチョイ 7d7b-RfK+)2016/11/22(火) 17:41:26.43ID:Dpe+NpW20
>>686
大体同じだけど参照型はポインタ型より少しだけ制約がキツイ
参照先の変数と一心同体なので後から参照先を変更できないなどの制限がありポインタ型ほどの汎用性はない
0689デフォルトの名無しさん (ワッチョイ 9c42-XpIe)2016/11/22(火) 17:49:54.19ID:4PGb+L/B0
たったそれだけのために何故そんなもの作ったのか…
0690デフォルトの名無しさん (ワッチョイ 7d7b-RfK+)2016/11/22(火) 18:08:36.33ID:Dpe+NpW20
簡単に言えば、ポインタには自由度が高い故のvoid型という爆弾が存在するから
参照型にはNULLやvoidといった危険性はない
使い方はプログラマ任せだから好きな方を使えばいい
0691デフォルトの名無しさん (ワッチョイ 56c0-E4Cj)2016/11/22(火) 21:42:01.32ID:OGV+KtfX0
NULLあるけど
0692デフォルトの名無しさん (ワッチョイ 21c1-wlUq)2016/11/22(火) 22:38:27.81ID:OzCA27jB0
mallocで領域確保してそれを超えて参照してもsegmentation faultにならないのって
ただ単に超えて参照または代入しても保証がないだけで動くってことですか?
http://ideone.com/wqJgDJ
こんな感じです
0693デフォルトの名無しさん (ワッチョイ f6ed-tQqt)2016/11/22(火) 22:49:56.93ID:Wtg38NdV0
8/16bit時代、1参照、1書込み毎に範囲内か調べてたら遅くてやってられんと思う。
0694デフォルトの名無しさん (ワッチョイ 5e3c-XpIe)2016/11/22(火) 22:51:15.11ID:sjyT5v3d0
参照または代入しても保証がない と保障する対象に動くことも含まれてるからー
0695デフォルトの名無しさん (ドコグロ MM42-RUi6)2016/11/22(火) 22:54:19.44ID:UnyRIXzkM
MMUとか特権モードが何たら。
0696デフォルトの名無しさん (ワッチョイ 4041-N7ik)2016/11/22(火) 23:12:10.53ID:XcHO1PTK0
論理アドレスが割り当てられてればpage fault/segmentation faultは起きない。アドレス割り当てはページ単位にされる。
0697デフォルトの名無しさん (ワッチョイ 4359-XpIe)2016/11/22(火) 23:32:44.32ID:mJXNpUM30
物理割り当たってようがWriteアクセス時とかにpage faultは起きるけど?
0698デフォルトの名無しさん (ワッチョイ 6d17-1ibN)2016/11/22(火) 23:37:01.24ID:13tmJwp70
mallocとcallocってどう使い分けたらいいんですか?
0699デフォルトの名無しさん (ブーイモ MMb8-RUi6)2016/11/22(火) 23:38:57.32ID:uqAJBopXM
>>698
最初にゼロ初期化が必須でどうしても1行でさえ削りたいとき
0700デフォルトの名無しさん (ワッチョイ 4041-N7ik)2016/11/22(火) 23:47:36.02ID:XcHO1PTK0
>>697
あ、そうなんだ。すまぬ。x86でもそうなの?
アーキテクチャとかMMUによって色々ありそう
0701デフォルトの名無しさん (ワッチョイ 4041-N7ik)2016/11/23(水) 00:01:35.98ID:0ca0t95d0
あ、すまん、めっちゃ勘違いしてる。page faultはpage outしてれば発生するね
0702デフォルトの名無しさん (ワッチョイ 4359-XpIe)2016/11/23(水) 00:08:08.18ID:/PS3RTbl0
linuxのcopy-on-writeとかpage fulatありきの実装でしょ
mm自体は親プロセスからコピーしてきてpteのwrite落として、次回write時にpage fault起こさせてコピーする
0703デフォルトの名無しさん (ワッチョイ be17-tQqt)2016/11/23(水) 00:44:42.46ID:2wwg+wZ40
callocの存在ってホントしょうもないよな
malloc+memsetでいいし
0704デフォルトの名無しさん (ワッチョイ ad5b-5YT/)2016/11/23(水) 03:03:37.25ID:c4UU4/b00
if(func1() == false) goto END;
if(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
>>704
&& と || について調べるがよろし

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
>>704
関数ポインタの配列に入れて、ループで処理するくらいかな
0707デフォルトの名無しさん (ワッチョイ 9c42-XpIe)2016/11/23(水) 03:48:38.81ID:9vjIiHEP0
えー
IF文の山は察するに、下位関数の処理がエラーなく成功したか知りたいんだろう
ENDの先にあるのはエラーログ出力と解放処理
だから実際は頭やFuncの合間にごちゃごちゃ処理したりメモリ確保したり初期化したり
その方法はたぶん使えない

何より処理の本体がIF分のカッコの中にあるのは
うつくしくない

それで悩んだことあるから俺も知りたい
最近の言語なら例外投げりゃ終わる話なんだが
0708デフォルトの名無しさん (ブーイモ MMb8-PKBG)2016/11/23(水) 03:54:37.89ID:AJy4iIV9M
if文の山のままにする
下手にマクロで外見だけきれいにしてもわかりにくいだけ
0709デフォルトの名無しさん (ワッチョイ 5e25-RUi6)2016/11/23(水) 04:20:13.07ID:nnaMnGFb0
>>707
んー ログ出力と解放で長くなるのは、ワークをstructに纏めて別関数に切り出せば短くできると思うんだけど どうかな

ifブロックに処理の本体を入れたくないのは同意
例外的な処理をブロック内に書くなら
>>705の下段のほうの書き方ですね

他の別手段となると、setjmp,longjmpかなぁ
安易にオススメはしかねますが
0710デフォルトの名無しさん (ワッチョイ 5e25-ot6h)2016/11/23(水) 04:39:54.01ID:nnaMnGFb0
>>707
> 何より処理の本体がIF分のカッコの中にあるのは

あ、このカッコって "{ }" じゃなくて "( )" のことか
勘違いしました >>709の二段落目は撤回させてください
0711デフォルトの名無しさん (ワッチョイ 51a1-/Gnx)2016/11/23(水) 05:57:18.66ID:8cJNovPT0
>if(func1() == false) goto END;
func1がほとんど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:8cJNovPT0
>if(func1() == false) goto END;
func1がほとんど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:3bpGFKbx0
>>704
1個上の関数を作ってOKとNGの処理はそっちに書く
if ... return false;
のみが並んでいる様はある意味美しい
0714デフォルトの名無しさん (ワッチョイ b52b-tQqt)2016/11/23(水) 08:26:37.25ID:d4ZoXUs70
>>704
>>713 の案と
100個も関数があるなら、上位関数の自動生成とかかなぁ・・・。
0715デフォルトの名無しさん (ワッチョイ 51a1-/Gnx)2016/11/23(水) 11:07:11.58ID:8cJNovPT0
/* boolfunc.c */
#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
>>689
その方が安全だから
const もただ変更を禁止するだけだろ
同じようなもん
0717デフォルトの名無しさん (ワッチョイ 6d17-ihSy)2016/11/23(水) 11:43:17.28ID:oznP3ijp0
その昔、こんな書き方してたような。。

KATA 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:oznP3ijp0
x res = res && funcs[ i ];
o res = res && funcs[ i ]();
0719デフォルトの名無しさん (ワッチョイ 7742-tQqt)2016/11/23(水) 11:58:56.09ID:egCcLczt0
>>704

setjmp、longjmpの使用を検討してみる
0720デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)2016/11/23(水) 13:26:41.07ID:H2HeAnI30
>>704
ベタ書きしたいなら
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:H2HeAnI30
どこから順次依存が...
0723デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)2016/11/23(水) 15:26:22.40ID:H2HeAnI30
>>704
よく見たら 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
>>704
関数ポインタの配列を回すってのはダメ?
for (i = 0; i < 100; i++) {
 if (func[i]() == false) {
  goto END;
 }
}
OK;
0726デフォルトの名無しさん (ワッチョイ e03c-1FI9)2016/11/23(水) 17:34:22.51ID:RJFVO47a0
いくつか案が出てるけど>>704はfunc1, func2, …
と実行される途中でエラーならgoto ENDなんだから
全部(func100まで)実行させる案は間違い
0727デフォルトの名無しさん (ワッチョイ f25b-S3Pk)2016/11/23(水) 17:43:05.24ID:KZKapa0x0
だからループでまわして、エラーだったらループしない例だけど?
0728デフォルトの名無しさん (JP 0Ha1-RUi6)2016/11/23(水) 17:47:45.52ID:TvV9/Z/PH
>>711みたいなやつのことだろ
0729デフォルトの名無しさん (ワッチョイ be17-tQqt)2016/11/23(水) 17:50:09.32ID:2wwg+wZ40
>>725の案、既に>>720が出してたねスマン。

>>726は||や&&で繋げるなってことを言いたいのだろか?短絡評価で検索!
0730デフォルトの名無しさん (ワッチョイ e03c-1FI9)2016/11/23(水) 18:08:02.60ID:RJFVO47a0
>>728
そう

>>729
> ||や&&で繋げるなってことを言いたいのだろか?
いや、全部(func100まで)実行させるのが間違いというだけで
例えば>>705の&&の処理は間違いで||の処理はOK
0731デフォルトの名無しさん (ワッチョイ e03c-1FI9)2016/11/23(水) 18:12:44.83ID:RJFVO47a0
>>730
まちがった。&&の処理もOKか
0732デフォルトの名無しさん (ワッチョイ be17-tQqt)2016/11/23(水) 18:27:17.87ID:2wwg+wZ40
>>731
&&もOK!
0733デフォルトの名無しさん (ワッチョイ 21c1-wlUq)2016/11/23(水) 21:56:07.11ID:DC/Sl7sd0
自分もCの構文について勉強中なので頭おかしい書き方かもしれないですが
>>704 の問題ってこういうのは文法的にだめなのでしょうか?
http://ideone.com/bIw0Pj
マクロってこういう使い方できないのかなぁ?
0734デフォルトの名無しさん (ワッチョイ be17-tQqt)2016/11/23(水) 22:05:06.19ID:2wwg+wZ40
>>733
マクロはプリプロセッサ処理だから出来ない
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
>>734
>>735
やっぱりむりかー。有難うございます
0737デフォルトの名無しさん (ワッチョイ 3f5b-RUi6)2016/11/23(水) 22:17:47.26ID:Mionv/jp0
何で試さないのかわからん
0738デフォルトの名無しさん (ワッチョイ 5e3c-RUi6)2016/11/23(水) 22:25:06.63ID:H2HeAnI30
>>733
無理
PL/1 ならプリプロセッサでループとかも組めるからそう言うことができる
0739デフォルトの名無しさん (ワッチョイ 9fcf-RAPI)2016/11/23(水) 22:58:47.69ID:r99ZucNs0
普通のプログラマーって毎日何行くらいのコードを書くのですか?
0740デフォルトの名無しさん (ワッチョイ 3f5b-RUi6)2016/11/23(水) 23:06:07.25ID:Mionv/jp0
マ板池
0741デフォルトの名無しさん (ワッチョイ be17-tQqt)2016/11/23(水) 23:06:39.10ID:2wwg+wZ40
コーダーじゃあるまいし行でカウントしないよ
作る物によってまちまち
0742デフォルトの名無しさん (ワッチョイ 4041-pYnr)2016/11/23(水) 23:08:58.80ID:0ca0t95d0
300から500stepくらいじゃない?
0743デフォルトの名無しさん (ワッチョイ f37b-sOXq)2016/11/24(木) 01:23:10.29ID:Zr2e1rn70
C++の変態ライブラリー Boostにはプリプロセッサでループ(256まで)できるものがあるのだよ
それはC++の機能使ってないから同じ事をCでもできる
0744デフォルトの名無しさん (ワッチョイ 3b4a-arwi)2016/11/24(木) 15:37:39.77ID:dqXjfCs70
>>743
どんなヤツ?
ここに貼ってくれ
0745デフォルトの名無しさん (ワッチョイ 274f-lM3r)2016/11/24(木) 16:29:02.04ID:25EMGrnD0
ぐぐったら preproceccer.hpp の BOOST_PP_REPEAT がそれっぽい

(けど、マクロ引数の数が可変個をサポートしてないとまずいっぽくね?)
0746デフォルトの名無しさん (ワッチョイ 274f-lM3r)2016/11/24(木) 16:30:11.63ID:25EMGrnD0
× preproceccer.hpp
○ preproceccer/repeat.hpp
0747デフォルトの名無しさん (ワッチョイ 3b4a-arwi)2016/11/24(木) 16:31:48.17ID:dqXjfCs70
>>746
貼ってくれ
0748デフォルトの名無しさん (ワッチョイ 274f-lM3r)2016/11/24(木) 17:04:18.24ID:25EMGrnD0
>>747
記述
#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
hppの中身みると可変個関係ないのと、展開後の第一引数のリテラルが違ってた
マクロのエッセンスは

# 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
>>749
いかにも 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:Zr2e1rn70
愚直に並べようと思ったらコピペコードになるか他のスクリプト言語が必要になるかでメンテナンス性良くないよね
0753デフォルトの名無しさん (ワッチョイ 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:DBLcIfh00
Wikiでも見れ
https://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
過去には6ビットのとか、9ビットのもあったのよ
今も40ビットとかはあるよ
0756デフォルトの名無しさん (ブーイモ MMc7-/sNf)2016/11/25(金) 03:20:13.32ID:xynsEkAbM
>>753
英語圏で1文字表すのに大文字数字記号で6ビットが最低限必要だった。
このひとかたまりをバイトと呼んだ。
小文字も入れたいねってことで7ビットになった。
2の累乗が切りがいいので8ビットが主流になった。
もう1ビットあっても便利じゃねってことで9ビットのも生まれた。
0757デフォルトの名無しさん (ワッチョイ a77b-rAFo)2016/11/25(金) 03:42:31.45ID:LUQ3xuK+0
>>753
バイトというのは英字一文字の文字コードを表現するのに必要なビット数のこと
現代ではASCII/UTF-8の8ビットがデファクトスタンダードだけど、歴史的にはそれ以外もあった

通信分野とかでは曖昧さを避けるために8ビットを1オクテットということもあるらしい
0758デフォルトの名無しさん (ワッチョイ 9ba1-RiO0)2016/11/25(金) 05:04:48.46ID:SAUV2i1i0
ニブルは4ビットのことである。
オクテットの半分でもある。1ニブルは16通りの値を持つことができ、十六進法1桁で表現されることが多い。
4ビットCPU

ニブル
-Wikipedia
0759デフォルトの名無しさん (ワッチョイ 4fc0-arwi)2016/11/25(金) 05:49:03.35ID:BJ+HV0lL0
安い電卓は4ビット
0760デフォルトの名無しさん (ワッチョイ 3717-lM3r)2016/11/25(金) 05:51:42.82ID:n3LE76D70
4ビットのニブルだと当然ながら処理もにぶる。
0761デフォルトの名無しさん (ワッチョイ 6f7d-Kail)2016/11/25(金) 07:37:58.29ID:NJ3Sw+wm0
テレタイプはたしか5ビット(5単位)だったね。
アルファベットの大文字しかつかわないから、それでも良かったのだろう
0762デフォルトの名無しさん (ブーイモ MMc7-/sNf)2016/11/25(金) 09:17:42.00ID:xynsEkAbM
>>761
https://ja.m.wikipedia.org/wiki/Baudot_Code
こいつか
シフト状態で数字と記号なのか
0763デフォルトの名無しさん (ワッチョイ 3790-/sNf)2016/11/25(金) 23:19:32.47ID:omys+CZJ0
ニブルよりニップルが過ぎ
0764デフォルトの名無しさん (ワッチョイ ef17-sTmH)2016/11/26(土) 00:43:33.55ID:F0mRQ3Kb0
Verilogとかで4bitCPU組んでみては?
CPUの勉強になるよ
0765デフォルトの名無しさん (ワッチョイ dbbd-TEJY)2016/11/26(土) 04:38:02.03ID:QJATEtRs0
じゃあもう1つ知りたいのが、
上記で紹介してくれた 7ビットや 9ビットみたいな例外はあるけど、
どうして、コンピュータアーキテクチャは8 → 16 → 32 → 64
みたいに指数倍で増えていくの。
バイト単位なら 8 の次は16が切りのいいのは分かる。
でもどうして次は 32? 24ビットは(ありかもしれないけど)
どうしてあまり聞かないの?
32次は 40 48 56ビットはあまり聞かないの?有ってもいいはずだが。

なぜこんなことが気になるかというと、これが指数倍で増えていく
ことでビットとビット長の話が混乱するときがあるんだよ、
これを間違えると全然次元の違う大きさの勘違いをしちゃう。
0766デフォルトの名無しさん (ワッチョイ 2f68-7iL3)2016/11/26(土) 04:41:51.13ID:ekMvAYYX0
二進数を勉強したらわかるかも
0767デフォルトの名無しさん (ワッチョイ 4fe1-/sNf)2016/11/26(土) 05:02:34.45ID:sqDmBENv0
32bitアーキテクチャでは、32bit単位で扱うのが最も効率がよい設計になってる
なので、32bitで足りない整数とかは32bitを2個組み合わせて64bitにして使ってた
新しいアーキテクチャを考えたとき、その64bitの変数を扱いやすいのは64bitアーキテクチャ

しかも、チップのパーツも32bitのを2つ使うことで対応できるものも多い、多分だけど32bitのエミュレーションにも有利などの利点もある

結果、48や56を選ぶ理由がないので64bitを選ぶのが妥当
0768デフォルトの名無しさん (ワントンキン MM6f-/sNf)2016/11/26(土) 07:21:41.23ID:8puRDqreM
SHARCのPMは48ビット幅 DMは40ビット幅
0769デフォルトの名無しさん (ワッチョイ f352-sNoz)2016/11/26(土) 09:33:45.60ID:+6FeJUFM0
ソフトウェアがCPUのビット数の変更にリコンパイルだけで完全に対応できるようになっていればいいんだけどね
8->16->32->64と増えるにしたがっていろいろ工夫されて大分マシにはなってきたけど、
まだbit数の変更にシームレスに対応できるような状況ではなくて、
CPUのビット数の変更に対応するのは力業が必要な大仕事になる

つまりビット数の増加による仕事の増加を最小限にとどめたいという業界の意向で、主要アーキテクチャは倍々に進化してる
0770デフォルトの名無しさん (ワッチョイ 3f5a-lM3r)2016/11/26(土) 10:27:19.45ID:zPX+1d/90
>>765 .>>768-769
nビットマイクロプロセッサとか言ってもどこの幅を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:bbR0YbTs0
大学時代(1960年代前半)に学生実習用に設置してあった
HITACHI HIPAC-101というコンピュータは、かの後藤英一先生発明の
パラメトロンを使ったコンピュータで、1短ワードが21ビット、
1長ワードが42ビットで、ドラムメモリーは単ワードで8196ワード
長ワードでは、4096ワードというものだった。
当時のコンピュータはアドレス方式も
1−アドレス、2−アドレス、3−アドレスとあり、
コンピュータメーカーによって、それぞれ違っていた。
昔話で失礼しました。
0773デフォルトの名無しさん (ワッチョイ 3790-/sNf)2016/11/26(土) 13:50:06.80ID:9O78pGAU0
でも、64bitの次が128bitかは分からないよね。
0774デフォルトの名無しさん (エーイモ SEc7-AQyI)2016/11/26(土) 15:13:19.80ID:bzgbnbD5E
if (条件) {
Aの処理
} 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:Gs7ISwHiM
デバッガ使え
0776デフォルトの名無しさん (JP 0Hc7-yHww)2016/11/26(土) 15:45:09.16ID:e21MHUPRH
デバッガ使って A,B それぞれにブレークポイントを置いて
どちらで止まるかを見る

あるいは if 文の少し前に仕掛けて
止まった後ステップ実行してどちらに入るかを見る
0777デフォルトの名無しさん (エーイモ SEc7-AQyI)2016/11/26(土) 18:43:44.77ID:bzgbnbD5E
なるほどデバッガおぼえてみます
0778デフォルトの名無しさん (ワッチョイ 135b-/sNf)2016/11/26(土) 20:02:07.98ID:kt6l6/cF0
printfありきで作ってもいいのよ
デバッグオプションでprintf動かなくすりゃいい
0779デフォルトの名無しさん (ブーイモ MMaf-4iO2)2016/11/26(土) 20:17:38.87ID:2CwsFwNqM
単体テストできるように関数作るからデバッガ滅多に使わない
0780デフォルトの名無しさん (ワッチョイ 93d4-w4Yy)2016/11/26(土) 21:56:50.10ID:eOe/vy6Y0
そうだなあ、ログファイルを出力する、テスト用関数を作って、それを仕込むかな。
fprintf(fp,"%s %d\n",__FILE__,__LINE__); とかやって。

デバッガー駆使できる人って、結構すごいと思う。
ループの1回目で引っかかるようなエラーなら、デバッガーで見つけやすいけど。
ループの数十回目でやっと引っかかるようなエラーだと、デバッガーで
ループを1STEPずつ実行するのが辛い。いいやり方があるのか、そこは知らないけど
0781デフォルトの名無しさん (ワッチョイ 135b-/sNf)2016/11/26(土) 22:04:37.74ID:kt6l6/cF0
んなもん条件付のブレークポイント仕掛けりゃいいだろうよ
0782デフォルトの名無しさん (ワッチョイ f37b-sOXq)2016/11/26(土) 22:11:06.80ID:gZtoP9KV0
止めずに値を出力するだけのブレイクポイント(と言っていいのか?)を設定する事も出来るしな
0783デフォルトの名無しさん (ワッチョイ a7d4-w4Yy)2016/11/26(土) 22:36:29.97ID:o/0oOMKg0
>>781-782
おー、そうゆう機能があるのか、勉強になったわ。
今までログファイル出力だけで何とかなってたので、あまりデバッガ活用してなかったんだよねえ。
この機会に学習してみるわ
0784デフォルトの名無しさん (ワッチョイ ef17-sTmH)2016/11/26(土) 23:35:54.26ID:F0mRQ3Kb0
デバッガってGDB?
0785デフォルトの名無しさん (ワッチョイ a359-lM3r)2016/11/27(日) 00:01:06.17ID:hUgSULjY0
さあ?GDBかもしれんし、ICEかもしれん
0786デフォルトの名無しさん (ワッチョイ ef17-sTmH)2016/11/27(日) 00:18:21.07ID:DrgmmtpG0
>>779
最近流行りのTDD(テスト駆動開発)ですね
自分のとこも最近それやりだしましたよ
UnityとかCMockとかFakeFunctionFrameworkとかね
0787デフォルトの名無しさん (ワッチョイ 3fac-pkVQ)2016/11/27(日) 03:30:05.59ID:zRN2fUms0
>>768
DMは32bit、40bitはData Registeの話だよね?

やはり組み込み関係の人が多いのかな?
C89、C99、C11、皆さんの環境はどんなもん?
0788デフォルトの名無しさん (ワッチョイ ef9f-SvbB)2016/11/27(日) 04:47:20.03ID:1yLvwE2L0
職場の話をしたいならマ板逝け
0789デフォルトの名無しさん (ワッチョイ ab7b-/sNf)2016/11/27(日) 05:08:54.18ID:ITwup7+W0
>>787
ハーバードアーキテクチャでggr
物理的に分離されているからSuper が付いてSHARC
0790デフォルトの名無しさん (ワッチョイ f319-rApL)2016/11/27(日) 17:23:19.61ID:Q/59TbJy0
strtokと同じ働きをする関数splitを作成しなくてはいけないのですが分かる方いませんか?
0791デフォルトの名無しさん (ワッチョイ ef17-sTmH)2016/11/27(日) 18:04:13.54ID:DrgmmtpG0
strtokはスレッドセーフじゃないから
なるべく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
>>790
> strtokと同じ働きをする関数
そのままパクればいいんじゃね?
仕事でパクれないならこんなところで聞いちゃダメだろうし
0794デフォルトの名無しさん (ワッチョイ f319-plMA)2016/11/27(日) 21:21:48.68ID:Q/59TbJy0
>>793
学校の練習問題問題として出された問題ですので丸パクリができないんです

>>793
ありがとうございます 参考にして作成してみます
0795デフォルトの名無しさん (ワッチョイ 4fc0-arwi)2016/11/27(日) 21:30:36.25ID:yxkRijzt0
学校の問題ここで聞いてる時点でパクリだろ
0796デフォルトの名無しさん (ワッチョイ 135b-/sNf)2016/11/27(日) 21:48:25.31ID:wcShlNpc0
このご時世にC言語教えるもんなんだなぁ
0797デフォルトの名無しさん (ワッチョイ f319-plMA)2016/11/27(日) 21:59:20.24ID:Q/59TbJy0
>>795
strtokを使っているのを丸パクリしたいけどsplitを使う指示なのでできないという意味です
誤解を招くような表現をしてしまいすみませんでし
0798デフォルトの名無しさん (ワッチョイ 136f-pDAg)2016/11/27(日) 22:02:40.70ID:VgmO9Y8H0
宿題なら「出来ませんでした」で出せよ。実際出来ないんだから
0799デフォルトの名無しさん (ワッチョイ f342-sTmH)2016/11/27(日) 22:05:20.04ID:bsGEIPyZ0
>>797
「strtokと同じ働きをする関数splitを作成しなさい」
と言う雪面なんでしょ?
0800デフォルトの名無しさん (ワッチョイ f342-sTmH)2016/11/27(日) 22:05:50.14ID:bsGEIPyZ0
雪面 じゃなく 設問 ね
0801デフォルトの名無しさん (ワッチョイ f319-plMA)2016/11/27(日) 22:11:37.35ID:Q/59TbJy0
>>798
期末試験の練習問題なのでできるようにしておきたかったんです

>>799
そうです
0802デフォルトの名無しさん (ワッチョイ f342-sTmH)2016/11/27(日) 22:13:18.75ID:bsGEIPyZ0
>>801
自分なりに考えて、ソースを作成する
動作がおかしかったり、やり方が分からなくなったら、ここで聞いてみる
0803デフォルトの名無しさん (ワッチョイ f37b-sOXq)2016/11/27(日) 22:25:29.38ID:YEwu7XTV0
>strtokと同じ働きをする関数splitを作成

#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
getopt関数のoptindってどこを指してるんですか?

$ ./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
使ったことねーけどman読んだ限りでは
-ab
argv[1]のaの処理後bが残ってるので次に処理するのはargv[1]
-a -b
argv[1]のaの処理後次に処理するのはargv[2]
って事では
0806デフォルトの名無しさん (ワッチョイ ef17-sTmH)2016/11/28(月) 01:42:04.96ID:Gk6fJWJP0
splitのサンプル書いたけど行数制限で書き込めんかった残念
0807デフォルトの名無しさん (ワッチョイ 1bbf-/sNf)2016/11/28(月) 01:52:35.94ID:Mp+Qbgrs0
俺も書いたけど書き込めなかった。
0808デフォルトの名無しさん (ワッチョイ dbc1-LXHm)2016/11/28(月) 02:04:01.57ID:WMy0WS1U0
>>805
インデックスが引数を指しているなら
./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
>>801
何も考えずに答えを聞いたら練習にならんじゃん
自分で考えてわかる範囲でソース書いてなんで動かないのか、どこがわかんないのかを聞くんだよ
0811デフォルトの名無しさん (ワッチョイ dbc1-LXHm)2016/11/28(月) 02:37:17.65ID:WMy0WS1U0
>>809
なるほど、なんとなくそれっぽかったです

$ ./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
>811
処理後のインデックスかなるほど納得しました
0813デフォルトの名無しさん (ワッチョイ dbc1-OZZy)2016/11/28(月) 02:45:24.92ID:WMy0WS1U0
nextargindとかにしてほしいわぁ...
0814デフォルトの名無しさん (ワッチョイ 277b-I39F)2016/11/28(月) 04:22:41.92ID:ZvcFWjYe0
optind

次に処理される、位置パラメーターの番号。
引数全体の何番目の文字列を、操作しているのか
0815デフォルトの名無しさん (ワッチョイ 2f68-7iL3)2016/11/28(月) 07:30:30.21ID:w39HqPOF0
optind はわかりづらい
俺もわけわからんちんちんだった
0816デフォルトの名無しさん (ワッチョイ 4fc0-arwi)2016/11/28(月) 07:34:52.81ID:Z2O1T0K90
C/C++の宿題片付けます
http://echo.2ch.net/test/read.cgi/tech/1456911928/
0817デフォルトの名無しさん (ワッチョイ 277b-I39F)2016/11/28(月) 08:35:28.46ID:ZvcFWjYe0
コンテナ.each_with_index {|要素, index| 処理 }

Rubyで、コンテナをループするのに、今処理している順番、indexも渡ってくる

optindの考え方は、それと同じ
0818デフォルトの名無しさん (ワッチョイ ab7b-ZhbG)2016/11/28(月) 08:56:35.72ID:k5kMKlan0
余計、わかりにくいから
ruby厨って本当にキモい
0819デフォルトの名無しさん (ワッチョイ cbfd-znN9)2016/11/28(月) 16:52:45.61ID:4eAISG650
大昔Yahooで見たPC-98+BASIC厨が最悪にキモかった・・・。
0820デフォルトの名無しさん (ガックシ 0607-LXHm)2016/11/30(水) 07:34:54.23ID:sQvK4opq6
C言語でmalloc使って確保した領域を超えて読み書きしてもセグメンテーションフォルトが出ない理由ってなんですか?
カーネルに依頼して確保した領域を超えるとそこはもう許可されていない領域なのでセグメンテーションフォルトが出るのではないでしょうか?
以下の様なコードが平然と実行できてしまう理由が分かりません。超えた部分に関しては保証はないで済まされるかもしれませんが、個人的には保証はないではなくそんな操作は実行できない様にするのがまともな気がします。
あえてこの様にしている理由とかあってあるんでしょうか?

http://ideone.com/7dolzU
0821デフォルトの名無しさん (ワッチョイ 6f3c-lM3r)2016/11/30(水) 07:39:20.59ID:3/kd8nRt0
malloc が 余計目にOSからリクエストしてるんじゃね?
俺は、即死する実装の環境を経験したことあるぞ
0822デフォルトの名無しさん (ワッチョイ cbfd-znN9)2016/11/30(水) 07:46:00.90ID:cdtf8L5P0
全てのCPUにそういう機能があるわけじゃないからじゃね?
0823デフォルトの名無しさん (ワッチョイ 6f3c-lM3r)2016/11/30(水) 07:47:17.92ID:3/kd8nRt0
ああ 逆だ
CPUに超えたら死ぬ機構があるとは限らないから、死ぬことを保障することができない
0824デフォルトの名無しさん (ガックシ 0607-LXHm)2016/11/30(水) 07:49:12.19ID:sQvK4opq6
そういう機能のないCPUはダメなCPUって言っても良いんでしょうか。
そうでなければなにかしらの理由があっての事ですかね?
0825デフォルトの名無しさん (ワッチョイ 6f3c-lM3r)2016/11/30(水) 07:50:16.96ID:3/kd8nRt0
納得いかないなら 余所の言語いって お願い
0826デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)2016/11/30(水) 08:11:03.34ID:AyB9tviA0
>>820
キミよりも10万倍頭の良い人達が何年もかけて作り上げた仕組みなので
「僕の考えた仕組みがサイコー」から離れて、「僕が気づいてない事は何だろう」を考えた方が良いよ
0827デフォルトの名無しさん (ガックシ 0607-LXHm)2016/11/30(水) 08:15:44.90ID:sQvK4opq6
>>826
ですから、あえてこの様にしている理由(自分が気づいてない事)をお聞きしたつもりだったのですが…
自分の考えた仕組みが最高とは一切思っておりません。
0828デフォルトの名無しさん (ワッチョイ cbfd-znN9)2016/11/30(水) 08:31:55.64ID:cdtf8L5P0
PC-98なんてVRAMとかの固定アドレス直接ポインタで叩いてたわ。
0829デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)2016/11/30(水) 08:32:40.83ID:AyB9tviA0
1 システムコールは遅い
2 固定長のページ単位でメモリを管理するCPUが主流
0830デフォルトの名無しさん (ワッチョイ cb19-znN9)2016/11/30(水) 08:42:42.19ID:vxGzOx7A0
Z80ディスってんのか!
0831デフォルトの名無しさん (ガックシ 0607-LXHm)2016/11/30(水) 08:51:31.13ID:sQvK4opq6
>>828
なるほど、1ページあたりの中であればあまり怒られないのかなぁ
1万くらい要素はみ出ててみたらsegmentation faultって怒られました。有難うございました。
0832デフォルトの名無しさん (ワッチョイ 274d-TEJY)2016/11/30(水) 10:53:26.50ID:6/vBGqgM0
>>831
検出したいのならばこういうのを使え。
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:m8TXkg9zH
簡単にまとめると
malloc は C言語(のライブラリ)の機能であり
セグメント違反は OS(あるいはCPU)の機能

それぞれの都合でズレが起きる
0835デフォルトの名無しさん (オッペケ Sre7-/sNf)2016/11/30(水) 12:42:42.56ID:kvXOQWmSr
>>827
そもそも、なんでチェック可能だと思ったんだ?
0836デフォルトの名無しさん (ドコグロ MMb7-/sNf)2016/11/30(水) 12:51:30.50ID:PB8+Xj+IM
>>835
確保時にサイズ指定してるからとかじゃないの
0837デフォルトの名無しさん (ドコグロ MM87-/sNf)2016/11/30(水) 12:59:32.34ID:rbSDaA4dM
自分の考えた仕組みって言ってるけどどこにあるんだ。どうせ考えてないんだろうけど
0838デフォルトの名無しさん (ワッチョイ f342-sTmH)2016/11/30(水) 13:14:06.24ID:tdfWjrvt0
ヌルポンチェックとかメモリーリークとか、そう言うのと同じようにチェックしても良いかもしれないとは思う
コンパイルオプションでそういうことができてもおかしくはないよね
0839デフォルトの名無しさん (JP 0H27-/sNf)2016/11/30(水) 13:41:11.48ID:/ubprRYqH
>>831
怒られないかもしれないけど他のデータを壊して自分が泣くだけだよ
0840デフォルトの名無しさん (JP 0H27-/sNf)2016/11/30(水) 13:43:21.47ID:/ubprRYqH
>>838
そんな遅くなることは面倒見ないっていうのがCのポリシーなんだから
面倒見てもらいたかったら他の言語使うしかない
0841デフォルトの名無しさん (ワッチョイ 57ff-t+9m)2016/11/30(水) 13:46:09.25ID:iDkfno7K0
いや、まあ自分でmalloc相当の必要な分しか取らないやつ作ればいい
0842デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)2016/11/30(水) 14:17:35.77ID:AyB9tviA0
>>841
お前には無理
0843デフォルトの名無しさん (ワッチョイ 57ff-t+9m)2016/11/30(水) 14:33:24.75ID:iDkfno7K0
>>842
別にオレがやるわけじゃないのに何だそのとぼけたレスはw
0844デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)2016/11/30(水) 14:38:22.29ID:AyB9tviA0
>>843
お前は
>まあ自分でmalloc相当の必要な分しか取らないやつ
の作り方を知らない
自分で作らないものを「作れば良い」
滑稽すぎる
0845デフォルトの名無しさん (ワッチョイ f342-sTmH)2016/11/30(水) 15:15:17.96ID:tdfWjrvt0
無理だなんて言うほど難しくはないだろうw
0846デフォルトの名無しさん (ワッチョイ 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:iDkfno7K0
あー作ったのはmallocが無いからその代替物な
0849デフォルトの名無しさん (ドコグロ MM8f-/sNf)2016/11/30(水) 18:43:37.97ID:Z3iWqk1AM
>>820
> C言語でmalloc使って確保した領域を超えて読み書き
何が起きても(あるいは起きなくても)不思議じゃないと言うこと
まあ、実装側から言えばハードウェアとしてはメモリー保護とかの設定はバイト毎に出来る訳じゃなくてページサイズと呼ばれる単位で設定される
ページサイズの大きさは色々あるけど例えば4KBのマシンで1KB確保すると残りの3KBも読み書き出来ちゃうってこと
0850デフォルトの名無しさん (ワッチョイ a359-lM3r)2016/11/30(水) 19:03:46.61ID:ZCK59WbL0
>>838
GCC、glibcなら
MALLOC_CHECK_ とかmudflapとか
0851デフォルトの名無しさん (ワッチョイ 4fc0-arwi)2016/11/30(水) 20:34:42.87ID:/gnC384r0
mallocは1バイト確保でも32バイトくらいのバッファを割り当てて来る
0852デフォルトの名無しさん (ブーイモ MMaf-/sNf)2016/11/30(水) 20:46:59.60ID:nf+OfCoLM
K&Rにmalloc/freeの話しは出てくるやろ
原典ぐらいは読めよ
0853デフォルトの名無しさん (ワッチョイ cfed-sTmH)2016/11/30(水) 21:56:03.11ID:DQrruTiP0
遅くなるからいらん機能つけるな。
0854デフォルトの名無しさん (ワッチョイ ff7b-ZhbG)2016/11/30(水) 22:35:26.64ID:AyB9tviA0
>>847,848
自覚の無い無能って、本当に救いがたい
0855デフォルトの名無しさん (ワッチョイ 6f17-+3uc)2016/11/30(水) 23:05:42.57ID:71XTtE0+0
どの辺が無能なの?
0856デフォルトの名無しさん (ワッチョイ 3eed-/mAi)2016/12/01(木) 00:38:49.30ID:mpw4WZRG0
メモリ1アクセス毎にアドレス範囲内かソフトウェアでチェックするプログラム書いたの?
0857デフォルトの名無しさん (ワッチョイ 9213-ggLi)2016/12/01(木) 03:52:42.58ID:mYjtW65/0
ユーザーランドの malloc ごときに,いちいちカーネルランドの機能を発動するなんて聞いたことないね
0858デフォルトの名無しさん (ワッチョイ 7017-NTgB)2016/12/01(木) 03:55:22.08ID:SwKXepyG0
そもそも論として、ダーティーリードが起きないようリアルタイム監視するなんて可能なの?
そんな機能あったらとっくにデバッガに採用されてるでしょ。
0859デフォルトの名無しさん (ワッチョイ f1dc-8QOf)2016/12/01(木) 06:16:25.60ID:geiQ58AT0
監視付mallocで返す領域をシステム専用ページにしとけば
ユーザプロセスでアクセスする度に一般保護例外が発生して
範囲チェックルーチンに飛ばせるとは思う。

ちょうど『はじめて読む486』をはじめて読んだところなんで原理だけ。
0860デフォルトの名無しさん (ワッチョイ 46d4-HRbE)2016/12/01(木) 06:59:29.80ID:dcHh4xOn0
そんな感じかなあ。
80286でプロテクトモードが実装された頃の大昔には、CPUのディスクリタテーブルに
エントリを追加削除する形で malloc - free を実装してるOSやコンパイラがあったし。
エントリ数(メモリブロック数)に限界があるので、自然消滅してしまったが。

その仕組みを使って malloc を自前で実装すれば、1バイト程度の前後への溢れなら、
例外を起こすことはできそうではあるかな。ただ、1バイトを超えるような溢れだと、
隣接する他の有効なメモリブロックにアクセスできる可能性があるから、
確実に例外を起こすのは難しいかもだけど。
0861デフォルトの名無しさん (ドコグロ MM5c-yaSi)2016/12/01(木) 07:09:39.15ID:rYSe/HxLM
>>858
>>859 みたいな方法でアクセスを監視することは可能だし
purify みたいにコンパイルするときにアクセスチェックするコードを挿入するとかする奴もある
あとダーティーリードとかのオレオレ用語を使うのはやめた方がいい
普通に不正アクセスとか言え
0862デフォルトの名無しさん (ワッチョイ 9213-ggLi)2016/12/01(木) 07:35:52.47ID:mYjtW65/0
>>859
たぶんセグメントテーブルが足りない
0863デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)2016/12/01(木) 08:22:04.50ID:/oX0DDBh0
>>855
この辺(>>847,848)
0864デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)2016/12/01(木) 08:35:43.99ID:/oX0DDBh0
じゃ、>>846の答え合わせ

2ページ確保して2ページ目をアクセス不可にする
2ページ目の先頭アドレス - sizeof(int) * 10
をmallocの戻り値にする

応用問題の方は>>859、i386以降ならデバッグレジスタ使える
0865デフォルトの名無しさん (ワッチョイ 5a7b-BwMM)2016/12/01(木) 09:03:34.80ID:I2kftv/Y0
mallocでページって概念聞いたことないけどどういうもの?
0866デフォルトの名無しさん (ドコグロ 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/Y0
要するに説明できないんだな
0869デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)2016/12/01(木) 09:46:41.41ID:/oX0DDBh0
10年ROMってろ
無能
0870デフォルトの名無しさん (ワッチョイ 5a7b-Dqqc)2016/12/01(木) 09:47:36.98ID:I2kftv/Y0
はいはい、お疲れさん
0871デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)2016/12/01(木) 10:10:32.42ID:/oX0DDBh0
無能を罵る事は労力を必要としないので、恐縮しなくて良いぞ
無能
0872デフォルトの名無しさん (ワッチョイ 2b7b-YXL0)2016/12/01(木) 10:28:15.10ID:dYbgWN5h0
C言語の規格そのものにはページという概念はないだろ
実際にメモリをどう割り当てるかは処理系依存ではないのか?
0873デフォルトの名無しさん (ドコグロ MM5c-yaSi)2016/12/01(木) 12:48:53.85ID:rYSe/HxLM
ページングシステムがない環境でもC言語が使えるからあたりまえ
0874デフォルトの名無しさん (トンモー MM41-E9Xg)2016/12/01(木) 19:59:11.58ID:cSMR0IopM
Cは全くの環境依存だと思います。

バウンダリでfaltなんてのも
環境しだい。

よって環境を示さないで
例外とか論じてるとアホ告知くらうと思います!
0875デフォルトの名無しさん (ブーイモ MM41-E9Xg)2016/12/01(木) 20:06:15.44ID:+YVR9sE5M
何のための未定義と実装依存だよ
0876デフォルトの名無しさん (ワッチョイ 9213-ggLi)2016/12/01(木) 21:06:16.74ID:mYjtW65/0
i386 のセグメンテーションを malloc() で使うっていう御伽噺を真に受ける人もいるんだな
0877デフォルトの名無しさん (ワッチョイ 5a7b-1jzX)2016/12/02(金) 00:07:19.95ID:fHtgnGrJ0
セグメントテーブルが足りないとか言う御伽噺よりは現実的
0878デフォルトの名無しさん (ワッチョイ 753c-BMT5)2016/12/03(土) 17:59:31.59ID:xVvt58Dl0
定本 Cプログラマのためのアルゴリズムとデータ構造 を買おうと思います
この本の前提となるC言語の知識レベルはどのくらいでしょうか。
他の言語の初心者レベルの知識はあります
C言語も構造体やポインタについてはふんわり理解していると思います
このレベルで読んで大丈夫でしょうか?

大丈夫じゃない場合、更に質問があります
この本を読めるくらいのレベルになるため、最低限この本は理解しておけという本を
一冊教えてください
本ではなくサイトでも良いです

お願いします
0879デフォルトの名無しさん (ワッチョイ 9213-ggLi)2016/12/03(土) 18:01:50.06ID:bwqi2Pka0
>>878
その本は読んだことはないが,準備にかまけていても仕方がないから,とっとと読むのがいい
わからないところがあれば,ここで聞け,俺なら答える
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:6kBIwgwIM
c言語は値渡ししかねーよ
0884デフォルトの名無しさん (ワッチョイ fc7b-lw9A)2016/12/05(月) 08:59:44.93ID:pSDwKct50
>>878-880
初心者には無理

まず、初心者用のアルゴリズムの本を読む。
クイックソート・2分ヒープ・2分木を勉強する

会津大学のサイトで、AIZU ONLINE JUDGE (AOJ)で、
Rubyなど簡単な言語で、パズルを解く

C/C++言語などは、もっと後でいい
0885デフォルトの名無しさん (ワントンキン MMd0-yaSi)2016/12/05(月) 09:50:30.74ID:bBXnpaKVM
>>878
お姉さん問題をYouTubeで見て上か下かを考える
0886デフォルトの名無しさん (ワッチョイ 0448-E9Xg)2016/12/05(月) 10:21:25.20ID:HP0umWAz0
>>878
K&RプログラミングC
0887デフォルトの名無しさん (JP 0Hf8-NTgB)2016/12/05(月) 11:37:10.98ID:fjPKnM+bH
超初心者です
if(a < 5){

if(b < 3){

c = 2;

}

}else{

c = 5

}
このelseは、上のif文に対応しているんですか?
下ですか?
0888デフォルトの名無しさん (ドコグロ MM94-yaSi)2016/12/05(月) 11:45:24.79ID:gZ+4oyn1M
>>887
上
0889デフォルトの名無しさん (ブーイモ MMa8-E9Xg)2016/12/05(月) 11:48:48.43ID:DHKecXyhM
んなもんエディタに貼り付けて自動インデントで一発じゃん
わっちょいjpってどこだっけ
0890デフォルトの名無しさん (ドコグロ MMa9-yaSi)2016/12/05(月) 12:56:33.22ID:a5r1kWoWM
>>885
上も下もどちらも捨てがたい。
0891デフォルトの名無しさん (ワントンキン MMd0-E9Xg)2016/12/05(月) 17:41:50.44ID:RicaCkjKM
インデント無しで書く発想がすごい
0892デフォルトの名無しさん (ワッチョイ 9213-ggLi)2016/12/05(月) 19:52:13.86ID:+86vS9TV0
codepad.org か ideone を使ってみるといいよ
0893デフォルトの名無しさん (ワッチョイ 6b20-yaSi)2016/12/06(火) 01:02:07.11ID:roEJAemc0
>>891
半角スペースが削られるのも知らないとは。
0894デフォルトの名無しさん (ワッチョイ 0448-m52i)2016/12/06(火) 04:06:16.72ID:8RWJFnKu0
>>893
知らなかったっ!
0895デフォルトの名無しさん (ブーイモ MMa8-yaSi)2016/12/06(火) 08:43:02.97ID:rlulkAHnM
専ブラで書けば専ブラなら表示できるんじゃなかったっけ
if (a < 5) {
if (b < 3) {
c = 2;
}
} else {
c = 5;
}
0896デフォルトの名無しさん (ワッチョイ 4d7b-1jzX)2016/12/06(火) 09:07:56.91ID:lfvK/C500
全角スペースで整形するアホより100倍マシ
0897デフォルトの名無しさん (ワッチョイ 46d4-HRbE)2016/12/06(火) 09:15:06.53ID:yz62EvnI0
>>895 ポップアップ表示なら見れるな
0898デフォルトの名無しさん (ワッチョイ 269f-dVQW)2016/12/06(火) 15:45:06.24ID:EzooQ0Q10
専ブラで書けば専ブラじゃなくても表示できるんじゃないの
if (a < 5) {
  if (b < 3) {
    c = 2;
  }
} else {
  c = 5;
}
0899デフォルトの名無しさん (ワッチョイ 4d7b-Cf2b)2016/12/06(火) 15:58:07.66ID:0O6FTDQ70
専ブラは空白や < をHTMLタグに置き換えしている
0900デフォルトの名無しさん (ワッチョイ 0448-m52i)2016/12/06(火) 18:07:06.75ID:8RWJFnKu0
>>878
そのアルゴリズム本わかりやすいしC以外でも使えてオススメ
0901デフォルトの名無しさん (ワッチョイ 7017-/mAi)2016/12/06(火) 20:58:23.09ID:qXZeYWw/0
>>896,899
HTMLタグをTABに置換するくらいなら、全角スペースをTABに置換する方が楽でしょ。
0902デフォルトの名無しさん (ワッチョイ 8342-/mAi)2016/12/06(火) 21:10:17.24ID:Rqpl6d4H0
ちょっと関係ない話ですまないけど
2ちゃんねるは中継でクラウドサービス利用していて
そこでクラッキングチェック行っているみたい
スクリプトのソースがたまに不正行為と見なされてはじかれる事がある
ダブルコーテーション以下が途切れるのもこの影響なんだろうな
他の掲示板なら良いのだろうけど、プログラムを扱う掲示板だと困る事があるね
0903デフォルトの名無しさん (ドコグロ MM5c-zrQ1)2016/12/07(水) 07:52:02.73ID:EZqEc2x3M
>>901
HTML タグから空白への置き換えはブラウザがやってくれるから
0904デフォルトの名無しさん (ワッチョイ 7017-/mAi)2016/12/07(水) 09:29:52.21ID:2yTgyuYL0
Make my day.
&thinsp;Make my day.
&nbsp;Make my day.
&ensp;Make my day.
&emsp;Make my day.

ブラウザからソースファイルにコピペするときどうなるか、確認かねて書き込んでみる。
0905デフォルトの名無しさん (ワッチョイ 7017-N+/n)2016/12/07(水) 09:34:10.33ID:2yTgyuYL0
ん? この板は文字実体参照を使えない? ちなみに>>904は専ブラから書いた。
このレスは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:Jc0RgaZ6M
専ブラにもよるかもね
2chMate 0.8.9.15/asus/Nexus 7/6.0.1/LR
M
&nbsp;M
M
0907デフォルトの名無しさん (ワッチョイ d7ff-KFGI)2016/12/08(木) 12:20:18.33ID:1P/TaaKr0
何年前の話題だよ、、、専ブラは旧仕様のままだとそうなる
0908デフォルトの名無しさん (ワッチョイ 7b0c-drn7)2016/12/08(木) 18:56:16.88ID:o4YIlcAn0
0〜1の乱数を取るときのコードで色々見ますがどれが妥当ですか?
((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:zWqycvEP0
メルセンヌツイスタで
0910デフォルトの名無しさん (ワッチョイ 5f13-iCj+)2016/12/08(木) 20:21:03.99ID:zp+gDUY10
>>908
1番目の例では +1.0, +2.0 に根拠がない
2番目の +1 を +1.0 に変えたら妥当
0911デフォルトの名無しさん (ワッチョイ ef17-WrC4)2016/12/08(木) 22:47:44.26ID:T/EAppqR0
>>908
XorShift法が便利
0912デフォルトの名無しさん (ガラプー KK77-g9kp)2016/12/09(金) 00:41:50.55ID:WzSsU1DcK
関数内の変数にstaticを付けると変数の内容が保存されるってことだけど、
これは変数のためのメモリ確保が毎回行われないってこと?
もしそうなら関数内でしか使わない変数がたくさんある場合はstatic付けると高速化できる?
0913デフォルトの名無しさん (ワッチョイ d342-WrC4)2016/12/09(金) 00:58:18.29ID:Bxx28N620
>>912
ローカル変数の場合スタック上で取るから速度低下などしないだろう
0914デフォルトの名無しさん (ワッチョイ cb17-YmwQ)2016/12/09(金) 01:36:38.04ID:7U245e/90
入力の番兵制御って実務で使うんでしょうか?
いまいち利点が分かりません。
0915デフォルトの名無しさん (ブーイモ MM47-5xeh)2016/12/09(金) 01:50:02.03ID:RqQM5ixUM
>>914
何のことやらわからんかったからググったが、
入力の終わりを表す特別な入力を与える方式のことね
例えば単なる文字列の入力でも
改行とかヌル文字とかで終端を示すのは番兵制御になるんじゃないの?
あまりにも当たり前の概念だよね
入力数の上限がわからないときは動的に領域を増やす手間はあるけどね
0916デフォルトの名無しさん (ガラプー KK77-g9kp)2016/12/09(金) 01:57:35.45ID:WzSsU1DcK
>>913
なるほど。
そのレスでやっとスタックの意味が分かった。
ありがとう!
0917デフォルトの名無しさん (ワッチョイ 7b0c-drn7)2016/12/09(金) 05:21:15.09ID:yQ118R1B0
>>910
安心しました
+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
CTRL+CでSIGINTシグナルが来るまで入力待ちループし続けるのも広義の番兵制御といえるかも。
ウィンドウズアプリもWM_QUITが来るまでメッセージ待ちループし続けるわけだし。
0919デフォルトの名無しさん (ワッチョイ 4fc0-5ykY)2016/12/09(金) 05:34:16.69ID:Y+ekosbD0
>>913
その変数がクラスのコンストラクタで時間のかかる初期化してたら毎回やるわけだが
0920デフォルトの名無しさん (ワッチョイ 533c-drn7)2016/12/09(金) 05:36:54.31ID:bVD9c9w50
C言語で何血迷ってるんや
0921デフォルトの名無しさん (ワッチョイ b717-WrC4)2016/12/09(金) 05:44:02.80ID:wyGLW8050
fgetc() の戻り値 EOFでファイル終端を知るのも番兵制御の一種。
fgetc()の戻り値をchar型にキャストしてからEOF(-1)と比較する落とし穴を体験しておくのもよいだろう。
0922デフォルトの名無しさん (ワッチョイ 4fc0-5ykY)2016/12/09(金) 05:45:25.08ID:Y+ekosbD0
>>920
このスレCか
でも初期化はあるだろ
0923デフォルトの名無しさん (ワッチョイ 5f13-iCj+)2016/12/09(金) 06:57:11.47ID:oHOYr6uJ0
>>912
その「変数のためのメモリ確保」というのはスタックポインタの上げ下げ,負荷の小さい方法だ
たぶん差はない
0924デフォルトの名無しさん (ドコグロ MM4f-05m5)2016/12/09(金) 07:19:58.24ID:CLppIZfJM
>>912
アーキテクチャや処理系に依るとしか言えない
0925デフォルトの名無しさん (ワッチョイ b717-WrC4)2016/12/09(金) 08:06:50.85ID:wyGLW8050
永続変数はレジスタによる最適化が働かないので、コンパイラの最適化機能を引き出せない可能性があるんじゃなかったっけ?
故意に最適化防止する volatileとかみたいな感じで。
0926デフォルトの名無しさん (ワッチョイ d342-WrC4)2016/12/09(金) 10:50:20.11ID:Bxx28N620
>>919
クラスのコンストラクタの作成方法教えてください
0927デフォルトの名無しさん (ワッチョイ d342-WrC4)2016/12/09(金) 10:51:10.20ID:Bxx28N620
>>922
自動変数は明示的にやらない限り初期化してませんけど
0928デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)2016/12/09(金) 11:12:10.89ID:T45DPCHQ0
Cで書いたプログラムを実行した時に実際にそのプログラムがコールしている
システムコールの回数を知りたいのですが、みなさんはどの様な方法を使っていますか?
dtruss?とかdtrace?とかのコマンドを使う方法もあるみたいなのですが自分の環境でなぜかうまくいかなかったので…
システムコールが遅いと言われる所以を確認するために実験をしたいので教えてください。

環境はMacOS X sierraです
0929デフォルトの名無しさん (ドコグロ MM0f-Bi9/)2016/12/09(金) 11:16:18.62ID:Y/ssLcl/M
>>927
流れを読まん奴だな
0930デフォルトの名無しさん (ドコグロ MMc7-Wysm)2016/12/09(金) 14:02:48.18ID:GFY666CIM
>>928
単にシステムコールの呼び出しだけならstrace
性能となるとカーネル固有になるかと。linuxのftraceとかsolarisのdtraceとか
0931デフォルトの名無しさん (ガックシ 0647-UxIg)2016/12/09(金) 15:57:57.85ID:VEutL4+16
>>930
有難うございます。
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
>>932
つまり、システムコールでもバッファを自前で用意してそこへ入れる様にすればコンテキストスイッチが少なくて済むってことですよね。

1バイトずつシステムコールした場合
write 5350
read 5351

512バイトのバッファを用意した場合
write 611
read 612

実験してみたのですが単純に512倍にならないのなぜなんだろう…
0934デフォルトの名無しさん (ワッチョイ b37b-km+g)2016/12/09(金) 21:31:16.81ID:wsqzeERH0
>>933
そりゃやってることがコンテキストスイッチだけじゃないからに決まってるじゃん。
どういう理屈で512倍になると思ったんだよ
0935デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)2016/12/09(金) 21:57:07.96ID:T45DPCHQ0
>>934
1バイトずつ呼んだ場合と512バイトまでバッファリングした場合だと単純に呼ぶ回数が512分の1になりそうだと思いました。
0936デフォルトの名無しさん (ワッチョイ a77b-vMYJ)2016/12/09(金) 22:30:48.01ID:EaN/YLKK0
他のシステムコールを、一杯呼んでいるからかな?
0937デフォルトの名無しさん (ワッチョイ 0b7b-ymeu)2016/12/09(金) 22:52:05.97ID:LMv7TBS/0
アホか?
数を数えられないガキは小学生からやりなおし
0938デフォルトの名無しさん (ワッチョイ d342-WrC4)2016/12/09(金) 23:07:31.21ID:Bxx28N620
>>933
その動かしたというプログラムソースを公開してみて
0939デフォルトの名無しさん (ワッチョイ a77b-vMYJ)2016/12/09(金) 23:50:28.19ID:EaN/YLKK0
buffer size を、1・512バイトにして、512バイト読めば、512・1回になる
0940デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)2016/12/09(金) 23:58:22.80ID:T45DPCHQ0
>>938
http://ideone.com/88miey
こんな感じです。
0941デフォルトの名無しさん (ワッチョイ ef9f-3/eH)2016/12/10(土) 00:23:14.05ID:JXY7Akof0
>>940
バッファが一杯になるまで待つ義理はreadには無いからな
0942デフォルトの名無しさん (ワッチョイ b37b-km+g)2016/12/10(土) 00:33:05.74ID:RDLcPD4m0
呼ぶ回数が512分の1になったとして、呼ばれた中では1回あたり512倍のデータを書き込んでるわけでなんで実際の書き込み時間とその他データのコピー時間を計算に入れないんだよと
0943デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)2016/12/10(土) 00:54:00.52ID:HZTQruVS0
C言語でアプリを作りたいんですが
学習におすすめのサイトあるいは書籍あったら教えてください
何からやればいいのかわからないので
基本的なアルゴリズムの学習はもうすぐ終わりそうです
0944デフォルトの名無しさん (ワントンキン MMef-/x+d)2016/12/10(土) 01:14:54.41ID:ioem07nlM
アプリってまたアバウトな
0945デフォルトの名無しさん (ワッチョイ b703-Cn1F)2016/12/10(土) 01:18:03.29ID:IGGnlebo0
何からやればいいかわからないなら手当たり次第にやりなさい
目の前の箱で検索しまくれ
0946デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)2016/12/10(土) 09:45:56.46ID:GM1V2Fap0
>>944
スマホ向けのアプリです
C++もこれからってところなので
仮にスマホでテトリスアプリを作てリリースするとして
最低限この本は・・・このサイトは・・・みたいなのあれば

知らなければ無理にアドバイスしていただかなくてもいいです
0947デフォルトの名無しさん (ワッチョイ 4bdc-+dBx)2016/12/10(土) 09:52:50.61ID:iEducwUH0
近頃の「C言語で『アプリ』を作りたい」って質問は
ウィンドウ環境固有のフレームワークやら統合開発環境やら
ずっと上位のレイヤーに関する取っ掛かりを求めてる場合が多いよね。

hello, world とかテキストフィルタとは別次元の話。
0948デフォルトの名無しさん (ワッチョイ b37b-S1Hp)2016/12/10(土) 10:01:29.25ID:6e0e6zLZ0
>>946
最近はクロスプラットフォームなフレームワークもあるけど、基本はAndroidとiOSでは求められるスキルが違う
なによりもスマホ向けのアプリ開発にC言語やC++は向いていない
AndroidであればJava、iOSであればSwift(またはObjective-C)が定番の選択肢
0949デフォルトの名無しさん (ワッチョイ 8b4e-Ts63)2016/12/10(土) 10:29:18.29ID:KSQS/S0/0
>>946
ユーザーの入出力にはOSのAPIを使う。
スマホならタッチイベントの取得(入力)とタッチパネルへの描画(出力)だ。
だからまずiOS SDK入門とかAndroid SDK入門の類を探して始めればいい。
0950デフォルトの名無しさん (アウアウイー Sa37-Cn1F)2016/12/10(土) 11:13:19.39ID:JpmQiIuRa
聞く側なのに偉そうなやっちゃなー
0951デフォルトの名無しさん (ワッチョイ 5b3b-E5nD)2016/12/10(土) 11:47:07.31ID:6IYzI33A0
教えてくれて当たり前という世代だからな。
0952デフォルトの名無しさん (ワッチョイ ef17-WrC4)2016/12/10(土) 11:51:00.14ID:K31OdPco0
>>946
スマホアプリならCの選択は無い
0953デフォルトの名無しさん (ワッチョイ ef17-WrC4)2016/12/10(土) 11:52:26.65ID:K31OdPco0
>>951
そんな世代はいらんもんな
死んでしまえ
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
>>952
アドバイスになってないですね
質問の答えにもなってないです
知らないなら別にアドバイスしなくていいと言ってます

Androidでの開発使うのはC/C++の場合SDKではなくNDKです
無理にアドバイスしなくていいと言っているのに
なんで口を出したがるのが不思議です

要するにCでスマホアプリを作る知識は持ってないんですね
自分で調べるからいいです

このスレの存在意義って何なんでしょう
0957デフォルトの名無しさん (ワッチョイ 8b4e-Ts63)2016/12/10(土) 12:49:25.82ID:KSQS/S0/0
吹いたw
0958デフォルトの名無しさん (ワッチョイ b703-Cn1F)2016/12/10(土) 12:50:34.21ID:IGGnlebo0
そりゃ熱意ある人間に手を貸しつつ、お前さんみたいな馬鹿をあぶり出すのが存在意義だよ
0959デフォルトの名無しさん (ワッチョイ d35b-Bi9/)2016/12/10(土) 12:55:36.05ID:OcU8eG0I0
自分でできるならまずやりゃいいのに
0960デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)2016/12/10(土) 13:00:30.49ID:GM1V2Fap0
>>958
素直に「知りません」って言えばいいのにお説教したくなっちゃうんですね
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/0
質問スレに誘導したら迷惑がられるレベルw
0963デフォルトの名無しさん (ワッチョイ 533c-drn7)2016/12/10(土) 13:48:53.05ID:da5gf22z0
言語と関係ないのがわいてるのな
0964デフォルトの名無しさん (ワッチョイ 6f5b-3ple)2016/12/10(土) 17:54:34.61ID:ib1s6/9H0
まぁ良いやないか。子供なんだろう。
プログラムのプの字も分かってない事にいずれ気づくさ。
あのとき恥ずかしい事したなって思うのも、経験の一つさ。
0965デフォルトの名無しさん (ワッチョイ 2f68-k4K1)2016/12/10(土) 19:05:35.56ID:E4ED1H/i0
>>960
イライラするなよ
お茶でも飲んで落ち着けって
GUIははじめてか?
0966デフォルトの名無しさん (ワッチョイ a7e3-VjgG)2016/12/10(土) 19:19:32.10ID:7S/9eXg00
たまに見かけるプライドが高いだけの無能
間違った方向にしか成長しないから今すぐ諦めるのが懸命だぞ

やるだけ時間の無駄
0967デフォルトの名無しさん (ワッチョイ 5f13-drn7)2016/12/10(土) 19:46:23.71ID:6Xk6zUw60
>>966
×懸命
○賢明
0968デフォルトの名無しさん (ワッチョイ b37b-km+g)2016/12/10(土) 19:49:39.61ID:RDLcPD4m0
マジレスするとNDK使うのに本なんぞ要らん
0969デフォルトの名無しさん (ワッチョイ 9b3c-gb6D)2016/12/10(土) 20:03:31.18ID:9a8Z2SKX0
>>966
自分のことですか?
ちゃんとスマホアプリを作ったことあるんですかね

>>968
そうなんですか
まあ、環境ですからね
その先ですね、問題は
GitHubでも見ながら勉強します
0970デフォルトの名無しさん (ワッチョイ 8b7b-7i2P)2016/12/10(土) 21:12:49.57ID:Y8xCOPeF0
次立ててくる
0971デフォルトの名無しさん (ワッチョイ 8b7b-7i2P)2016/12/10(土) 21:15:14.95ID:Y8xCOPeF0
次

C言語なら俺に聞け 138
http://echo.2ch.net/test/read.cgi/tech/1481372036/
0972デフォルトの名無しさん (ワッチョイ 537b-ifuQ)2016/12/10(土) 21:16:10.85ID:4D7kDN5f0
あいらぶゆー >>971
0973デフォルトの名無しさん (ワントンキン MMef-/x+d)2016/12/11(日) 00:17:13.16ID:65IEUqLtM
またすげぇのが出てきたなw
0974デフォルトの名無しさん (ワッチョイ 9b3c-j1Yw)2016/12/11(日) 06:02:17.05ID:AF+o9o7U0
AndroidならNativeActivity関連の実装の仕方なのか、JNIの書き方なのかOpenGL辺りなのか
そもそもAndroidでなぜCで書くのか?目的がC言語が使いたいってだけならiOSやればいい
0975デフォルトの名無しさん (ワッチョイ b39b-5xeh)2016/12/11(日) 11:56:52.11ID:OGD68Kvc0
ゲームアプリ作りたいならUnityでも使えばいいのに
0976デフォルトの名無しさん (ワッチョイ 1bc1-UxIg)2016/12/11(日) 11:59:30.36ID:chtkNEN/0
>>933です
linux環境なら512倍になりました。
0977デフォルトの名無しさん (ワッチョイ b717-rXHS)2016/12/11(日) 12:08:47.75ID:r1VSzSyo0
>>943
>>946
> スマホ向けのアプリです
> C++もこれからってところなので
> 知らなければ無理にアドバイスしていただかなくてもいいです

ネイティブアプリを作りたいのか?
つか、何も知らないくせに、その書き方は人にものを尋ねる態度ではない。
0978デフォルトの名無しさん (ワッチョイ d35b-Bi9/)2016/12/11(日) 12:37:29.39ID:g1dtzkew0
そういうので損してるって気付けない奴なんだろう
0979デフォルトの名無しさん (ワッチョイ 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
>>979
いっそ該当部分のソースを以下サイトに貼ったらどう?
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
>>979 です
>>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:165vzO4I0
ハッシュ表作ってないの?
0985デフォルトの名無しさん (ワッチョイ 6f5b-3ple)2016/12/11(日) 15:55:08.22ID:C5/UKHxJ0
定期的にハンドルを解放すれば良いだけだろ
0986デフォルトの名無しさん (ワッチョイ b70b-l58V)2016/12/11(日) 16:41:43.14ID:9VCAfwyu0
コードなしになんか遅いんですといわれてもねぇ
0987デフォルトの名無しさん (ワッチョイ a7e3-VjgG)2016/12/11(日) 19:45:29.41ID:+M7lO+Ac0
そんな単純なプログラムで遅い原因がSDKのせいなわけあるかボケ
0988デフォルトの名無しさん (ブーイモ 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:hiiS8aXy0
入門 データ構造とアルゴリズム、2013、オライリー
Narasimha Karumanchi(インド人) 著

セジウィックの本も、有名。
他にも、アルゴリズムの入門書は、たくさんある

Webサイトでは、会津大学のプログラミング・コンテストも有名
Aizu Online Judge(AOJ)

まず、クイックソート・2分ヒープ・ハッシュを勉強する
0993デフォルトの名無しさん (ワッチョイ 4fe1-cKcd)2016/12/12(月) 02:20:21.93ID:TI/I0vvc0
>>983
メモリリークとか、ファイルハンドルを解放してないとかがあるんじゃないか?
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
>>983 です
すいません、なんか私が変な質問したみたいです。
処理自体は重複の確認のためにファイルをCreateFileMapping
してCryptCreateHash他関数を呼んでMD5の128ビットの
ハッシュ値をもらい、それを配列に入れ、全ファイル
終わったらソートして重複があれば書き出す。
という処理です。自分でハッシュ値を作るわけではなくて
<wincrypt.h> の関数を呼んでます。
と、書いててこの関数の時間測ったら平均0.057秒でした
単純に5000個で0.057なら5分近く掛りますね、これですね。
自分には関数呼ぶくらいしかできないので我慢しますわ。
回答どうもでした。
0996デフォルトの名無しさん (ワッチョイ a74f-drn7)2016/12/12(月) 14:54:59.93ID:WPCsPjPg0
あらかじめ与えられたファイルに対して重複しているかの判別ではなく
n個のファイル郡のなかで相互に重複してるものを探し出したい ということか

マップと線形リストの組み合わせになるんかねー
0997デフォルトの名無しさん (アウアウカー Sa67-l58V)2016/12/12(月) 15:39:46.35ID:mRGCsUDoa
>>995
詳しくはないけど抽出するデータは1KBで十分なんじゃないの

1MBのデータは2の8000000乗通りの値をとるけどMD5ハッシュは2の128乗通りの値しかとれないわけで、過剰に大きなデータのハッシュを取ってもハッシュがかぶる可能性は変わらないんじゃないかな

詳しい人がいるなら訂正して
0998デフォルトの名無しさん (ワッチョイ d377-IJHD)2016/12/12(月) 15:40:05.35ID:89qHcou00
その速度ならGnuWin32のmd5sumを使ったほうが速くて手軽では。
0999デフォルトの名無しさん (ワッチョイ a74f-drn7)2016/12/12(月) 15:46:19.18ID:WPCsPjPg0
映像とか言ってるし、(フォーマットによるけど)
ファイルヘッダ部分付近だけをハッシュするのは衝突の可能性が高いかもねー
1000デフォルトの名無しさん (ワッチョイ 0b42-bB/5)2016/12/12(月) 15:46:38.30ID:FHfa2E0G0
なるべくファイル内容にはアクセスしないのがコツだろ。
サイズが違えばファイルは別だ。
あと先頭や後ろの1kが違っても別だ。
完全一致した巨大ファイルがあると網羅するしかなく手間だが・・・
それは簡単判定してしまい前、後、中を適当にとって一致したら同一候補として上げてしまい人力か別ソフトに委ねるとかは。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 68日 19時間 22分 40秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。