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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 5b7b-Cxy9)2016/07/10(日) 21:48:57.51ID:Hf6Ci9f/0
C言語の話題のみ取り扱いますC++の話題はC++スレへ

数行で収まらないソースは以下から適当に選んでURLを晒す
https://paiza.io/
http://codepad.org/
http://ideone.com/

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/

前
http://echo.2ch.net/test/read.cgi/tech/1462853629/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0002デフォルトの名無しさん (ワッチョイ c73c-aw3J)2016/07/10(日) 21:57:40.69ID:dDi9paew0
乙
0003デフォルトの名無しさん (ワッチョイ 5b7b-Cxy9)2016/07/10(日) 22:13:16.72ID:Hf6Ci9f/0
テンプレに入れ忘れたー

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
0004デフォルトの名無しさん (ワッチョイ 836c-Bfmi)2016/07/11(月) 07:54:13.44ID:iORY9+fX0
乙
0005デフォルトの名無しさん (ワッチョイ 7389-oo3f)2016/07/11(月) 08:45:28.01ID:pao9IZxi0
>>1
乙
0006デフォルトの名無しさん (ワッチョイ efc8-Bfmi)2016/07/11(月) 21:12:48.47ID:xgdGYS+A0
externについて質問です

分割されたソースコードがある時、ファイルをまたいで変数を使用する際にexternを使えばいいことを習いました。
その時は、ある.cファイルの中では普通に宣言して、またいで使いたい.cファイル内ではexternを使うという感じでした。

しかし後で自分で調べてみたらヘッダファイル内でexternを使うようなことが書かれていました。

どちらのやり方が正しいのでしょうか?
前者のやり方しかやっていませんが一応正常に動作しました。
0007片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK5f-fi14)2016/07/11(月) 21:22:57.75ID:htK4V8FQK
>>6
#includeは、その場所に、指定したファイルの中身を取り込む。
取り込んだ内容はコンパイル単位に取り込まれ、ソースの一部として扱われる。
ヘッダーは#includeで取り込めるので、複数箇所で参照したい場合、コードの共通化と再利用に使える。
0008デフォルトの名無しさん (ワッチョイ 2fc2-sj7o)2016/07/11(月) 21:23:00.72ID:O0wDeDe60
どっちでもいいです。
ヘッダに書いておけば後で修正が必要なときに
ヘッダだけ直せば良いので分かりやすいし、
externが書かれているソースファイルを何個も開く必要が無くて楽。
0009デフォルトの名無しさん (ワッチョイ c73c-aw3J)2016/07/11(月) 22:34:52.74ID:dRSE2ALS0
どちらも同じ結果だけど、後者をやるクセを付けたほうが後々良い
0010デフォルトの名無しさん (ワッチョイ efc8-Bfmi)2016/07/11(月) 23:37:00.19ID:xgdGYS+A0
>>7
>>8
>>9
回答ありがとうございます。
ヘッダに書くやり方の方が何かとよさそうですね。
0011デフォルトの名無しさん (ワッチョイ b37b-zDc6)2016/07/12(火) 07:31:15.36ID:bfn2nev70
ヘッダファイルを使わないやり方ではexternをつけなくても処理系が良きに計らってくれる。
でも、ヘッダファイルに書く時は必ずexternをつけなくてはいけない。
エラーにはならないけど、その変数を使っていない場合、不要なメモリ領域を確保する事になる。
0012デフォルトの名無しさん (ワッチョイ 333c-oo3f)2016/07/12(火) 08:02:27.10ID:exXbmFuJ0
char str[] = "abcdef";

コレってアリですか?
ありなら配列strは添字の何番まで使えますか?
0013デフォルトの名無しさん (ドコグロ MM1f-oo3f)2016/07/12(火) 08:13:18.50ID:JycYw7IdM
>>12
あり
文字列+1
0014デフォルトの名無しさん (ワッチョイ 333c-oo3f)2016/07/12(火) 08:16:41.31ID:exXbmFuJ0
>>13
ありがとうございます
一点質問ですが、これって文字列abcdefが格納されてるメモリのアドレスをstrに渡してるんですか?
0015デフォルトの名無しさん (ワッチョイ ef52-oo3f)2016/07/12(火) 08:30:15.74ID:JYiwCJ420
sizeof str を調べるといい
0016デフォルトの名無しさん (ドコグロ MM1f-oo3f)2016/07/12(火) 08:41:47.41ID:JycYw7IdM
>>14
です
0017デフォルトの名無しさん (ワッチョイ 7389-oo3f)2016/07/12(火) 08:47:59.97ID:LVMPTzqO0
>>14
厳密にはメモリそのもの。
0018デフォルトの名無しさん (ワッチョイ b37b-zDc6)2016/07/12(火) 08:49:19.16ID:bfn2nev70
>>14,16
ちげーよ。
> 文字列abcdefが格納されてるメモリのアドレスをstrに渡してるんですか?
こうしたいなら
char str* = "abcdef";
0019デフォルトの名無しさん (ドコグロ MM1f-oo3f)2016/07/12(火) 09:50:51.10ID:JycYw7IdM
>>18
文字列リテラルのコピーと文字列リテラルのアドレスのコピーの違いか
すまんかった
0020デフォルトの名無しさん (ササクッテロ Sp1f-IrUP)2016/07/12(火) 13:10:39.10ID:VCBlqBnlp
●起業したいプログラマに1000万円まで投資します●

アイディアと情熱のある方のみ、お願いします。
http://good-hill.xsrv.jp/?id=661213

『 グッドエンジェル 』
投資家と起業家のマッチングサービス
有名投資家からベンチャーキャピタルまで参加されています。
0021デフォルトの名無しさん (JP 0H3f-bUQF)2016/07/12(火) 13:33:38.56ID:uw5z64TWH
fgetsについての質問ですが

buf[n][0][strlen(buf[n][0]) - 1] = '\0';
fgets(buf[n][0],256,stdin);
buf[n][0][strlen(buf[n][0]) - 1] = '\0';

このように毎度初期化してもfgetsがスルーされるんですが
ちゃんと書き込めるようにするにはどうすればいいです?
0022デフォルトの名無しさん (ガラプー KK5f-fi14)2016/07/12(火) 14:10:55.20ID:Cxh+BODLK
>>21
bufの定義は?
fgetsはファイルから一行データを読み込む関数。
0023デフォルトの名無しさん (ワンミングク MMbf-Lka5)2016/07/12(火) 14:21:59.78ID:AKKAWUKIM
stdin使えるはずだけど
バッファがアドレス渡しになってないのでは
0024デフォルトの名無しさん (ワンミングク MMbf-Lka5)2016/07/12(火) 14:37:30.14ID:AKKAWUKIM
char buff[256];
fgets(buf,256,stdin);
buf[strlen(buf)- 1] = '\0';
で動いたよ

もとのコードは
buffが三次元っぽいから頭に&いるんじゃね?
0025デフォルトの名無しさん (ワッチョイ 5b7b-Cxy9)2016/07/12(火) 15:04:51.20ID:N9hLb2lJ0
>>21
fgets()は終端文字を自動的に入れるので
1行目と3行目の全く同じ(しかも間違っている)処理はそもそも不要
入力が256バイト以上でも255バイトまで書き込んで最後に終端を置く

char s[] = "abcde";
であればstrlen(s)の結果は5、終端を入れるべきはs[5]、つまり同じ位置
そしてstrlen(s)はそもそも正しく終端されていなければ正しい結果を返せない
よって不要な処理

前の人の言う通りbufの定義(二次元配列?)かfgets()への指定が間違っていると思われる
0026デフォルトの名無しさん (ワッチョイ 5b7b-Cxy9)2016/07/12(火) 15:45:48.25ID:N9hLb2lJ0
読み直して思ったけどもしかして改行文字を削除したいのか
終端の1文字前が改行と決め打ちする発想がなかったので全く気付かなかった
CR+LFの処理系もあるし前述の通り255バイト+終端のケースでは単に破壊することになる
strrchr使うなり後ろからポインタ回すなりして\r\nを探そう
0027デフォルトの名無しさん (ワンミングク MMbf-Lka5)2016/07/12(火) 16:09:40.56ID:AKKAWUKIM
strlenの結果を見ずに配列のインデックスに使うのは危険だねぇ
おれも改行コード探して消すほうがいいと思うよ
0028デフォルトの名無しさん (ワッチョイ 5f5b-bGhr)2016/07/12(火) 16:47:39.50ID:tN8rKWwC0
>>25
21です
定義は
char buf[N][16][256]
調べた結果、もともと改行も入ってなかったです
0029デフォルトの名無しさん (ワッチョイ ef3c-Bfmi)2016/07/12(火) 17:02:46.65ID:EyB/ksrk0
>このように毎度初期化してもfgetsがスルーされるんですが
何をもって fgetsがスルーされる と判断したのか
0030デフォルトの名無しさん (ワッチョイ 5f5b-bGhr)2016/07/12(火) 17:25:12.23ID:tN8rKWwC0
>>29
問題箇所の周辺のソースです

printf("IDは%dです。登録する名前を入力してください\n",n);
fgets(buf[n][0],256,stdin);
buf[n][0][strlen(buf[n][0]) - 1] = '\0';
for(l=0;l<N;l++){

実行するとprintfが実行されるとfor文の条件式の処理をしてしまうためです
このとき、buf[n][0]は常に\0です
0031デフォルトの名無しさん (ワッチョイ ef3c-Bfmi)2016/07/12(火) 17:43:23.99ID:EyB/ksrk0
1) fgets の戻り値を確認すべし
2) n は 0〜N-1 の範囲にあるのか?
 buf[n][0] はまだ配列なんだけど それを 常に\0 と評価してるのは何か間違っていないか?
 (なお buf[n][0][0] が \0 なら判る)
0032デフォルトの名無しさん (ワッチョイ 5b7b-Cxy9)2016/07/12(火) 18:16:54.85ID:N9hLb2lJ0
>>30
https://paiza.io/projects/Nka7ld65WDSimDBx7ltj_A

できるだけ丁寧に書いたつもりなので何をどうしてるか処理を追ってみて
0033デフォルトの名無しさん (ワッチョイ b37b-zDc6)2016/07/12(火) 19:43:02.24ID:bfn2nev70
キミには2次元配列は3年早い
0034デフォルトの名無しさん (ワッチョイ bf13-Jsl5)2016/07/12(火) 20:22:28.24ID:9DVDbmDn0
>>11
つ仮定義
0035デフォルトの名無しさん (ワッチョイ f748-Lka5)2016/07/12(火) 23:24:17.93ID:3bEOQXVF0
fgetsの戻り値を表示してみる
あと試しにfgetsを何回か連続で書いてみる
前処理のキー入力のエンターがたまってて
fgetsがスルーしてるように見えるだけだったり
つかデバッガ使えないの?
0036デフォルトの名無しさん (ワッチョイ f748-Lka5)2016/07/12(火) 23:28:33.79ID:3bEOQXVF0
fgetsでキー入力待ちになるはずが
待たずに先に進んでしまうってことだよね?
スルーって書いてるからみんな混乱させられてる気がする
0037デフォルトの名無しさん (ワッチョイ a7d4-Bfmi)2016/07/13(水) 02:16:12.05ID:UwzarzH20
int main() {
int n = 0;
char buf[2][16][256];

printf("IDは%dです。登録する名前を入力してください\n", n);
fgets(buf[n][0], 256, stdin);

printf("入力値:%s", buf[n][0]);
}


これでやってみたけど、うまく動いたぞ。
VS2015コミュ障エディション
0038デフォルトの名無しさん (ワッチョイ ef52-oo3f)2016/07/13(水) 03:58:06.24ID:QAw5IbxT0
>>30
肝心なとこを隠してるのはわざとなのか?
超初心者なら再現するコード全体を示そう
0039デフォルトの名無しさん (ワッチョイ 5f5b-bGhr)2016/07/13(水) 07:22:26.91ID:1COXLudy0
>>37
ありがとうございました
解決しました
fgetsの前にscanfを使ってしまって
stdinに改行が残っていたのが原因でした
0040デフォルトの名無しさん (ワントンキン MMbf-Lka5)2016/07/13(水) 11:20:58.45ID:i+jeO//LM
やっぱりw
解決してよかったね
0041デフォルトの名無しさん (ガラプー KK9f-cWdj)2016/07/13(水) 23:39:36.97ID:H0JuY83uK
さすが俺だな
0042デフォルトの名無しさん (ワッチョイ 72e5-EKBs)2016/07/15(金) 18:06:24.72ID:4+NaqmOj0
エラーメッセージ「オブジェクト参照がオブジェクトインスタンスに設定されていません。」
http://codepad.org/1Y5bBwpS

やりたかったことは苦しんで覚えるCの「http://9cguide.appspot.com/11-q.html」で
答えもみてしまったが自分の記述が近くまで行ってたきがするので
エラーメッセージの意味を理解したいです
0043デフォルトの名無しさん (ワッチョイ 4448-8KjE)2016/07/15(金) 18:37:33.93ID:APEZh3N00
つっこみどころ満載なんだけどネタじゃないよな?
0044デフォルトの名無しさん (ワッチョイ f053-EqXU)2016/07/15(金) 18:43:01.45ID:VGjMsZcZ0
何行目でのそのエラーメッセージなんよ
で自分としては完動までにどれくらい近いイメージ?
0045デフォルトの名無しさん (ワッチョイ e63c-8xJT)2016/07/15(金) 18:48:02.31ID:RyMw/acV0
Cコンパイラで
 「オブジェクト参照がオブジェクトインスタンスに設定されていません。」
って類のエラーは出ないような気がするがー
(C++ならば可能性アリ)
0046デフォルトの名無しさん (スププ Sd28-Hpnq)2016/07/15(金) 18:50:11.19ID:KeEbjUvqd
コンパイラも同じく苦しんで覚えるCの学習用統合環境です

エラーは26行目です
0047デフォルトの名無しさん (ワッチョイ e63c-8xJT)2016/07/15(金) 18:54:22.64ID:RyMw/acV0
switch で開いた { を
21行目 } で閉じてないから、コンパイラさんがいろいろ混乱してわけわかなエラーメッセージを出してるっぽい
0048デフォルトの名無しさん (ワッチョイ 4448-/weA)2016/07/15(金) 19:00:15.53ID:APEZh3N00
間違ってる箇所が多すぎてめんどくさいからとりあえず正解を。
http://i.imgur.com/1PA2nZJ.jpg

どこがわからんか言ってくれたらアドバイスできるかも。
0049デフォルトの名無しさん (ワッチョイ 4448-8KjE)2016/07/15(金) 19:02:29.64ID:APEZh3N00
ごめんfflushは不要かな
うちの環境では必要だったけど
0050デフォルトの名無しさん (ワッチョイ e63c-8xJT)2016/07/15(金) 19:03:22.01ID:RyMw/acV0
>>48
旦那 11行目修正漏れ  scanf は in で受けなきゃ
0051デフォルトの名無しさん (ワッチョイ 4448-8KjE)2016/07/15(金) 19:08:08.18ID:APEZh3N00
>>50
おおぉ、すまん
再現させるのにnenにしたままだった
こっぱずかしい!
0052デフォルトの名無しさん (ワッチョイ 4448-8KjE)2016/07/15(金) 19:13:24.04ID:APEZh3N00
scanf("%d",&in);
でよろしく
0053デフォルトの名無しさん (スププ Sd28-Hpnq)2016/07/15(金) 19:19:58.96ID:KeEbjUvqd
>>47 なるほどそういう抜け落ちがあるまま処理してしまって
抜け落ちているということにすらコンパイラも自分も気づけなかったらこういうエラーになるんですね...

>>48 fflashというのはまだ知らないですが
まず変な設計するとそれを補うことしないといけないみたいな感じですかね

薄々感じていたのですがこれまでやったところを
もっと定着させないとダメみたいですね...
練習問題のドリルが欲しい.....
0054デフォルトの名無しさん (ワッチョイ 4448-8KjE)2016/07/15(金) 19:25:56.86ID:APEZh3N00
なれないうちはちょっと書いてコンパイルして動作確認をおすすめします
あと関数への引数受け渡しあたりを復習してみるとか
0055デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/15(金) 20:34:36.34ID:vfo6HyBX0
>>42
http://codepad.org/xI5gvDqK
もう解決したっぽいけどせっかく書いたので一応晒しとく

scanf()は使いこなすの難しいのにどうして初心者向けの演習で使わせようとするのか
その教えが入力バッファに改行が残って混乱する人を生み出すというのに
0056デフォルトの名無しさん (ブーイモ MM28-4wno)2016/07/15(金) 22:51:02.64ID:15guYmOWM
>>55
scanf使わないと文字列の解析から教えないといけなくなるので
入力処理の難易度が跳ね上がるのよね
そうなると文字の入力だけでできる簡便な処理しか題材にできなくなる
0057デフォルトの名無しさん (スッップ Sd28-4wno)2016/07/15(金) 23:56:18.11ID:TXZYN8trd
gets()
0058デフォルトの名無しさん (ワッチョイ c5c1-28gx)2016/07/16(土) 10:30:22.13ID:FROnu1u70
ポインタとそのサイズについてです。

int *p と void *q を宣言したとして
int *p はアドレス情報とint型という情報
void *q はアドレスのみの情報を格納。
printf("%zu", sizeof(*p));
printf("%zu", sizeof(*q));
と、すると順に4バイトと1バイトになります。
ここで、
int *p;
int a;
p = &a;
とします。この時、pは変数aのアドレス情報を持ちますが"int型"という情報を持つ必要があるんでしょうか?int aとされているならアドレスを元にそこへアクセスすれば良いだけに思えるのですが、この時アクセスした先が"int型"ということを*pは知らないので教えてあげる必要がありint *pとされているのでしょうか?
また、"int型"この情報を持つだけで型の情報を持たないvoid *qと3バイト分も領域が違うものなのでしょうか?

そもそも自分のポインタ変数に対する格納される情報に間違いがありそうなので、型有りポインタと型無しポインタそれぞれ格納される情報を教えたください
0059デフォルトの名無しさん (ワッチョイ e652-dT5v)2016/07/16(土) 10:54:14.01ID:Gp5nPJYi0
>>58
sizeof(*q) は、sizeof(void) のことであってポインタのサイズではない。

p = &a のときに、pにも&aにもint型へのポインタという情報があって冗長じゃないか
という疑問については、確かに冗長だがそれによってプログラムミスを防ぐ効果もある。
(コンパイル時にバグに気づける)

あと、void *は型なしポインタではなくて、void *型のポインタ。
0060デフォルトの名無しさん (ワッチョイ e64e-MgGc)2016/07/16(土) 10:58:00.38ID:VajJMKpI0
型情報が必要なのはコンパイルまでで、コンパイルされたバイナリには型情報は無い。
だったっけ?
0061デフォルトの名無しさん (ワッチョイ d194-i5w2)2016/07/16(土) 11:16:24.55ID:3A+r0QSz0
yes
0062デフォルトの名無しさん (ワッチョイ 697b-X3D0)2016/07/16(土) 11:17:25.78ID:rkjY8WzF0
ポインタが型の情報を持っていないとポインタ演算ができない
ポインタの指す先は型のサイズに基づいて指すアドレスが変わる
例の場合、p++はもとのアドレスの4バイト先、q++は元のアドレスの1バイト先を指す
0063デフォルトの名無しさん (ワッチョイ 697b-X3D0)2016/07/16(土) 11:20:49.70ID:rkjY8WzF0
P++やq++だと評価前の値のままだな
++pと++qが新しいアドレスを指すと言った方が正しいので訂正
0064デフォルトの名無しさん (ワッチョイ 1191-4wno)2016/07/16(土) 11:57:19.83ID:EnwUkk5N0
>>60
リンクするのに型情報必要ないかな?
0065デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/16(土) 12:03:31.56ID:jJTxEvtt0
コンピューターの深淵にあるのはアドレスとサイズの2つのみ
この2つ(とレジスタ)があれば全ての処理は可能
型というのは例えば同じサイズだけど異なる目的(型)の領域に対しての代入や比較を
自動的に警告させるためにプログラマがコンパイラへ与える付加情報にすぎない
0066デフォルトの名無しさん (ワッチョイ e63c-4wno)2016/07/16(土) 12:41:48.00ID:7cBV7ERq0
付加情報?
型情報なくてもいいと言うなら
a = b;
を x86 のコードにコンパイルしてみ
0067デフォルトの名無しさん (ワッチョイ c57b-UqMW)2016/07/16(土) 12:55:27.23ID:4Vy0QStp0
>>58
その質問にvoid *を使うのは不適切

>printf("%zu", sizeof(*q));
これはgccの拡張、厳密に規格に従うオプション-pedanticつければエラーになる
char *q;とすべきだね

char *q;だった時の回答は教えたがりの諸兄に任せる。
0068デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/16(土) 12:55:55.78ID:jJTxEvtt0
>>66
宣言がないのでエラー
0069デフォルトの名無しさん (ワッチョイ e63c-4wno)2016/07/16(土) 13:08:49.20ID:7cBV7ERq0
>>68
宣言の部分は隠してあるんだよ
それぐらいわかるでしょ?
0070デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/16(土) 13:19:22.64ID:jJTxEvtt0
>>69
aとbのサイズは?
0071デフォルトの名無しさん (ワッチョイ e63c-8xJT)2016/07/16(土) 14:29:06.06ID:S8VKGqF20
>>64
不要
0072デフォルトの名無しさん (ワッチョイ e63c-4wno)2016/07/16(土) 14:33:35.85ID:7cBV7ERq0
>>70
4byte
0073デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/16(土) 14:41:52.91ID:jJTxEvtt0
>>72
mov -0xc(%rbp),%ecx
mov %ecx,-0x8(%rbp)
0074デフォルトの名無しさん (ワッチョイ e63c-4wno)2016/07/16(土) 14:55:55.75ID:7cBV7ERq0
それじゃ
a = b + 1;
は?
サイズは a, b 共に 4byte でいいよ
0075デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/16(土) 15:01:26.32ID:jJTxEvtt0
>>74
mov -0xc(%rbp),%ecx
add $0x1,%ecx
mov %ecx,-0x8(%rbp)
0076デフォルトの名無しさん (ワッチョイ e63c-4wno)2016/07/16(土) 15:47:07.25ID:7cBV7ERq0
float でも動く?
0077デフォルトの名無しさん (ワッチョイ bc19-8xJT)2016/07/16(土) 16:03:52.61ID:+FKRslC00
何?この茶番。
0078デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/16(土) 16:09:04.69ID:jJTxEvtt0
>>76
浮動小数点数演算は元々別ユニットの命令で特別扱いだよ
昔のx86ならx87コプロセッサ命令だし今のx86ならsseやavx命令への最適化のために型情報が使われる
要点は変数に型情報を保持しているわけではなく、それ用の命令に翻訳されるということ
0079デフォルトの名無しさん (ガラプー KK6b-RBrK)2016/07/16(土) 16:10:00.75ID:Eh6sqzJAK
ぷっぷー
0080デフォルトの名無しさん (ワッチョイ f06c-9M1e)2016/07/16(土) 16:22:58.85ID:hhY8dn4u0
エセ左翼の目的は、わざと頭の悪そうな主張をして自分たちを叩かせることで、
カルトへ向かうはずの非難の矛先を逸らすこと。
国益に反することを言ったり、対立を煽ろうとするので放置し難いが、
主義思想についての洗脳を受けているわけではなく、フリをしているだけなので、
言い負かされてもダメージを受けた様子もなく、論点をすり替えられるかスルーされるだけ。
まともに相手をしてはならない。
0081デフォルトの名無しさん (ワッチョイ e63c-4wno)2016/07/16(土) 18:05:21.13ID:7cBV7ERq0
>>78
はあ?
> アドレスとサイズの2つのみ
とか言ってたんじゃねーのかよ w
0082デフォルトの名無しさん (ワッチョイ e64e-MgGc)2016/07/16(土) 19:04:52.52ID:VajJMKpI0
型がユーザー入力などによって動的に決まる場合は、
変数の宣言を見てサイズを決めるようなバイナリになるの?
0083デフォルトの名無しさん (ワッチョイ e64e-MgGc)2016/07/16(土) 19:13:58.29ID:VajJMKpI0
ああ無理か。ポインタ経由になるから、ポインタのサイズは変わらんもんね。
0084デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/16(土) 19:55:11.07ID:jJTxEvtt0
サイズじゃなく型が動的に決まるケースなんてCであるの?
それとも他の動的型付けな言語の話?
後者なら何らかの形(例えば文字列は数値もNaNも表現可能)で値を保持して
要求箇所に応じて内部メソッドで適切に変換した値を返すことで実現する
つまり内部ではあくまで静的な型の組み合わせによって表現している
当然だけど型違いでエラー吐かないように言語で文法的サポートが必須
0085デフォルトの名無しさん (ワッチョイ 7213-ltmW)2016/07/16(土) 20:04:09.82ID:WRTjaYnm0
>>84
>サイズじゃなく型が動的に決まるケースなんてCであるの?
ない
0086デフォルトの名無しさん (ワントンキン MMd0-4wno)2016/07/16(土) 20:13:07.37ID:USFa2DA8M
sockaddr が一番近いかな?
0087デフォルトの名無しさん (ワッチョイ 96c2-E7P/)2016/07/16(土) 20:56:39.02ID:MXamywZj0
サイズじゃない!(サイズじゃない!)
サイズじゃない!(サイズじゃない!)
本当のことさ〜♪ 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0088デフォルトの名無しさん (ワッチョイ e63c-4wno)2016/07/16(土) 21:00:50.43ID:7cBV7ERq0
>>86
sockaddr って言うか union やね
0089デフォルトの名無しさん (ワッチョイ e53c-4wno)2016/07/16(土) 21:16:27.29ID:4GYB66K70
csvファイルをsscanf使って読み込む方法教えて下さい。
0090片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK6b-7GzA)2016/07/16(土) 21:46:33.17ID:DpW5llC4K
>>89
fgetsで読み込むと文字列になるだろ?
sscanfは文字列を読み込むだろ?
そういうことさ
0091デフォルトの名無しさん (ワッチョイ bc42-8xJT)2016/07/16(土) 21:50:59.71ID:j2tRuQPr0
各レコードで改行を許す場合は、ややこしい処理が必要になりそう
0092デフォルトの名無しさん (ワッチョイ 8ad5-/weA)2016/07/16(土) 21:52:51.97ID:zmZ3YuJA0
■ひぽや新マップチップセット (無料)
http://piposozai.blog76.fc2.com/blog-category-7.html
■ねくらファンタジーマップチップ(無料版)
http://piposozai.blog76.fc2.com/blog-entry-350.html

イラストアイコン素材集Vol.1 (総数900点以上(380点+色違い、模様違いなど差分549点)
http://www.dlsite.com/home/work/=/product_id/RJ154598/?deqwas_inflow=RJ165626&;deqwas_tg=item_view
ねくらファンタジーマップチップ素材集
http://www.dlsite.com/home/work/=/product_id/RJ165626.html/?unique_op=af
ねくらファンタジーマップチップ素材集エクストラダンジョン
http://www.dlsite.com/home/work/=/product_id/RJ177740.html
0093デフォルトの名無しさん (ワッチョイ 4448-8KjE)2016/07/16(土) 22:38:32.88ID:QHzvOBTx0
fgetsで読んでカンマかタブで分割したほうが汎用性があると思う
0094デフォルトの名無しさん (ワッチョイ e63c-8xJT)2016/07/16(土) 22:51:25.12ID:S8VKGqF20
まじめにRFC4180をパースするとめんどくさい
0095デフォルトの名無しさん (ワッチョイ f08b-L3Fl)2016/07/16(土) 22:59:08.29ID:+8wH/95N0
レコードの要素に改行を許す場合はもはや行単位の読み込みにこだわるのはやめた方がシンプルに書ける希ガス、
いくらなんでもRFC4180ぐらいLL(1)程度で解析には十分だろうから、
fgetc()で1文字先読み・
Σ={ カンマ、数値、文字列リテラル、真のレコード1行分の終わりとしての改行 }ぐらいの終端記号のパーサとして書いた方ががが
0096デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/16(土) 23:53:11.52ID:jJTxEvtt0
csvは改行よりもダブルクォート優先だからなー
しかも改行デリミタクォートを含まないなら文字列をダブルクォートで囲まなくていいという仕様だから
いきなり出現するマルチバイト文字とかエスケープも要考慮だし
行単位のfgets()やsscanf()ではとても処理できないね
0097デフォルトの名無しさん (ワッチョイ c5c1-28gx)2016/07/17(日) 09:21:53.38ID:v2nuo0Rr0
>>59
>>67
ありがとうございました。
0098デフォルトの名無しさん (ガラプー KK6b-RBrK)2016/07/17(日) 18:45:41.06ID:QDfOESrCK
いえいえ
0099デフォルトの名無しさん (ワッチョイ 96c2-E7P/)2016/07/17(日) 19:20:01.60ID:hmv18zqb0
これはこれは御丁寧に。
0100デフォルトの名無しさん (アウアウ Sa09-8xJT)2016/07/18(月) 03:40:23.89ID:XwtdLS3qa
http://www.dotup.org/uploda/www.dotup.org948002.c.html

このプログラムが何をするものか教えてください。
トレンドcsvまでは作られるのですが、csvに何も書き込まれません。
0101デフォルトの名無しさん (ワッチョイ e652-dT5v)2016/07/18(月) 08:02:09.12ID:qU2fgLG90
>>100
よく見てないけど、「1年分のデータを一斉に30分平均にするプログラム」でしょ

入力ファイルの
C:\\source\\元データ\\平成%02d年度分\\%04d\\%02d\\%02d\\0001\\0001_%02d.csv
が無いんじゃない?それでfgets()で異常終了してると予想
0102デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/18(月) 11:04:31.36ID:rVrfyiOP0
if(month<4){
sprintf(file_name,"C:\\source\\元データ\\平成%02d年度分\\%04d\\%02d\\%02d\\0001\\0001_%02d.csv",year+1,seireki+1,month,date,name);
} else if(month>=4){
sprintf(file_name,"C:\\source\\元データ\\平成%02d年度分\\%04d\\%02d\\%02d\\0001\\0001_%02d.csv",year,seireki,month,date,name);
}

年と年度の区別が曖昧じゃないか?
データを年で保持しているならパスの"平成%02d年度分"はおかしい
データを年度(4月〜翌3月)で保持しているならyear+1とseireki+1はおかしい

プログラム以前に入力データの正当性が疑問だ
0103デフォルトの名無しさん (アウアウ Sa09-8xJT)2016/07/18(月) 15:28:13.39ID:LiaA67Lea
>>101
回答ありがとうございます。
元データのファイルは既に格納しています。

data、powerやsum_powerを表示してみたら値は出てくるので
元データからの読み込みは成功していると思うのですが……
0104デフォルトの名無しさん (アウアウ Sa09-8xJT)2016/07/18(月) 15:38:56.62ID:LiaA67Lea
>>102
回答ありがとうございます。
年度は1〜12月で保持しているみたいです。
なので、その部分に誤りはないのかと思います。
0105デフォルトの名無しさん (アウアウ Sa09-8xJT)2016/07/18(月) 15:47:48.35ID:LiaA67Lea
このデータを30分平均ではなく
45、5、45、10、45、5、45、50分平均にしたいです(時間割です。)

元データの 「0001_%02d.csv」一つには
1分ごとのデータ×60個が入っています。

if(n%30 == 0 && n!=0){
power[j]=(s/30.0);
sum_pow+=power[j];
s=0;
j++;
}

30分平均はこの辺りで処理していると思われるので
if文を使えば何とかなるような気がしますが上手くいきません。
(その前にトレンドcsvに書き込まれない為、結果も分かりません。)

こちらもよろしくお願いします。
0106デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/18(月) 16:12:28.25ID:rVrfyiOP0
>>104
1月〜12月で保持しているなら"平成%02d年度分"じゃなくて"平成%02d年分"だね

>>105
>45、5、45、10、45、5、45、50分平均にしたいです(時間割です。)
…えーと、つまり任意の時間単位で平均を出したいということかな

とりあえずファイルに書き込まれないのは115行目でファイルクローズしちゃってるからなんだけど
典型的な初心者ソースで最終的にどんな出力を得たいのかよくわからん
まずファイルじゃなくて標準出力に出して確認してみたら?
fqのところをstdoutにすれば出てくるから
0107デフォルトの名無しさん (スッップ Sd28-4wno)2016/07/18(月) 16:17:51.44ID:WRg19xgxd
丸投げワロタ
0108デフォルトの名無しさん (ワッチョイ b0a3-dnI1)2016/07/18(月) 16:26:10.99ID:wUM6RSEB0
下請け業者の皆様
お休みのところご対応ありがとうございます
私は明日からの出社となりますので引き続きよろしくお願いします
0109デフォルトの名無しさん (ワッチョイ 96c2-E7P/)2016/07/18(月) 16:26:26.79ID:sQhm72YI0
特定のデータを処理するためのプログラムなら
そのデータのサンプルでも無いと
どこまで正しく動いているのかいないのか
分からないよ。ということでその元データファイルも
提出しなさい。そうすれば何故csvに書き込まれないかも
すぐ分かる。
0110デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/18(月) 19:02:40.28ID:rVrfyiOP0
>>105
http://www.dotup.org/uploda/www.dotup.org948664.c.html

入力も出力も何やらようわからんのでとにかく適当に分割した結果
案の定ほぼ別物になってしまったがいちおう晒しておこう
出力のフィールド数が5だったり6だったりしたので6に合わせた(最後に,を追加)
0111デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/18(月) 19:07:50.42ID:rVrfyiOP0
>>110
1つ訂正125行目に以下を挿入で
if (m >= 60) m = 0;
0112デフォルトの名無しさん (ワッチョイ 3d3f-4wno)2016/07/18(月) 20:28:19.01ID:0zkecraf0
人のこういう優しさにつけ込むのが所謂ブラック企業なんだろうな
0113デフォルトの名無しさん (アウアウ Sa09-8xJT)2016/07/18(月) 21:09:25.72ID:szyRJqnOa
>>106
回答ありがとうございます。
30分平均は成功しました。

…えーと、つまり任意の時間単位で平均を出したいということかな
その通りです。現在のプログラムが30分平均にするだけなので
学校の時間割通りの平均値を出したいのです。
0114デフォルトの名無しさん (アウアウ Sa09-8xJT)2016/07/18(月) 21:11:21.77ID:szyRJqnOa
>>110
わざわざありがとうございます……
参考にさせて頂きます!
0115デフォルトの名無しさん (JP 0H78-8xJT)2016/07/19(火) 15:09:32.42ID:B5rQ35khH
超初心者です
+-*/を選んで、計算するっていうのを作りました
実数と整数を、自動で判別するプログラムはどうやって作ればいい?
0116デフォルトの名無しさん (ワッチョイ e64e-MgGc)2016/07/19(火) 15:10:56.48ID:yinu3gB50
なんのこっちゃw
0117デフォルトの名無しさん (ワッチョイ bc4f-8xJT)2016/07/19(火) 15:18:50.87ID:qZJsh9sY0
入力が
1[enter] 2[enter] /[enter] では(1/2 を与えた) 解出力は 0
1.0[enter] 2[enter] /[enter] では(1.0/2 を与えた) 解出力は 0.5
そういう話?

色々まんどくせーな
0118デフォルトの名無しさん (ワンミングク MMd0-8KjE)2016/07/19(火) 15:27:44.24ID:oTiv6R7LM
入力は文字列にして
小数点があれば実数、なければ整数って感じ?
0119デフォルトの名無しさん (ガラプー KK6b-rwUM)2016/07/19(火) 15:31:34.46ID:iokl1A3KK
コンパイラの講義でやるように、正規表現実装すればいいじゃん。
納品物でもなさそうだし再帰降下でもええやろ
0120デフォルトの名無しさん (ササクッテロ Sp3d-VzEl)2016/07/19(火) 15:55:09.65ID:11V/uDAvp
逆ポーランド記法な
0121デフォルトの名無しさん (ワッチョイ bc4f-8xJT)2016/07/19(火) 16:02:28.29ID:qZJsh9sY0
2項演算で オペランドが両方とも整数の時は整数演算して結果を整数として push
そうでなければ実数演算して結果を実数として push
型と値がペアになったスタックが欲しいね
0122デフォルトの名無しさん (ドコグロ MMcb-4wno)2016/07/19(火) 19:46:39.89ID:pfxIVr9eM
Variant 型を実装すればいいだけやん
0123デフォルトの名無しさん (スッップ Sd28-4wno)2016/07/19(火) 19:52:44.14ID:vQtM83Qad
遅そう
0124デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/19(火) 20:15:23.99ID:G27E9NlY0
判別自体は小数点の有無を調べればいいがそもそも丸めのない正確な解を
返さなきゃ価値がない電卓アプリではfloatやdoubleなんて使ってられないから
実数ライブラリをどこかから入手するか自前で組むかすることになる
初心者にとっては想像以上にハードルが高い
0125デフォルトの名無しさん (ドコグロ MMcb-4wno)2016/07/19(火) 20:29:35.59ID:pfxIVr9eM
いつの間に電卓アプリとか言う謎の要件が...
0126デフォルトの名無しさん (ワッチョイ 3ec0-jb5v)2016/07/19(火) 21:30:17.62ID:4UFwoQo30
小数点のない指数表記された文字列は?
0127デフォルトの名無しさん (ワッチョイ 7213-ltmW)2016/07/19(火) 21:41:35.17ID:NVpJdz2s0
>>124
1÷3=
0128デフォルトの名無しさん (ワッチョイ 95a2-4wno)2016/07/19(火) 21:43:22.81ID:ojHtJiDQ0
小数点とeの両方見とけばええんとちゃう?
判定要素増やすだけだから特に難しいことないと思うけど。
0129デフォルトの名無しさん (ワッチョイ 4448-8KjE)2016/07/19(火) 22:19:18.65ID:6Fnm1ks20
細かいとこは組ながら考えればイイ
そもそもそこまで求めてないと思うし
0130デフォルトの名無しさん (アウアウ Sa35-4wno)2016/07/19(火) 23:45:51.44ID:XrfHQPHWa
そもそも整数は実数の部分集合だし
0131デフォルトの名無しさん (ワッチョイ a175-wLF7)2016/07/20(水) 01:38:28.55ID:1BoQm6Lx0
ガウス整数・・・
0132デフォルトの名無しさん (ドコグロ MM54-4wno)2016/07/20(水) 06:49:34.79ID:OVKR6W5bM
>>126
エラーでいいんじゃね?
>>129 の言う通りそこまで求められてないだろうし

>>127
昔有理数クラス作って遊んでたことを思い出したわ
0133デフォルトの名無しさん (ワッチョイ 3ec0-jb5v)2016/07/20(水) 06:58:25.79ID:jYzKo/4A0
もう無理っす
0134デフォルトの名無しさん (ワッチョイ 7213-ltmW)2016/07/20(水) 07:07:45.24ID:xCE8dMV30
>>132
有理数クラス,いいねえ
こっちは,最近ようやく多バイト長可変のBigIntegerクラスを実装できて喜んでいる
こういうのは一回やっておくべきだね
0135デフォルトの名無しさん (ワントンキン MMd0-4wno)2016/07/20(水) 07:11:48.09ID:RcqlqcwVM
多倍長ビット計算が出来たら、お姉さん問題の解決まで
後一息だな
0136デフォルトの名無しさん (ワッチョイ 5efa-X2Kd)2016/07/20(水) 07:23:50.16ID:SyPKScZG0
lex yacc 電卓
でググってみたらいいんじゃないかな。
がんばっていくつか読んでみれば君の知りたいことは全部出てくると思うよ。
0137デフォルトの名無しさん (ワッチョイ bb7b-fbyB)2016/07/20(水) 19:43:11.14ID:kI9UQ5rU0
未定義、未定義、処理系定義、未定義…まったくCの規格書ってのは読めば読むほど頭にくる
「決めないことに決めました」て決まりとしておかしいだろガキのヘリクツじゃねーか
せめて「動作を保証しない」とでも明言されればコンパイラで警告出すこともできるのに
するもしないも決まってないから我関せずになっちゃうんだよ
0138デフォルトの名無しさん (JP 0H15-4wno)2016/07/20(水) 20:18:22.67ID:Np7bYZQ7H
警告でない?
0139デフォルトの名無しさん (ドコグロ MM54-4wno)2016/07/20(水) 20:59:09.16ID:OVKR6W5bM
>>137
> 「(どんな動作をするかは)決めないことに決めました」
って言うのが「動作を保証しない」ってことなんだが...
0140デフォルトの名無しさん (ワッチョイ 7213-ltmW)2016/07/20(水) 21:26:11.82ID:xCE8dMV30
>>137
大人になればわかる
0141デフォルトの名無しさん (ワッチョイ e53c-4wno)2016/07/20(水) 21:46:51.77ID:/245QB6g0
ポインタってなんですか?
0142デフォルトの名無しさん (ブーイモ MMb1-4wno)2016/07/20(水) 22:00:19.20ID:juPYLb/MM
白黒ブチの猟犬。101匹いるそうな
0143デフォルトの名無しさん (ワッチョイ e63c-8xJT)2016/07/20(水) 22:06:26.70ID:OHJTpdzQ0
ざんねん それはダルメシアン
0144デフォルトの名無しさん (ワッチョイ 4448-8KjE)2016/07/20(水) 22:22:28.82ID:idTmHzsk0
釣りの決め手は♪
0145デフォルトの名無しさん (ブーイモ MM28-4wno)2016/07/20(水) 22:36:01.98ID:aP+aqabFM
ウルトラ警備隊のあれだな
0146デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/21(木) 21:18:50.48ID:1ZCtMixLa
sscanfの扱いについて、

      n = sscanf(buf, "%s %d %s %s",
data[count].name, &data[count].birth,
      data[count].tel, data[count].mail);
      count++;

人物のデータ、名前、生年月日、電話番号、メールアドレスを格納する構造体変数dataがあります。
fgetsでファイルからデータをbufに読み込み、bufから各情報をsscanfで格納していきます。
このときループの中で、sscanfが毎回bufの先頭から読んでしまうため、同一人物のデータがすべて書き込まれてしまいます、次のデータに移動したい場合はどうすればよいでしょうか?

データファイルは
taro 19940625 123-4567 [email protected]
のように書いてあります。
0147デフォルトの名無しさん (ワッチョイ 6f3c-iqWO)2016/07/21(木) 21:35:26.49ID:PLbz3kCO0
次のデータとは何?
多分ループの中に fgets を入れていないのが主因だと思うけどー

for() {
fgets()
...
n = sscanf()
count++;
}
0148デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/21(木) 21:52:07.96ID:1ZCtMixLa
>>147

ループのそとでfgetsを使いストリームからbufにデータをいれます。

ループ内でsscanfを使ってbufに格納されたデータを取り出していきます。

fgets(buf, STRING_MAX, fp);

  while(1){

      n = sscanf(buf, "%s %d %s %s",
     data[count].name,&data[count].birth,
      data[count].tel, data[count].mail);
      count++;

 次のデータとは
taro 19940625 123-4567 abc@ef nanaco 19900514 321-7654 fec@ba
....
と、データが続いてますが太郎の情報についてはうまく読み取れますが構造体配列の2番目以降についても太郎の情報が格納されてしまいます。
ループするたびにsscanfでbufから読み取っているので当たり前と言えば当たり前なのですがこれをうまくシフトさせたいのです。
0149デフォルトの名無しさん (ワッチョイ 6f3c-iqWO)2016/07/21(木) 22:03:47.94ID:PLbz3kCO0
あー データの区切りと 項目の区切りが同じなのでちょっといやん
↓ここの区切り文字が スペースじゃなくて、もっとユニークだったらよかった
taro 19940625 123-4567 abc@ef nanaco 19900514 321-7654 fec@ba

char *q;
char *top = buf;
while () {
 sscanf(top, ......)
 q = strstr(top, data[count].mail);
 if (q == NULL) break;
 top = q + strlen(data[count].mail);
 count++;
}

top から 最終項の mail の文字列さがして、
次は mail の文字列の次からに
0150デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/21(木) 22:27:01.26ID:1ZCtMixLa
>>149
ありがとうございます。
把握は出来てないのでこれをもとに勉強してみます!

ちなみにデータが

taro 19940625 123-4567 abc@ef nanaco 19900514 321-7654 fec@ba

と改行されていても可能でしょうか?
0151デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/21(木) 22:28:15.58ID:1ZCtMixLa
>>149
あ、ミスです...

taro 19940625 123-4567 abc@ef
nanaco 19900514 321-7654 fec@ba

と、改行していても、です
0152デフォルトの名無しさん (ワッチョイ 6f3c-iqWO)2016/07/21(木) 22:42:24.39ID:PLbz3kCO0
>>151
sscanf の戻り値みてループから抜け出してるなら大丈夫なんじゃない? 知らんけど。
(ただ データの途中での改行は考慮されていないし、する気もない)
0153デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/21(木) 22:57:24.82ID:1ZCtMixLa
>>152
有難うございます
0154デフォルトの名無しさん (ワッチョイ eb7b-hTcf)2016/07/21(木) 23:06:19.98ID:61wNi/Kz0
>>151
可能であれば入力データのほうを改行区切りに直したほうがラクだよ
fgets()周りのコードかあるいはもっと前の段階かはわからないが
0155デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/22(金) 02:33:44.54ID:GCLELjoma
>>154
そうですね、そちらのほうがデータも見やすいのでそうします。
0156デフォルトの名無しさん (ワッチョイ e33c-eQ6f)2016/07/22(金) 06:49:21.81ID:4AsDq8Wu0
fgetsってなんて読むんですか?
エフゲッツ?
0157デフォルトの名無しさん (ワッチョイ 6f52-3y5z)2016/07/22(金) 07:29:23.48ID:+awE6fq00
はい。googleで検索ヒットした数でも明白

fgets "エフゲッツ" の検索結果・・・7件
fgets "エフゲットエス" の検索結果・・・6件
0158デフォルトの名無しさん (ワッチョイ 0ffa-uLMn)2016/07/22(金) 11:59:17.86ID:jm48pVSJ0
そのエフゲッツの7件のうち2件は「間違いらしい」という話だし、
「fget エフゲッツ」はタイプミスと推測は出来るものの意味不明だし、
「エフゲッツって言うな!!!!!!!!!!!!!!!!!!!」なんてのもあるし。
まあ、自動車のDATSUNも海外では「ダッツン」と発音されてたなんて話もあるし、
通じるならどっちでもいいんじゃない?
0159デフォルトの名無しさん (ワンミングク MMdf-btrs)2016/07/22(金) 12:58:30.08ID:g6gTwpPJM
30年使ってるけどエフゲッツは初めて聞いたw
0160デフォルトの名無しさん (ワッチョイ a3a1-Bfh0)2016/07/22(金) 13:59:29.40ID:b2ItDsZj0
構文解析する,パースする
パーサ

英語ではパーズだったりする
パーザ
0161デフォルトの名無しさん (アウアウ Sa0f-vGuo)2016/07/22(金) 14:21:08.61ID:wrVMluFHa
1から100までの乱数を発生させ、素数を20個ピックアップし、その素数20個を昇順にソートするプログラムを作成せよっていうレポートがあるのですが、どなたか教えていただけませんか

素数判定をするアルゴリズム、ソートのアルゴリズムはサブ関数の形で実装することと必要条件があります
ソートはバブルソートの原型ができているので、乱数発生からそれから素数を20個抽出して配列に格納する方法を教えて欲しいです
0162デフォルトの名無しさん (ワッチョイ e7a3-+ugl)2016/07/22(金) 15:12:23.94ID:+FwsnM/Y0
乱数生成も素数の判定もちょっとググればいくらでも出てきそうなもんだが
0163デフォルトの名無しさん (ワッチョイ 137b-6l4d)2016/07/22(金) 15:59:38.71ID:h8F0jyA80
os windows8.1
指定したフォルダの中身のtxtフォルダを削除するアプリを作りたいんですが下記のコードを実行してみたら「指定されたパスが見つかりません」と出ます。
どこを直せばいいんでしょうか。
#include <stdlib.h>

int main(){
system(
0164デフォルトの名無しさん (ワッチョイ ebc9-eQ6f)2016/07/22(金) 15:59:39.96ID:tN7lAqUk0
乱数は厳密に作ろうとするとすげー難しいんだけどどの程度?rand()でいいの?
0165デフォルトの名無しさん (ワッチョイ ebc9-eQ6f)2016/07/22(金) 16:00:02.85ID:tN7lAqUk0
>>161
つーか宿題スレ案件だろこれ
0166デフォルトの名無しさん (ワッチョイ 137b-6l4d)2016/07/22(金) 16:07:23.30ID:h8F0jyA80
>>163
なぜか消えるので
system("del C:\\ユーザー\\owner\\Desktop\\○○\\*.txt\"");
return 0;
}
systemの行から下はこんな感じです
0167デフォルトの名無しさん (ワッチョイ b3dc-EIYa)2016/07/22(金) 16:13:04.14ID:3i1N8rKm0
>>166
正味この通りだとすると、パス文字列の末尾には " があるけど
先頭部分には " が書かれていない、からかナ?
0168デフォルトの名無しさん (ガラプー KKaf-/nZE)2016/07/22(金) 16:25:05.45ID:Ah0vbZMhK
>>166
C:\\ユーザー → \"C:\\Users
0169デフォルトの名無しさん (ワッチョイ 137b-6l4d)2016/07/22(金) 16:31:11.16ID:h8F0jyA80
>>167 >>168
ありがとうございます出来ました!
勉強になりました!
0170デフォルトの名無しさん (オッペケ Sr8f-eQ6f)2016/07/22(金) 22:07:27.00ID:UUfx7UYRr
>>161
順番に探していけば、ソートする必要無い気が
0171デフォルトの名無しさん (ワッチョイ b324-iqWO)2016/07/22(金) 23:19:05.85ID:bbkxcVUY0
#include <stdio.h>
int main()
{
int a,b,c,d,e;
a=10;
b=5;
a=a-b;
b=(a=a+1) * (b=b-1);
c=(a=a-1) * (b=b+1);
d=(a=a+1)%2;
e=a==b;
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
printf("%d\n",d);
printf("%d\n",e);
}
6になる理由教えて下さい。
0172デフォルトの名無しさん (ワッチョイ a3a1-LCC3)2016/07/22(金) 23:39:22.97ID:Y0XhtuQG0
なんでaが6かって事?
見たまんまそうなってるからとしか
http://ideone.com/J7dk7q

疑問は明確化してくれるとこちらも応えやすい
0173デフォルトの名無しさん (ワッチョイ b324-iqWO)2016/07/22(金) 23:44:10.79ID:bbkxcVUY0
>>172
ありがとうございます!
続けて計算してました。
0174デフォルトの名無しさん (ワッチョイ eb7b-hTcf)2016/07/23(土) 00:09:58.86ID:t4mh2O7O0
>>161
任意の数xまでの素数フラグ付きリストを作るサンプルをうpしておく
愚直にメモリを使うのでx<=10000に制限してある
http://www.dotup.org/uploda/www.dotup.org951581.c.html

乱数を1つとってはis_primeで調べて素数ならソート対象の配列へってな感じか
あるいはさらに素数だけのリストに移し替えてx以下の範囲で適当に拾うか
tgmath.h使ってるのでgcc -std=c99 aaa.c -lmでな
0175デフォルトの名無しさん (ワッチョイ d748-btrs)2016/07/23(土) 00:37:25.45ID:qQHOR94o0
>>171
10-5=5
5+1=6
5-1=5
5-1=6
そのまんまやね
0176デフォルトの名無しさん (ワッチョイ d748-btrs)2016/07/23(土) 00:45:13.55ID:qQHOR94o0
>>161
乱数を出して1と自分だけで割りきれるか判定したらいいのでは?
0177デフォルトの名無しさん (ワッチョイ b324-iqWO)2016/07/23(土) 00:53:22.57ID:F2TFOxbv0
#include <stdio.h>

int main(void) {
int i, sum;
for (i=0,sum=0; i<10; i=i+1) {
switch (i) {
case 3:
sum=sum+1;
case 7:
case 8:
sum=sum-1;
}
sum=sum+i;
}
printf("%d\n", sum);
}
43にどうしてなるか教えて下さい。
0178デフォルトの名無しさん (ワッチョイ e7a3-+ugl)2016/07/23(土) 03:22:37.29ID:c//B47Cr0
>>177
自分ではいくつになると思ったの?
それと switch-case 文では各 case の最後に break を入れないとそれ以降のコードも全部実行されちゃうから注意ね
この場合、i = 3 の場合に case 3 の sum = sum + 1 と case7, 8 の sum = sum -1 の両方が実行される
0179デフォルトの名無しさん (ワッチョイ c7d4-iqWO)2016/07/23(土) 03:43:58.52ID:TpuZwDxO0
>>178
いつも思うけどswitch文をなんでそんな仕様にしたのか不思議。
0180デフォルトの名無しさん (ワッチョイ 8fc0-YlVQ)2016/07/23(土) 05:38:40.86ID:28P50g8Q0
case単なるラベル説
0181デフォルトの名無しさん (ワッチョイ 6f3c-iqWO)2016/07/23(土) 06:22:21.90ID:+oFTvXw10
ブロックでもないから使い捨て変数の宣言もできないし

switch () {
case 8:
 int a;  ←文法エラー
 ...
}

switch () {
case 8:
 {
  int a;  ←ブロックの先頭なのでOK
  ...
 }
}
0182デフォルトの名無しさん (ワッチョイ f37b-UWqA)2016/07/23(土) 06:48:20.00ID:ksMKg/p+0
フォールスルーは使い方によっては柔軟な構造が作れて便利
反面うっかりミスも招きやすいけど、もともとC言語はすべてプログラマ任せのそういう性格の言語
アセンブリ言語で条件ジャンプ命令使った経験があれば至極当たり前の構造だとわかる
break文使った場合の方が無条件ジャンプで飛びまくってかえって分かりにくくなる場合がある
0183デフォルトの名無しさん (ワッチョイ 0b5f-rOFf)2016/07/23(土) 08:35:15.74ID:51hl0PjR0
>>181
C99すらサポートしてない処理系カワイソス
0184デフォルトの名無しさん (ワントンキン MMdf-eQ6f)2016/07/23(土) 08:56:42.57ID:v13krmBbM
意味不明。Latticeの時代から使えると思うが?
0185デフォルトの名無しさん (ワッチョイ 1351-wAF5)2016/07/23(土) 09:06:52.08ID:V4JGvq9g0
C99で>>181の上のが通るんだっけ?バグを呼び込むだけに思えるが。
0186デフォルトの名無しさん (ワッチョイ f37b-UWqA)2016/07/23(土) 09:36:14.85ID:ksMKg/p+0
C99をサポートしていなくてもC++の処理系を兼ねている大抵のコンパイラであれば普通に上のコーディングでも通るだろ
0187デフォルトの名無しさん (ワッチョイ 5f7b-tmF6)2016/07/23(土) 10:02:24.98ID:QZGMm3e00
>>186
visual c++がそれをサポートしたのは2013(2012?)からだが
0188デフォルトの名無しさん (ワッチョイ eb7b-hTcf)2016/07/23(土) 12:14:17.03ID:t4mh2O7O0
>>181の上のケースはc11ですらエラーになる
test.c:33:4: error: expected expression
int a;
^

c++14では問題ないしcの他の制御文でも問題ないからswitch文での(不自然な)特例かな
やはりcとc++は別の言語でc/c++なんてくっつけて表記するべきじゃないね
0189デフォルトの名無しさん (ワッチョイ eb7b-hTcf)2016/07/23(土) 13:17:53.03ID:t4mh2O7O0
c++規格の中のcライクに書けるという部分を利用しているだけの
自称c使い(実際はc++準拠のコードを書いているc++使い)が多そうね
c規格を早々に切り捨てたmsvc++やborland c++の功罪かな
0190デフォルトの名無しさん (ワッチョイ 7719-iqWO)2016/07/23(土) 15:00:52.08ID:49PMPYy60
C面倒くさ!!
0191デフォルトの名無しさん (ワッチョイ 7742-iqWO)2016/07/23(土) 15:02:02.32ID:G0Un6D3v0
特定の言語仕様に依存しなければめんどくさいことはないと思うな
0192デフォルトの名無しさん (ワッチョイ d748-btrs)2016/07/23(土) 16:25:42.47ID:qQHOR94o0
でもCならなんでもできちゃう
速いし
0193デフォルトの名無しさん (ワッチョイ 233b-eQ6f)2016/07/23(土) 17:14:44.12ID:MoUEdc3s0
アセンブラだからね。
0194デフォルトの名無しさん (ワッチョイ ef9f-anJb)2016/07/23(土) 17:40:42.99ID:FSNRvg270
C言語をアセンブラという奴は大抵アセンブラを知らない
0195デフォルトの名無しさん (ワッチョイ 6f3c-eQ6f)2016/07/23(土) 18:23:38.15ID:gWGXflXy0
そこそこアセンブラ知ってるけどCは高級アセンブラって思うよ
0196デフォルトの名無しさん (ワッチョイ f37b-UWqA)2016/07/23(土) 19:10:34.16ID:uPmAzTRR0
高級アセンブラは型を持った変数が使えます
構造化プログラミングもサポートします
外部ライブラリをリンクすることで機能を拡張することもできます
ただし基本的にレジスタは隠蔽されていますので直接操作することは出来ません
詳しくは操作マニュアルをご覧ください
0197デフォルトの名無しさん (アウアウ Sa0f-eQ6f)2016/07/23(土) 19:17:00.00ID:zVD1ZjSea
いまどきのPCで、言語の違いで速度が問題になることはまずないな。
これの方が速い、とか言って分かりにくいコードを書くのは、
やめようぜ。
0198デフォルトの名無しさん (ワッチョイ 137b-eQ6f)2016/07/23(土) 19:31:19.26ID:5I3ipfZz0
50倍違う。とありますが?
http://uchukamen.com/HPCSharp/ParallelImageProcessing/Default.htm
0199デフォルトの名無しさん (ワッチョイ f37b-UWqA)2016/07/23(土) 20:07:55.04ID:uPmAzTRR0
C#の単純処理をアルゴリズムの工夫で4.7秒から0.4秒へ高速化した上で
Native Cの処理で更に0.1秒になったって記事にしか見えないんだが
トータルで50倍違うといってもほとんどがアルゴリズムの工夫による部分だな
0200デフォルトの名無しさん (ワッチョイ e33c-eQ6f)2016/07/23(土) 20:14:04.68ID:nS1UrBYS0
ppm画像から白色っぽい画素を抽出するプログラム教えて下さい。
0201デフォルトの名無しさん (ワッチョイ 63c1-ldQr)2016/07/23(土) 20:20:03.54ID:wENbv+830
ファイルから読み込んだデータをbuf配列に取り込んでそこから構造体配列のそれぞれのメンバーに入れたいのですが良い方法はありますか?

http://ideone.com/iAbxlS

ファイルの中身はこのようにデータが改行で区切られているとします。
1 takasi 010-1111-1111 [email protected]
2 naoko 020-2222-2222 [email protected]
3 yusuke 030-3333-3333 [email protected]
0202デフォルトの名無しさん (ワッチョイ 7742-iqWO)2016/07/23(土) 20:21:14.74ID:G0Un6D3v0
アルゴリズムの工夫をC言語で行うとしたら、どうなるの?同じように高速化できるの?
0203デフォルトの名無しさん (ワッチョイ eb7b-hTcf)2016/07/23(土) 20:29:08.27ID:t4mh2O7O0
>>200
白っぽいというのはrgbそれぞれいくつ以上を言っているのかその閾値を決めて(例えば#E0E0E0以上)
テキスト形式なら1行読んでsscanf()、バイナリならヘッダをスキップしてから3バイトずつfread()
とってきたrgb値をそれぞれ比較して全て閾値以上なら白っぽいと判定する
0204デフォルトの名無しさん (ワッチョイ 137b-eQ6f)2016/07/23(土) 20:45:58.48ID:5I3ipfZz0
RGBからYCbCrに変換してYで閾値を決定かな
0205デフォルトの名無しさん (ワッチョイ afc2-SOs/)2016/07/23(土) 21:09:11.86ID:jBz9FFWe0
>>201
fscanfを使うのが一番簡単。
http://ideone.com/GGrTtX
0206デフォルトの名無しさん (ワッチョイ afc2-SOs/)2016/07/23(土) 21:12:31.36ID:jBz9FFWe0
あ、fcloseするのを忘れた。
それとint iがかぶってるが、まあ、分かるだろう。
0207デフォルトの名無しさん (ワンミングク MMdf-btrs)2016/07/23(土) 22:13:03.59ID:d5xxoasFM
何百万件ってデータをあれこれすると目に見えて速さの違い出るよ
VBとかJAVAで組んだバッチがあまりにも遅くてCで作り直したことあるし
0208デフォルトの名無しさん (ワンミングク MMdf-btrs)2016/07/23(土) 22:24:07.60ID:d5xxoasFM
こないだやったのは一千万件オーバーだった
0209デフォルトの名無しさん (ワンミングク MMdf-btrs)2016/07/23(土) 23:04:22.19ID:d5xxoasFM
>>201
スペースを探しながら構造体のメンバに入れる
0210デフォルトの名無しさん (ワッチョイ b324-iqWO)2016/07/23(土) 23:23:12.01ID:F2TFOxbv0
>>178
43ってcase3+7+8ってことですか?
そんなに大きな数にならないんですが詳しく教えていただけると嬉しいです。
0211デフォルトの名無しさん (ワッチョイ 63c1-ldQr)2016/07/23(土) 23:36:12.45ID:wENbv+830
>>205
おお、有難うございます。
0212デフォルトの名無しさん (ワッチョイ 63c1-ldQr)2016/07/23(土) 23:39:27.24ID:wENbv+830
>>209
回答有難うございます
0213デフォルトの名無しさん (ワッチョイ eb7b-hTcf)2016/07/23(土) 23:43:46.09ID:t4mh2O7O0
>>210
http://codepad.org/VRCqJfvy
0214178 (ワッチョイ e7a3-+ugl)2016/07/24(日) 00:16:15.92ID:U3oBuNtH0
>>210
0から9まで足すと45、case 7, 8 のときはそれぞれ1ずつ引くからトータルで43。
>>213 の人がやってくれたみたいに、for ループの中に printf 文を入れて、i が 1 増えるごとに sum がどう増えるか自分で見てみ
0215デフォルトの名無しさん (ワッチョイ b324-iqWO)2016/07/24(日) 00:53:48.52ID:/0loRh9X0
>>213
>>214
ありがとうございます!
0216デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/25(月) 16:46:33.20ID:1Hi4Wbuca
http://ideone.com/YNFAxg

リダイレクトしてファイルを読み込みその中身を構成してる文字(大小a〜zのみ)の個数を割り出すプログラムを作ってみました。

ファイルの中身がabbcccだとしたら
a ......1個
b ......2個
c ......3個
と表示するプログラムです。

読み込むファイルの文字数制限なのですが現在はdefineでbuf配列の大きさを予め決めています。
これをファイルの中身を読み込めるだけ読み込むことって出来ないでしょうか?
0217デフォルトの名無しさん (ワッチョイ 774f-iqWO)2016/07/25(月) 16:53:39.71ID:WJZmJjXv0
ファイルから全て読み込んでから処理せずに
逐次処理するスタイルはだめなの?

ファイルから1文字だけ読み込んで
文字に応じてカウントアップ
続けて次の1文字を読み込み(ファイル終端ならば終了)

int counter[MAX_CHAR] = { };
int ch;
while ((ch = fgetc()) != EOF) {
counter[ch]++;
}

こんな感じ。

ファイルからファイルサイズを取得して、別途領域を確保
その確保領域に一気に読み込む ってできるかどうかは知らない
0218デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/25(月) 17:22:49.86ID:1Hi4Wbuca
>>217
処理工程としては、ファイルの先頭文字と2番目文字を比較、同じならカウントし2番目文字を削除、違ったなら
3番目と比較...(以降繰り返し)
最後の文字まで行ったら先頭文字を1つシフトさせまた同じ処理とさせています。
また、英文字a〜z以外の文字(記号など)なら削除

としているので1文字取り込み処理するというのに対応出来ていません。全体が見えないと動かない仕様になっています。
0219デフォルトの名無しさん (アウアウ Sa0f-ldQr)2016/07/25(月) 17:24:13.22ID:1Hi4Wbuca
>>217
あ、解答の意味を履き違えてました。
これなら良さそうです!有難うございます。
0220デフォルトの名無しさん (ワッチョイ afc2-SOs/)2016/07/25(月) 18:35:44.54ID:yAtDIDYb0
ファイルから全て読み込んでから処理するなら、
最初にファイルサイズを取得して、そのサイズ分の
メモリを確保してfreadでそこに読み込むことが出来る。
ファイルサイズはオペーレーティングシステムのAPIを呼び出すのが
一番いいけど、Cの標準関数だけでやるなら
>>次
0221デフォルトの名無しさん (ワッチョイ 6f3c-iqWO)2016/07/25(月) 18:38:48.06ID:Gmgv7LMs0
>>220 stdin が対象なんで ファイルサイズの取得ってできるのかね?
>>次
0222デフォルトの名無しさん (ワッチョイ afc2-SOs/)2016/07/25(月) 18:44:09.46ID:yAtDIDYb0
バイナリモードでファイルを開いて、ファイルの最後までシークすれば、
その時点のファイルポインタの場所がファイルサイズバイトになるのでftellで取得出来る。
ファイルサイズを取得したら、ファイル先頭までシークし直し、
ファイルサイズ分のバッファを確保し、freadでファイルサイズバイト分、つまり、
ファイル先頭から終わりまでを一気に読み込むことが出来る。
FILE* fin=fopen(filename,"rb");
fseek(fin,0,SEEK_END);
long filelength=ftell(fin);
fseek(fin,0,SEEK_SET);
unsigned char* buf=(unsigned char*)malloc(filelength);
fread(buf,filelength,1,fin);
fclose(fin);
0223デフォルトの名無しさん (ワッチョイ d748-btrs)2016/07/25(月) 20:48:07.44ID:jC//jHV30
メモリマップドファイル使う方法もオススメ
0224デフォルトの名無しさん (ブーイモ MM4f-eQ6f)2016/07/25(月) 20:49:45.99ID:jyOK5noCM
BSD版のgrepのソースのコメントを一度読んでみるべし
0225デフォルトの名無しさん (ワッチョイ f304-sQTX)2016/07/25(月) 21:28:25.80ID:OYOYmG0Q0
入力した文字列のaの数を数える下の関数で小文字のaを入力すると入力した数+1個表示されてしまいます
||str[ i ]=='A'を抜くとちゃんと入力したaの数が表示されるのですがその理由がわかりません

int search(char str[ ])
{
int i,c;
c=0;

for(i=0;str[ i ]!='¥0';i++){
if(str[ i ]=='a'||str[ i ]=='A'){
c++;
}
}
}
0226デフォルトの名無しさん (ワッチョイ f304-sQTX)2016/07/25(月) 21:29:57.62ID:OYOYmG0Q0
>>225
return c;が抜けました
0227デフォルトの名無しさん (ガラプー KK4f-/nZE)2016/07/25(月) 21:33:23.54ID:e7hq+Tl6K
>>226
コピペでOK
0228デフォルトの名無しさん (ワッチョイ f304-sQTX)2016/07/25(月) 21:35:44.43ID:OYOYmG0Q0
自分で書いたものをまた見直したら¥0が¥nになってました
お騒がせしてすみませんでした
0229デフォルトの名無しさん (ワッチョイ afc2-SOs/)2016/07/26(火) 21:06:34.78ID:5Qe4QSf40
int isA(char ch){
if(ch=='a' || ch=='A')
return 1;
else
return 0;
}

int search(char* str)
{
int c=0;

while(*str){
if(isA(*str))
c++;

str++;
}
return c;
}
0230デフォルトの名無しさん (ワッチョイ 8f81-eQ6f)2016/07/26(火) 21:33:59.80ID:gVmcWu9z0
c += isA(*str);
0231デフォルトの名無しさん (ワッチョイ 0faf-LCC3)2016/07/26(火) 22:15:57.76ID:79EOArEe0
1+2+3+4+ ...10=55になるfor文が書けません...。
どうかご教授ください。
0232片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK4f-/nZE)2016/07/26(火) 22:22:54.25ID:c+bkeQOvK
>>231
int i, sum = 0;
for (i = 1; i <= 10; ++i) sum += i;
printf("%d", sum);
0233デフォルトの名無しさん (ワッチョイ 8f81-eQ6f)2016/07/26(火) 22:29:21.07ID:gVmcWu9z0
>> 231
int i=1;
for(;i;i--){
printf("1+2+3+4+ ...10=55");
}
0234デフォルトの名無しさん (ワッチョイ 0faf-LCC3)2016/07/26(火) 23:03:09.41ID:79EOArEe0
>>232
早速のご回答ありがとうございます。
sumに計算結果を入れてみたところ、ちゃんと計算されました。ありがとうございました。
0235デフォルトの名無しさん (ワッチョイ 0faf-LCC3)2016/07/26(火) 23:04:24.80ID:79EOArEe0
>>233
printfに書けばそのまま表示できてしまうのですが笑
0236デフォルトの名無しさん (ワッチョイ 5f7b-tmF6)2016/07/27(水) 01:36:10.47ID:GLyxaors0
「ご教授」なんて言ってるから、からかわれたんだよ
0237デフォルトの名無しさん (ワッチョイ 7f04-6bfQ)2016/07/28(木) 00:46:17.53ID:cKPe2Mgm0
double型の加算について質問です。
0.1を10回加算すると1.0にならない理由はわかるのですが(丸め誤差)、なぜ1.0を切った数字になるのですか?
0.1をdoubleで表現すると、丸め誤差で0.1より大きい数字になるため10回加算すると1.0を超えた数字になると思ったのですが・・。
0238デフォルトの名無しさん (ワッチョイ 793f-Y0VN)2016/07/28(木) 02:12:00.78ID:onxGaNpC0
2の補数の仕組み上正確な10進数を表せないので近似を取るしかないから
0239デフォルトの名無しさん (ワッチョイ 7f04-6bfQ)2016/07/28(木) 02:23:33.80ID:cKPe2Mgm0
>>238 返答ありがとうございます。
ですが、それは0.1における近似ですよね?doubleで近似すると0.1より大きくなります。
それを10回足すと、普通に考えたら1.0より大きくなると思うのですが、
実際は0.9999・・台になります。この理由がよくわかりません・・・。
このヒントかよくわかりませんが、doubleの0.1を4回足すと推測通り0.4より大きい数値になるのですが、
5回目は0.5丁度となり、6回目以降が5.9台と減った数値になるみたいです。
減る理由を分かる方がいらしたらよろしくお願いします。
0240デフォルトの名無しさん (ブーイモ MMb8-Y0VN)2016/07/28(木) 02:24:57.70ID:q4CoLhmAM
自分でビットパターン作って手計算すればわかると思うけど
0.1ずつ足していくと0.4までは真値より大きくて
0.5でピッタリになって、それ以降は真値より小さくなる
これは0.1の丸め誤差で増える分よりも
加算時の桁数の差が大きくなって桁落ちの方が大きくなるため

ただし、double d1=0.1, d2=0.2; として、
コンパイラやオプションによっては
d2+d1とd2+0.1が等しくなかったりするので注意
0241デフォルトの名無しさん (ブーイモ MMb8-Y0VN)2016/07/28(木) 02:29:10.46ID:q4CoLhmAM
>>238
浮動小数点では2の補数関係ない
半端な知識を披露しないほうがいいよ
0242デフォルトの名無しさん (ワッチョイ 3e9f-Fmt2)2016/07/28(木) 02:36:33.78ID:0eJShhc00
うちの環境では0.1を足していくだけでは誤差が全く出ないわ
0243デフォルトの名無しさん (ワッチョイ 3d7b-gwQF)2016/07/28(木) 02:50:22.98ID:IV1WPLTi0
何のライブラリ使ってんの?
あるいはIEEE754の表現以外で浮動小数点を実装している特殊な処理系か?
0244デフォルトの名無しさん (ワッチョイ 7f04-6bfQ)2016/07/28(木) 03:35:34.45ID:cKPe2Mgm0
>>240 返答ありがとうございます。
なるほど、途中から桁落ちが起きていたのですか・・、全く読み取れませんでした。
ちなみに環境はterapadにプログラムを書いてcygwinでコンパイルするという・・プログラム科の課題の一つでした。
ありがとうございました!
0245デフォルトの名無しさん (ワッチョイ 3e9f-T0T6)2016/07/28(木) 04:02:30.74ID:0eJShhc00
>>243
ごめん。気のせいだった
0246デフォルトの名無しさん (ワッチョイ 88d4-oK17)2016/07/28(木) 06:14:55.05ID:wlrrXeBH0
浮動小数点数は、実装依存じゃないの?
0247デフォルトの名無しさん (ワッチョイ e27b-1ZjC)2016/07/28(木) 06:59:10.40ID:3czRcPlE0
>>240
それは桁落ちではなく情報落ち
半端な知識を披露しないほうがいいよ
0248デフォルトの名無しさん (ブーイモ MMb8-Y0VN)2016/07/28(木) 08:36:43.22ID:q4CoLhmAM
ホントそうだね
スマヌ
0249デフォルトの名無しさん (ササクッテロ Sp69-xRNj)2016/07/29(金) 22:36:07.99ID:nPySIBphp
fdlibm
0250デフォルトの名無しさん (ワッチョイ 778b-UbOe)2016/07/29(金) 22:37:13.13ID:HkC4uS0r0
>>241
>>238の突っ込みどころはそこではないのでは…
0251デフォルトの名無しさん (JP 0Hc8-oK17)2016/07/30(土) 16:24:20.90ID:MmhUYtTKH
Github見て勉強してるんだけど
複数のファイルがある場合どうすればいい?
使ってるコンパイラはNotepad++ gcc とvs2008です
0252デフォルトの名無しさん (ワッチョイ ba13-alRo)2016/07/30(土) 17:12:54.13ID:bEVm2oFY0
>>251
-c でコンパイル,出来たオブジェクトファイルをリンカで結合する
0253デフォルトの名無しさん (ワッチョイ 745b-xRNj)2016/07/30(土) 20:15:46.74ID:rEivWNPl0
cl cppファイル全部
っていうか複数ファイルあるならmakefileとかslnファイルあるんじゃないの?
0254デフォルトの名無しさん (ワッチョイ 9cba-xRNj)2016/07/30(土) 21:17:41.46ID:v/rkDCKK0
なぜ
とっくの昔にC++に移行しないの?
0255デフォルトの名無しさん (ワッチョイ 7f5b-Y0VN)2016/07/30(土) 21:21:22.38ID:mdwiSvxY0
C++に移行しないといけない理由はなんなん?
0256デフォルトの名無しさん (ワッチョイ 9cba-xRNj)2016/07/30(土) 21:55:14.47ID:v/rkDCKK0
ケンカするつもりは無い
環境がCならCで順応してくれ
0257デフォルトの名無しさん (ワッチョイ 793f-Y0VN)2016/07/30(土) 22:38:03.58ID:JJQOf6Br0
?
Cスレで頓珍漢なことを言い始めたと思ったら…
暑くて頭おかしくなったのかな
0258デフォルトの名無しさん (ワッチョイ de3c-Y0VN)2016/07/30(土) 22:45:02.43ID:SD9Rxi9F0
喧嘩するつもりがないのにわざわざCスレに来るさびしんぼさん?
0259デフォルトの名無しさん (JP 0Ha7-UZ/1)2016/08/04(木) 13:01:33.28ID:z5hdl0BsH
fgetsの機能について教えて下さい

fgetsを使ってテキストを読み込むとき
ストリームからテキスト先頭文字のポインタを渡されて順次文字を読み込み\0があれば読み込みをいったんやめそこまでの文字列を渡す。そこのポインタを記憶しておき次は記憶したポインタからまた順次文字を読み込み...というのを繰り返し最終行はeofまで読み込む

という処理の理解であっていますか?
0260デフォルトの名無しさん (ワンミングク MM2f-d+5h)2016/08/04(木) 13:26:33.19ID:sfGP0dVwM
eof の定義から
0261デフォルトの名無しさん (JP 0Ha7-UZ/1)2016/08/04(木) 13:34:31.68ID:z5hdl0BsH
>>260
ファイルの終端にeofが置かれてて
-1が値が返るということくらいしかわかりません
0262デフォルトの名無しさん (ワッチョイ 17ff-1eGW)2016/08/04(木) 14:02:03.10ID:hTDvIGUA0
今どき物理的にEOFの入ってるファイルのが珍しい気がする
読み込みは\0じゃなくて改行か指定したバイト数までな
終端に\0が入るかどうかは指定したバイト数まで読んだかどうかによる
戻り値は読み込んだバイト数
0263デフォルトの名無しさん (ワッチョイ 3ba1-kOsX)2016/08/04(木) 15:21:56.01ID:suQlUQ8p0
>>259
ちがいます
テキストファイルに'\0'は、ない

バッファを用意しておく。
fgetsは、バッファサイズよりすくないぶんをよみとって、バッファの最後に'\0'をつけます。これでCの文字列になる。
ファイルの終わり(EOF)にきたらNULLを返す

EOFは、つかいません
0264デフォルトの名無しさん (ワッチョイ 3ba1-kOsX)2016/08/04(木) 15:26:25.32ID:suQlUQ8p0
fgetsの文字列は、改行もふくまれる。必要に応じて改行を削除しなければならない
0265デフォルトの名無しさん (ワッチョイ 674f-+Lqe)2016/08/04(木) 15:33:49.69ID:ZweTvWs40
fgets(buf, n ,fp)
n-1文字まで または それまでに改行かファイルの終端が来るまで
buf におき、さらに \0 を付加

付加する \0 込みで buf[n] の範囲内 (buf[0]〜buf[n-1]まで )
に収まるように、1回の読み込みの打ち切りを行ってくれる
0266デフォルトの名無しさん (ワッチョイ f7a3-TDLi)2016/08/04(木) 15:59:00.52ID:aPVsq7KF0
man fgets だと明確だな。>>265の通りに書いてある。
n-1文字ってのは最後に¥0を追加するからなのね
0267デフォルトの名無しさん (JP 0Ha7-UZ/1)2016/08/04(木) 16:02:07.28ID:z5hdl0BsH
詳しく有難うございます
0268デフォルトの名無しさん (ワッチョイ 2fc2-4YG7)2016/08/04(木) 20:11:14.55ID:S+iLZ+A10
fgetsは風月と読むんだよ。
0269デフォルトの名無しさん (ワッチョイ bba2-d+5h)2016/08/04(木) 20:57:35.00ID:cCkuFoiR0
(σ・∀・)σゲッツ!!
0270デフォルトの名無しさん (ワッチョイ 6b7b-uQNM)2016/08/04(木) 23:49:23.20ID:xrkPED4y0
テキストファイルは改行で終わらなければならない、という決まりがposixにはあってな

foobar
hogefuga[EOF]

などというテキストファイルは厳密には「行が正しく終わってない」から
扱う側によっては不具合になるというくらい改行=行の終端という意味が強い
windowsはposixなんて知ったこっちゃない生まれなのでこの辺りは無法だけどね
0271デフォルトの名無しさん (ワッチョイ 4fc0-QI3I)2016/08/05(金) 04:17:31.93ID:cHxSirtv0
hostsファイルの最後が127.0.0.1の定義で改行がないとOSがクラッシュしてた
0272デフォルトの名無しさん (ワッチョイ cb51-r8bK)2016/08/05(金) 07:18:00.04ID:IGtjfRg+0
POSIXにそんな規定があったとしても、そんな決まりは知ったこっちゃないってUNIXアプリも多そうだけどな。
0273デフォルトの名無しさん (スッップ Sd6f-d+5h)2016/08/05(金) 07:39:55.14ID:AXDswPHCd
えっNT系のPOSIX準拠ってのは嘘なの?
0274デフォルトの名無しさん (ワッチョイ 2bdc-buIf)2016/08/05(金) 07:55:18.38ID:3ew4HwfD0
テキストファイル末尾での改行コード欠落は
プログラムのソースファイルでも気ィつけんとな。
参考... [迷信] ソースファイルの末尾に }
実際にそれが原因のコンパイルエラーを食らった経験はないけどね。

>>268-269
フォッーー!! ゲッツ!
0275デフォルトの名無しさん (ワッチョイ 7f7b-tuv5)2016/08/05(金) 08:56:46.30ID:JqA23Hrs0
>>270
息をするように嘘をつくとはこの事だな
そんな決まりは無い

改行で終わらなければいけないのは「行」
テキストファイルは0以上の行を含むので
ファイルの最後が「行」で無くても良い
0276デフォルトの名無しさん (ワッチョイ 6b7b-uQNM)2016/08/05(金) 10:14:55.42ID:rxZahYwt0
>>275
それはテキストファイルじゃなくてただの「空のファイル」だね
何故「空のテキストファイルがー」みたいなアホな主張をするのかというと
拡張子でファイルの種類が決まるwindows文化の人間だからだろう
0277デフォルトの名無しさん (ワッチョイ e77b-4iqd)2016/08/05(金) 11:37:59.51ID:pznsau1R0
>>273
posixのシステムコール実装してるだけじゃない?
もうないけど
0278デフォルトの名無しさん (ワッチョイ 6719-+Lqe)2016/08/05(金) 11:38:51.17ID:lPnXTiLC0
fgetsでバイナリーファイル読み込むとエラーとか出るの?
0279デフォルトの名無しさん (ワッチョイ 7f7b-tuv5)2016/08/05(金) 11:58:31.67ID:JqA23Hrs0
>>276
頭悪すぎだぞお前
↓これは何行あるか? 数えられるかね?

foobar
hogefuga[EOF]
0280デフォルトの名無しさん (ワッチョイ cf52-d+5h)2016/08/05(金) 12:13:54.34ID:VNF0EUFq0
>>275が正解
>>270,276は残念賞

posix持ち出すなら御託並べずに規格を示せばいいのに。

3.397 Text File
A file that contains characters organized into zero or more lines.
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_397

0行も許容されるから、必ず改行で終わってるとは限らない。

ちなみにこれ、2013 Editionね。

いっこ前だと2004 Editionでは"one or more lines"ってなってるから、必ず改行で終わってるといっても間違いではなかった。昔はね。

A file that contains characters organized into one or more lines.
http://pubs.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_392

ちなみに>>279は定義から言えばテキストファイルじゃないのであんまり関係ない。
0281デフォルトの名無しさん (ドコグロ MM0f-d+5h)2016/08/05(金) 13:02:21.95ID:ccW8btWEM
テキストファイルでしょ?
0282デフォルトの名無しさん (ワッチョイ d777-+Lqe)2016/08/05(金) 16:36:39.97ID:H0edUBiM0
質問です。ポインタ演算を配列型でやるのはいいみたいなのですが、
以下の「buffer」ように、配列の添え字が順番になっていなくても大丈夫なのでしょうか?

unsigned char * dest;
unsigned char * buffer;

for(int i = 0; i < nums; i++){

dest[0] = buffer[3];
dest[1] = buffer[0];
dest[2] = buffer[1];
dest[3] = buffer[2];

buffer += 4;
dest += 4;
}
0283デフォルトの名無しさん (スップ Sdef-d+5h)2016/08/05(金) 16:40:55.79ID:OFbdyrUWd
ん?
どっちにしろ、「テキストファイルは改行で終わらなければならない 」てのはまちがいだよね
0284デフォルトの名無しさん (ワッチョイ 674f-+Lqe)2016/08/05(金) 16:44:54.47ID:OmlKnRl60
>>282
文法上はOK

意図した動作と記述していることが合致しているかは
その記述から知ることはできない

(順序を並べ替えたものを dest に渡したいとなれば、そういった記述になるだろう)
0285デフォルトの名無しさん (ワッチョイ 2bdc-buIf)2016/08/05(金) 16:50:50.71ID:3ew4HwfD0
>>280 で紹介されたページ中で line を検索しながら軽く眺めたら、
「行」の定義が出てきたよ。(日本語部分は拙訳 参考まで)

3.206 Line
A sequence of zero or more non- <newline> characters plus a terminating <newline> character.
3.206 行
0個以上の<newline>でない文字の並びに終端する<newline>文字を加えたもの

3.195 Incomplete Line
A sequence of one or more non- <newline> characters at the end of the file.
3.195 不完全な行
ファイル末尾にある1個以上の<newline>でない文字の並び


>>279 は
「"foobar" を内容とする1行と "hogehuga" を内容とする不完全な行を含んだファイル」
ってところまでは間違いなさそう。
これをテキストファイルと呼べるか否かは、
「テキストファイルは行だけで構成され、他の要素は含まない」
「テキストファイルは行の他に、末尾に不完全な行を含みうる」
どちらの立場をとるかによるのでは?
少なくとも自分は 3.397 Text File の項を見ても分からんかった。

さらに、ファイル末尾の不完全な行をどう扱うべきかは…
どこかに書いてあるかな?
0286デフォルトの名無しさん (ワントンキン MM2f-xKE3)2016/08/05(金) 16:59:43.42ID:1jE/nKCjM
間違いでもそうでなくても
最後に改行がなくても問題ないように組むよ普通
0287デフォルトの名無しさん (ワッチョイ d777-+Lqe)2016/08/05(金) 17:00:26.24ID:H0edUBiM0
>>284
行けるんですね!
意図はエンディアンとか画像色情報の並べ替えなどです。
つまり、一定のバイト周期で中身を規則的に並べ替えたいということです。
0288デフォルトの名無しさん (ワントンキン MM2f-xKE3)2016/08/05(金) 17:00:59.76ID:1jE/nKCjM
>>282
大丈夫だけどそのソースそのままじゃ動かないよ
わかってるんだったらごめん
0289デフォルトの名無しさん (ワッチョイ d777-+Lqe)2016/08/05(金) 17:07:27.30ID:H0edUBiM0
>>288
簡略化してますが、
もちろん2つのポインタはそれぞれ事前にメモリは確保してありますし、コピー元にはデータが入ってます。
0290デフォルトの名無しさん (ワッチョイ 674f-+Lqe)2016/08/05(金) 17:09:20.46ID:OmlKnRl60
BGRA な並びを RGBA にしたりとか、ありがちではあるな
0291デフォルトの名無しさん (ワッチョイ df13-BKBQ)2016/08/05(金) 20:19:24.64ID:1l5AtzWC0
>>270
むしろテキスト・バイナリの差を気にするのは,改行マークが複数バイトのMS-DOS/Windows の方
それが証拠に,テキストモード/バイナリモードの区別は unix にはない
0292デフォルトの名無しさん (ワッチョイ 6742-+Lqe)2016/08/05(金) 20:56:45.57ID:vKWjDsDg0
fgetsでバイナリファイル扱かったらどうなるの?
0293デフォルトの名無しさん (ワッチョイ df13-BKBQ)2016/08/05(金) 20:59:41.43ID:1l5AtzWC0
>>292
定義どおりに動くだけだ
たいがい第一引数で指定されるバッファにfgets()第二引数のバイト数 - 1だけ読み込んで末尾に\0をつけることになるだろう
0294デフォルトの名無しさん (ワッチョイ 6f3c-+Lqe)2016/08/05(金) 21:04:04.71ID:E0DsJGGO0
戻り値が読み込んだ文字数ではないから
読み込んだバイナリ中に \0 が含まれてると本当の終端が判らなくなるね
0295デフォルトの名無しさん (ブーイモ MM67-d+5h)2016/08/06(土) 00:55:35.49ID:GKRKeejEM
バッファを\0以外で埋めておいて、後ろから\0を探したらそこが末尾って保証されるかな?
0296デフォルトの名無しさん (JP 0H67-EXAE)2016/08/06(土) 06:17:49.44ID:P6FYCdC3H
最悪自分でfgets 再実装してもいいならそれでいいんじゃね
0297デフォルトの名無しさん (ブーイモ MMa7-d+5h)2016/08/06(土) 06:55:09.15ID:CxdQuwcgM
そういうのが欲しければ、fread なり read なりで実装
するけどね
0298デフォルトの名無しさん (ワッチョイ 7f7b-tuv5)2016/08/06(土) 09:22:13.55ID:4oIDfdFe0
fgetsで指定したサイズ内に\0が含まれてなかったら?
0299デフォルトの名無しさん (ワッチョイ 6f3c-+Lqe)2016/08/06(土) 09:40:31.71ID:EKYNi0gs0
「指定サイズ-1 まで読んで \0 追加して(丁度指定サイズに)」
から外れてるし、戻りが NULL で全く読んでないことになるんじゃないの
0300デフォルトの名無しさん (JP 0Hef-+Lqe)2016/08/09(火) 10:53:58.31ID:k3l+MDzzH
enum Season {Spring, Summer, Autam, Winter }Season
2つのSeasonって、なにが違うの?
0301デフォルトの名無しさん (オッペケ Sr07-d+5h)2016/08/09(火) 11:02:46.12ID:VrJIAuHxr
>>300
最初のは、型の名前
後ろは変数名
0302デフォルトの名無しさん (ワッチョイ 17ff-1eGW)2016/08/09(火) 11:25:27.70ID:98NM991C0
enum Season {Spring, Summer, Autam, Winter };
enum Season Season;

を一行で書いた
0303デフォルトの名無しさん (JP 0H67-EXAE)2016/08/09(火) 11:28:08.17ID:ACucDFlBH
>>300
前者は型名だけど enum+名前 でしか使えない中途半端な名前
typedef が跋扈するより前、美しい言語仕様の時代の遺物

後者は変数名だけど普通そういう時は小文字名にすると思う

typedef enum Season { ... } Season; の間違いじゃないの?
0304デフォルトの名無しさん (JP 0Hef-+Lqe)2016/08/09(火) 13:33:09.45ID:YZ/xNzVRH
で、なにが違うの?
0305デフォルトの名無しさん (ワッチョイ 6f4e-keFn)2016/08/09(火) 13:41:53.38ID:yNW68RTc0
前のはいらん。後ろだけでいい。
0306デフォルトの名無しさん (オッペケ Sr07-d+5h)2016/08/09(火) 16:33:18.21ID:VrJIAuHxr
>>304
型名付けておけば、別な変数も同じ型で宣言出来る。
使い回すなら typedefしておいた方が便利。

一回しか使わないなら、型名要らない。
0307デフォルトの名無しさん (ワッチョイ 17ff-1eGW)2016/08/09(火) 16:34:48.39ID:98NM991C0
たまたま同じ名前にしたから混乱してるだけ、別の名前にしたらわかりやすい
0308デフォルトの名無しさん (ワッチョイ df13-BKBQ)2016/08/09(火) 18:04:12.71ID:c6svxtGU0
別の識別子にする必要はない,わかりやすいとも思わない,名前空間が別だとわかっているからね
0309デフォルトの名無しさん (ワッチョイ ab17-5Bdb)2016/08/09(火) 18:34:52.21ID:1y7DBS0u0
いや質問者はわかってないだろw
わかったら戻せばいいんだよ
0310デフォルトの名無しさん (ワッチョイ 98d4-MTuc)2016/08/11(木) 02:01:21.60ID:YgG7wOQ40
型名と変数名に同じ名前をつけるなよ
0311デフォルトの名無しさん (ワッチョイ fc6b-3Vwo)2016/08/11(木) 09:16:02.34ID:tSg+kfIq0
Javaわかりにくい高級すぎ
苦Cやってみるわ
0312デフォルトの名無しさん (ワッチョイ 7041-pteT)2016/08/13(土) 03:19:28.42ID:ApwCTP9r0
C#だけど苦C読んで助かったわ
最初からC#専用本読んでたら挫折してたろうな
0313デフォルトの名無しさん (JP 0H41-dS8u)2016/08/13(土) 10:34:37.15ID:gPtVaJGMH
こうしてまた一人
入門書読んで"マスター"したけど何も作れません
という戦士が生まれる
0314デフォルトの名無しさん (オッペケ Sr8d-3Vwo)2016/08/13(土) 11:01:38.35ID:5zVXtJwUr
中途半端な知識なら、無い方が有り難い。
0315デフォルトの名無しさん (ワッチョイ 3ec1-MTuc)2016/08/13(土) 11:43:21.36ID:udN0O8iH0
「マスターした」
「使いこなす」
このセリフを言うやつは信用できん。
0316デフォルトの名無しさん (ワッチョイ f1dc-LdzE)2016/08/13(土) 17:55:10.65ID:vGY68yUz0
俺すらも使いこなす将軍になってくれると思ってたのにぃ…。
0317デフォルトの名無しさん (ワッチョイ 45a1-0Fiy)2016/08/13(土) 18:53:02.75ID:5iGC+5XA0
便利なコマンドをつくってください
0318デフォルトの名無しさん (ワッチョイ 397b-3Vwo)2016/08/13(土) 19:32:47.34ID:AXJHpXDi0
14*14マスのお姉さん問題を解いて下ちい
0319デフォルトの名無しさん (ワッチョイ 3919-ntxd)2016/08/13(土) 19:41:24.06ID:YGlkk5qn0
マクロの呼び出しの規則を教えてください。
例えばAがマクロだとすると
ABのAは置き換えられないけれどA;のAは置き換えられるとか法則が
調べてもわかりませんでした
0320デフォルトの名無しさん (ワッチョイ 6191-3Vwo)2016/08/13(土) 19:59:53.54ID:l1LTjtu30
呼び出し規則というよりトークンの切り出し方法では?
0321デフォルトの名無しさん (ワッチョイ 3e4e-3Vwo)2016/08/14(日) 05:36:28.87ID:RZj6Zx9R0
>>313
普通の人が英語出来ても、英語で小説書けないしな。
小説家は英語片言でも、英語の小説書く事は可能だが。
0322デフォルトの名無しさん (ドコグロ MM5c-3Vwo)2016/08/14(日) 08:22:11.89ID:aO2OCXAGM
>>319
JISX3010の3.10節を調べるといい
0323デフォルトの名無しさん (ワッチョイ f6c2-qG+N)2016/08/14(日) 20:28:50.09ID:0nElDHkf0
やりがいとか
スキルアップとか
0324デフォルトの名無しさん (ワッチョイ 417b-MURp)2016/08/14(日) 23:25:24.34ID:W3PTwYms0
自分の道具を作る、揃えるという視点が必要だな
最初は不出来でも自然と愛着が沸いて改善し続けるうちに手放せない道具になる
車輪のなんちゃらなんて一切気にせずにガンガン作って揃えたらいい
作ったことのない人間は他人に説明することもできない上っ面の知見しか持てないのだ
0325デフォルトの名無しさん (ワッチョイ 9213-4ddV)2016/08/15(月) 01:18:29.57ID:I1Y4gro20
>>324
そうそう
xmalloc(), とか xfree() を作って便利につかっている,一度公開したが評判は散々ではあったのだけれども
0326デフォルトの名無しさん (ワッチョイ 4d3f-3Vwo)2016/08/15(月) 01:42:14.69ID:AE8QCPw70
逆に考えるんだ
評判が散々だと言うことは、改良の余地があるということ
0327デフォルトの名無しさん (ワッチョイ 6642-MTuc)2016/08/15(月) 01:49:09.59ID:bDxHTN1a0
世の中には二通りのソフトしかない。
使われないソフトと、バグのあるソフト

マーフィーの法則 これ思い出した
0328デフォルトの名無しさん (ワッチョイ d117-AwIb)2016/08/15(月) 01:49:11.81ID:FzLRbZqH0
雑談だけど。
悪評でも評価がもらえるってのは使ってもらえたって事でもあるしな。
0329デフォルトの名無しさん (ワッチョイ 2b51-z29q)2016/08/15(月) 17:06:56.20ID:1Ch4XA5H0
え?俺Win10使って無いけど悪評流してるよ
0330デフォルトの名無しさん (ワッチョイ 464e-2h3f)2016/08/15(月) 17:23:46.45ID:tBQUW0H60
>>327
適当じゃ無いな。
バグがほぼ無く、よく使われるソフトはある。
0331デフォルトの名無しさん (ワッチョイ f1dc-LdzE)2016/08/15(月) 19:10:32.98ID:bftlQCDN0
揚げ足を取るつもりはないし、書いた人も承知の上だろうが
「バグがある」と「バグがほぼ無い」は両立するからなぁ。

マーフィーの法則は「上手いこと言ってるな」と感じることもあるけど、
>>327 はそうでもない。というか、情報量ゼロの言明だし。
0332デフォルトの名無しさん (ワッチョイ 2541-pteT)2016/08/15(月) 21:24:52.67ID:yhdeLdQz0
とりあえずバグがないソフトはないってことを
言いたいだけでしょ
0333デフォルトの名無しさん (ワッチョイ 115b-MTuc)2016/08/15(月) 21:30:19.70ID:WbHXW2Pu0
何を持ってバグかって話もあるけど、
大部分の自動車の制御ファームとかバグといえるものがあるのかね。
0334デフォルトの名無しさん (ワッチョイ 6642-MTuc)2016/08/15(月) 21:41:02.69ID:o++4P7Xk0
これはユーザー視点で考えないと分かりにくいジョークだよ
0335デフォルトの名無しさん (ドコグロ MM5c-3Vwo)2016/08/15(月) 22:16:10.44ID:IdJPSL9tM
>>333
全部がバグではないけどリコールでプログラム改修とかあるよね
0336デフォルトの名無しさん (ワッチョイ 7019-MTuc)2016/08/16(火) 09:03:32.04ID:G38vmueR0
10 NEW

意図した通りに動くのでバグはありません!
0337デフォルトの名無しさん (アウアウ Sa05-B/I9)2016/08/16(火) 14:46:32.86ID:X14VgvlVa
質問なのですが、初歩的なC言語の文法を理解したあと実用的なものを書けるまでどのような物を書いてきましたか?

標準入出力や各型、ループ、関数、配列、ポインタ、構造体、ファイルの読み書き

これ以外にもありますが"初心者のための"として書かれているwebや書籍などに沿って一通り学習し理解したあとで手につけるとしたらどんなものがあるのでしょうか?

自分はソケットなど使って通信させる仕組みをやってみようかなあなど思っているのですがみなさんはどのようなことに手をつけましたか?
0338デフォルトの名無しさん (ワッチョイ 4652-3Vwo)2016/08/16(火) 14:54:35.88ID:bJwh98gd0
順番とか無いから作りたいものを作れ
0339デフォルトの名無しさん (ワッチョイ 7019-MTuc)2016/08/16(火) 15:13:24.94ID:G38vmueR0
最近はわざわざ自作しなくてもちょこっと検索すれば大抵のツールは見つかるからなぁ。
ゲームも無料ゲームも低価格ゲームもあふれてるし。

「必要に駆られてプログラムを覚えた」なんてシーンほとんど無いわな。
0340デフォルトの名無しさん (ワッチョイ 2a8b-GBh+)2016/08/16(火) 15:41:49.69ID:w4E7HmJu0
>>336
NEWコマンドにバグが無いこまで証明が必要でえらい騒ぎに
0341デフォルトの名無しさん (ワッチョイ f1dc-LdzE)2016/08/16(火) 15:52:25.80ID:Kbb/TcOa0
>>339 に乗っかる感じだけど、公開されてるツールには
ソースファイルが入手可能なものも多いから、
機能を追加してビルドするのも良い。

すでに動いているプログラムだから基本的な動作は確実だし、
自分が欲しい機能を追加すれば間違いなく便利になる。
0342デフォルトの名無しさん (ガックシ 0679-B/I9)2016/08/16(火) 20:18:57.98ID:RtvZR70u6
なるほど回答有り難うございます
0343デフォルトの名無しさん (ワッチョイ fc7b-dD2v)2016/08/16(火) 20:26:50.41ID:CFM4NC3W0
>>337
ふつうのLinuxプログラミング、青木峰郎、初版2005

OSの基本コマンドの仕組みがよくわかる。
10年前の本だが、いまだに通用する
0344デフォルトの名無しさん (アウアウ Sa05-B/I9)2016/08/16(火) 20:30:46.51ID:X1/zfUgTa
>>343
Linuxの仕組みを眺めてみるのも楽しそうですね。有り難うございます!
0345デフォルトの名無しさん (ワントンキン MM2f-6cj6)2016/08/18(木) 09:54:39.04ID:7zlLEbl2M
趣味(勉強)ならすでにあるツールでも自作することに意義がある
やりたいことならなんでもいいと思うよ
0346デフォルトの名無しさん (アウアウ Sa47-YVpJ)2016/08/18(木) 13:02:17.13ID:91fRKt1Va
>>345
そうですよね
自分の開発環境がLinuxなんですが
なんちゃってUnixコマンドや、既にあるライブラリ関数は自作したりしています。
0347デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/18(木) 16:02:53.32ID:VCdViQab0
大勢が使うために機能を制限したソフトも多いしね。
自分で作れば自己中なソフトも作れる。
0348デフォルトの名無しさん (ワッチョイ df4d-Uk8R)2016/08/18(木) 23:13:48.26ID:dbfIQl5h0
scanfに&をつける理由が分かりません。
もし試験の問題で理由をかけといわれたら
scanfの仕様と答えたら満点くれます?
0349デフォルトの名無しさん (ワッチョイ df13-YSv6)2016/08/18(木) 23:18:26.85ID:JLe/GOh80
>>348
いいんじゃない?事実だし
0350デフォルトの名無しさん (JP 0H47-HNW7)2016/08/19(金) 00:13:02.79ID:kQbXSez3H
その仕様にした理由を聞いてるに決まってんだからバツだ
0351デフォルトの名無しさん (JP 0H67-8yFy)2016/08/19(金) 00:17:13.04ID:EQW6TlvjH
×scanfに&をつける
○scanfに受け皿となる変数のアドレスを渡す
0352デフォルトの名無しさん (ワッチョイ df4d-Uk8R)2016/08/19(金) 00:45:03.30ID:P6JuUVvz0
>>350
じゃあscanfを考えた人に理由をきいたほうが手っ取り早い話なの?
0353デフォルトの名無しさん (ワッチョイ 3ba1-wLiW)2016/08/19(金) 00:59:33.98ID:MUfetYKB0
値渡しでどうやったら&を付けない実装を実現出来るか
考えてみたら良いんじゃないか
0354デフォルトの名無しさん (ワッチョイ 6b7b-iRvA)2016/08/19(金) 01:28:23.31ID:CVp0ndTM0
誰かに「こちらで用意した箱に物を入れておいて」と依頼するときの情報として
箱の中身を教えても意味ないだろ?箱の場所(と大きさ)を教えないと
だから変数の中身を書き換えさせる関数の実引数はポインタでなければならない
&はただのアドレス演算子
0355デフォルトの名無しさん (ワッチョイ ab5b-D2ET)2016/08/19(金) 01:38:54.06ID:Zgp0kDG10
char s[1000];
scanf(s);
0356デフォルトの名無しさん (ワッチョイ 2bdc-ZLgz)2016/08/19(金) 05:48:41.38ID:vpHLVXFB0
「Cには(C++と違って)参照渡しがないから」と
答えても間違っちゃいないはずだけど、
試験で書いても正解の得点はもらえないだろうな。

この手の問題はどこまで掘り下げて答えるか、あるいは
問題作成者がどこまで掘り下げた答えを求めているか、
を見極めるのが難しいね。
0357デフォルトの名無しさん (ワッチョイ 6f4e-q/lo)2016/08/19(金) 06:04:11.79ID:pUeG4Thz0
char word[100];
int length = scanf(“%99s", word);
0358デフォルトの名無しさん (ワンミングク MM2f-6cj6)2016/08/19(金) 11:28:25.33ID:kPBCLZuQM
結果をもらうためにアドレスを渡す
で伝わるんじゃない?
0359デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/19(金) 11:29:37.08ID:aEjl/gmM0
やってみるとわかると思うけれど
clangでfopen_sを使うとstdio.hをインクルードしたのに
"Implicit declaration of function 'fopen_s' in invalid in C99"と
警告でるのどういうことですか?
0360デフォルトの名無しさん (ワッチョイ 7f7b-LSUn)2016/08/19(金) 11:59:57.05ID:IGWmixlq0
エラーメッセージのとおりC99のstdio.hでは定義されてない
C11から使える
0361デフォルトの名無しさん (JP 0H67-8yFy)2016/08/19(金) 12:16:00.04ID:EQW6TlvjH
今時の新人はいきなりセキュリティ付きのランタイムを教わるのか

それならコンパイラの設定も一緒についてくるはずだが
0362デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/19(金) 12:57:42.18ID:aEjl/gmM0
>>360
エラーじゃなくて警告なんですけど。
-std=c11は付けてます。
0363デフォルトの名無しさん (ワッチョイ 7f7b-LSUn)2016/08/19(金) 13:09:26.51ID:IGWmixlq0
annex Kは実装必須じゃ無いからねえ
エラーと警告の揚げ足とってる暇あるなら、規格書読む事だな
0364デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/19(金) 13:13:54.09ID:aEjl/gmM0
偉そうな態度だな
0365デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/19(金) 13:17:36.90ID:aEjl/gmM0
__STDC_WANT_LIB_EXT1__を定義すればいいんだろ。
調べたら簡単に見つかったよ
こんなアホな場所で聴くんじゃなかった
0366デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/19(金) 13:20:05.46ID:aEjl/gmM0
こんなスレに一日中張り付いているやつは
ゴミ
カす
きちがい
さっさと死ねゴミ
プププププププ
悔しいだろ
ははは
0367デフォルトの名無しさん (ワッチョイ eb2b-wLiW)2016/08/19(金) 13:54:20.17ID:n2+gYfCv0
アホな場所に「聴きに」来るアホ
0368デフォルトの名無しさん (ワッチョイ 676b-HNW7)2016/08/19(金) 13:55:20.48ID:fjnpXRFS0
お前しか喋ってないじゃん
0369デフォルトの名無しさん (ワッチョイ e77b-HNW7)2016/08/19(金) 13:59:32.22ID:WP6zNTiH0
>>365
× 聴く
○ 訊く
0370デフォルトの名無しさん (ワッチョイ 67bf-wLiW)2016/08/19(金) 16:10:41.08ID:IFWVfjB+0
久々に基地外の発狂を見た
0371デフォルトの名無しさん (ワッチョイ 2bdc-ZLgz)2016/08/19(金) 16:46:34.26ID:vpHLVXFB0
「頭が頭痛」「後ろから追突」あたりは時々見かけるけど、
「キチガイの発狂」は初見だ。

「キチガイ」も「発狂」もあまり使う機会のない言葉だけどね。
0372デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/19(金) 16:49:38.80ID:aEjl/gmM0
冗長性があることは情報の一部が失われても元の情報を保つことが出来る
良いことだと言うことを知らないんだね
可愛そうに
0373デフォルトの名無しさん (ワッチョイ f7a3-DJkl)2016/08/19(金) 16:59:36.82ID:vJJgqyIv0
>>364
0374デフォルトの名無しさん (ドコグロ MMcf-HNW7)2016/08/19(金) 17:20:24.69ID:bO0VaEOHM
>>372
頭が頭痛 ⇒ 頭が

どうしろと? w
0375デフォルトの名無しさん (ワッチョイ 6f3c-D2ET)2016/08/19(金) 17:26:23.76ID:zOoWgkGs0
不可逆だったら増長性持たせたところで意味ねーし
→ということでフラットに記述します

両極端に振れると面倒よのう
0376デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/19(金) 18:29:22.15ID:aEjl/gmM0
語尾がのうwwwwwwwwwwwwwwww
0377デフォルトの名無しさん (スッップ Sd6f-HNW7)2016/08/19(金) 18:47:22.34ID:cIgWKWlcd
>>365
処理系も書かずに何言ってんだ?
0378デフォルトの名無しさん (ドコグロ MM87-HNW7)2016/08/19(金) 20:41:29.87ID:4DtZDUfaM
>>371
「頭が頭痛」より
「キチガイが発狂」のほうが
日本語として自然なのでは?
0379デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/20(土) 10:34:14.32ID:XvgJOHEh0
キチガイは悪いけれど
キチガイを隠して普通の振りをしている
キチガイが一番キチガイ
わかる人にはわかるがこのスレに普通ぶっている人の
5割はそのキチガイに該当する
0380デフォルトの名無しさん (ワッチョイ 7bc1-YVpJ)2016/08/20(土) 18:31:57.22ID:JJNQQwGL0
http://ideone.com/fSoXkw

ポインタのポインタについて
複数の文字列を格納するためにポインタのポインタ**pointを用意します
ある文字列にアクセスするには

*(point + i)
もしくは
point[i]

で、出来ました。
ある文字列のある文字にアクセスするにはどのようにしたら良いですか?
0381片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK17-kxXN)2016/08/20(土) 18:49:06.98ID:ea4xV4wUK
point[i][j]
0382デフォルトの名無しさん (ワッチョイ 7bc1-YVpJ)2016/08/20(土) 20:19:46.66ID:JJNQQwGL0
>>381
*point[i] はなぜだめなんですか?
0383デフォルトの名無しさん (アウアウ Sa47-HNW7)2016/08/20(土) 20:22:47.70ID:qSux5zoea
ダメじゃない。どっちも同じ
0384デフォルトの名無しさん (ワッチョイ 7bc1-YVpJ)2016/08/20(土) 20:41:53.43ID:JJNQQwGL0
なるほど
*point[i]
かく文字列の先頭だけになってしまうので
(*point)[i]ってする必要があるのですね

有り難うございました
0385デフォルトの名無しさん (アウアウ Sa47-HNW7)2016/08/20(土) 20:57:04.32ID:qSux5zoea
それじゃ最初の文字列のi番目の文字になるけど、そこまで分かればいいんじゃないかなw
0386デフォルトの名無しさん (ワッチョイ 7bc1-YVpJ)2016/08/20(土) 21:02:30.98ID:JJNQQwGL0
>>385
そうでしたw
(*point+i)[ j ]
ですかね
0387デフォルトの名無しさん (アウアウ Sa47-HNW7)2016/08/20(土) 21:10:16.60ID:qSux5zoea
*(point+i)[ j ]
かな。間違ってたらすまん。デバッカで値を見比べてみるか、printfしてみた方がいいね
0388デフォルトの名無しさん (ワッチョイ ef42-D2ET)2016/08/20(土) 21:12:06.94ID:lxC/NXLp0
配列の添え字でアクセスしたいのか、
ポインタ演算使ってアクセスしたいのか
その辺は統一した方がいい
0389デフォルトの名無しさん (ワッチョイ ef42-D2ET)2016/08/20(土) 21:13:12.82ID:lxC/NXLp0
*(*(point+i)+j)
0390デフォルトの名無しさん (アウアウ Sa47-HNW7)2016/08/20(土) 21:14:40.18ID:qSux5zoea
確かに二重ポインタなら添字はあまり使わんような気がするけど、好みの問題なんかね
0391デフォルトの名無しさん (ワッチョイ 6f3c-D2ET)2016/08/20(土) 21:19:33.63ID:FPTu6I9V0
i番目の文字列を中間変数にわたして
char *str = pointer[i];

その文字列の j 番目の文字 str[j]
0392デフォルトの名無しさん (ガラプー KK17-kxXN)2016/08/20(土) 21:27:44.01ID:ea4xV4wUK
i+1番目
j+1番目
0393デフォルトの名無しさん (ワッチョイ 6f3c-D2ET)2016/08/20(土) 21:33:04.79ID:FPTu6I9V0
○番目を序数(1,2,3 ...) で呼ぶか 整数(0,1,2 ...)で呼ぶか
先頭要素を 1番目:前者 0番目:後者
0394片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK67-kxXN)2016/08/20(土) 21:46:31.91ID:ea4xV4wUK
i番目のことを英語でi-thって表すけど、i+1番目は「i-tz」って表した方がいいと思う(俺の発案)。
0395デフォルトの名無しさん (アウアウ Sa47-HNW7)2016/08/21(日) 00:04:53.49ID:gifASMY5a
質問者に回答するのが一番、自分語りは二番。
0396デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/21(日) 08:10:02.69ID:To22oCrx0
ループの一周目の条件文が常に成り立つからループ内で変数を初期化しても
その変数についてだけ警告ださないようにするマクロのようなものは
ありませんか?
0397デフォルトの名無しさん (ワッチョイ 6f3c-D2ET)2016/08/21(日) 08:15:13.05ID:nPVjtC030
>>396
どういうコード書いたら、何処で(&どんな)警告が出るの?
警告されるような要素が思い浮かばない
0398デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/21(日) 08:20:30.23ID:To22oCrx0
double a;
if(1) a=3;
0399デフォルトの名無しさん (ワッチョイ 6f3c-D2ET)2016/08/21(日) 08:22:34.00ID:nPVjtC030
もしかして、こういうこと?
 int a; /* 宣言:初期化なし */
 ...
 for (...) {  必ず1回以上回る
  a = 1;  初期化ではない 代入だ
 }
 ...
 if (a)  ←ここで警告: 未初期化の変数を参照してるっぽくね?
0400デフォルトの名無しさん (アウアウ Sa47-HNW7)2016/08/21(日) 08:28:52.13ID:gifASMY5a
プログラマで一番大切なのは日本語力だと言うことがよく分かる質問だね
0401デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/21(日) 08:29:23.91ID:To22oCrx0
>>399
そいうことだ
0402デフォルトの名無しさん (ワッチョイ cb19-NRoR)2016/08/21(日) 08:30:07.10ID:To22oCrx0
>>399
違う
>>398が正解
0403デフォルトの名無しさん (ワッチョイ bbd3-HNW7)2016/08/21(日) 09:07:49.47ID:8HT7jq2X0
今は自分語りフェーズやろ?
0404デフォルトの名無しさん (ワッチョイ f7a3-DJkl)2016/08/21(日) 09:20:01.08ID:VaMUQPq90
double a = 3;
だけでいいんじゃないの? 0 とか -1 とか(プログラムの文脈的に)ありそうにない数字を入れておいてもいいけど
3以外を入れたいときは別途条件文と代入文を付け加えればよし
0405デフォルトの名無しさん (ワッチョイ 7f7b-LSUn)2016/08/21(日) 09:21:27.07ID:hQAntsoy0
int a;
for (;;) {
if (1) a = 1;
break;
}
a; //警告すんな
だろ

大抵の処理系は#pragmaでその警告を抑制する事が出来るけど、特定の変数だけってのは見た事ないな
関数にhoge(&a)とかアドレス渡してやればごまかせるかもな
0406デフォルトの名無しさん (アウアウ Sa47-HNW7)2016/08/21(日) 09:37:51.90ID:gifASMY5a
>>404に出来ない理由があるならそれを説明しないとアイデアが出てこないよ。理由がないなら404で解決。
0407デフォルトの名無しさん (ワッチョイ f35b-HNW7)2016/08/21(日) 09:39:35.88ID:M5VLtK3R0
初期化しとけばいいじゃない
0408デフォルトの名無しさん (ワッチョイ 7f7b-LSUn)2016/08/21(日) 09:53:35.47ID:hQAntsoy0
説明されないとアイデア出ないなら、でしゃばらなくても良いと思うよ
0409デフォルトの名無しさん (アウアウ Sa47-HNW7)2016/08/21(日) 10:03:01.28ID:gifASMY5a
はーいw
0410デフォルトの名無しさん (ワッチョイ 6b7b-iRvA)2016/08/21(日) 21:37:40.15ID:2VF8GpD70
ブロックの頭で宣言だけしておいてすぐ後で初期値を代入という
石器時代の悪しき慣習をいつまで引き摺るつもりなのか
変数は必要になった時点で宣言し同時に必ず初期化せよ
宣言の時点で有効な値が決まらない、あるいはc99より古い処理系ならば
「有効な値を入れない限り後続が正しく失敗する値(0,NULL,false)」で初期化せよ
これは正しく制御するための初期化でありコンパイラを黙らせる目的ではない
したがって未初期化の警告どうこうという指摘は全くもって的外れである
0411デフォルトの名無しさん (ワッチョイ 67bf-wLiW)2016/08/21(日) 22:09:19.99ID:QSdpFHla0
こうして世界には平和が訪れたのでした…
0412デフォルトの名無しさん (ワッチョイ db7b-LSUn)2016/08/22(月) 03:18:00.08ID:k4dn21Er0
また、頭の悪そうなのがでしゃばってきたな
0413デフォルトの名無しさん (ワッチョイ db3f-HNW7)2016/08/22(月) 04:10:00.99ID:vCv8s6Ty0
それを放置できない夏休み
0414デフォルトの名無しさん (ワッチョイ 2bdc-ZLgz)2016/08/22(月) 05:54:05.12ID:uur2/vEa0
自分がてっぺんに居ると思い込んでる偉ぶった野郎だと思えば反発を覚えるけど、
ギレン・ザビの演説の文体模倣と思えば上手だわ。雰囲気を良くつかんでる。
「〜などという行為はバグを生み出す温床以外の何物でもない」とかまで
突き抜けると面白さが多くに伝わるかも知れない。
…書いた人の意図がそこにあるとは言い切れないけど。

主張の中身そのものは納得できるアドバイスだと思うよ。
0415デフォルトの名無しさん (ワッチョイ ab5b-D2ET)2016/08/22(月) 09:11:35.98ID:/AbrRwA90
>>396
コンパイラの解釈に文句いってもしょうがない。
もっと生産的なことに労力使おう。
0416デフォルトの名無しさん (オッペケ Sr07-HNW7)2016/08/23(火) 12:16:49.86ID:T/9wcFxSr
>>379
天才≒キチガイ
0417デフォルトの名無しさん (ガックシ 0625-KD3v)2016/08/25(木) 17:38:58.18ID:t2YNiaF+6
質問です。

メモリの許すかぎり文字列を格納し、文字数の多い順にソートするプログラムを書いています。

メモリの許すかぎりデータを格納するという設計をしようと思って作り始めたのですが、途中でSegmentation faultが出て困っています。

簡単な説明としますと、初期値としてデータ10個を格納出来るメモリを確保しそこへデータを入れていきます、データ数をカウントし途中10個目のデータを入れる段階で分岐し、倍個数のメモリを改めて確保するという方法を取りました。

プログラム全文はこちらです
http://ideone.com/LGyf0n
0418デフォルトの名無しさん (ガックシ 0625-KD3v)2016/08/25(木) 17:46:39.37ID:t2YNiaF+6
続きです。

デバッガで追って確認してみたところ
char **array //各文字列格納ポインタ
char **tmp //メモリ再確保用

array = tmp

という処理をした後、両方のアドレスが
0x0になっていることが分かりました。
こういう代入方法はだめなのでしょうか?

$6 = (char **) 0x400750 <_start>
(gdb) print pline->array
$7 = (char **) 0x603010

この時点では正常に間接参照できました。

84 pline->array = pline->tmp;
この処理をした後

こうなります
(gdb) print pline->tmp
$8 = (char **) 0x0
(gdb) print pline->array
$9 = (char **) 0x0

構造体ポインタなのでpline->arrayとなってますがそこは省略して書きました。
又、初心者で学習中なので、遠回りな書き方をしていたりしますがそこはスルーでお願いします。
0419デフォルトの名無しさん (ワッチョイ 88ff-XNiq)2016/08/25(木) 18:16:14.57ID:Ww8xhD0A0
>>418
if (pline->tmp = NULL) {//メモリ確保失敗対策

これだろ
if文の中で代入してる
0420デフォルトの名無しさん (ワッチョイ 88ff-XNiq)2016/08/25(木) 18:19:21.33ID:Ww8xhD0A0
sortの中もおかしいけどまた詰まったらおいで
0421デフォルトの名無しさん (ガックシ 0625-KD3v)2016/08/25(木) 18:41:45.69ID:t2YNiaF+6
>>419
ひぇ〜
ほんとだ!有り難うございます!
0422デフォルトの名無しさん (ワッチョイ cec2-Q4SI)2016/08/25(木) 20:40:39.13ID:pKEfxGgH0
'void *' から 'char ** ' に変換できません
0423デフォルトの名無しさん (アウアウ Sa01-rVUj)2016/08/25(木) 20:55:05.47ID:9n39Q2MSa
C++はスレ違い
0424デフォルトの名無しさん (ワッチョイ 7e4d-t1qj)2016/08/25(木) 21:39:01.91ID:CrIooFIW0
>>419
誰もが一度は通る道を、優しく教えてあげる姿にほっこりした。
0425デフォルトの名無しさん (ワッチョイ ba13-i1OG)2016/08/25(木) 21:47:03.46ID:/4caYD7N0
最近のコンパイラは警告してくれるものと思っていた
0426デフォルトの名無しさん (ワッチョイ e1c1-KD3v)2016/08/25(木) 21:54:01.44ID:vjDEOn7Y0
ほんとしょうもないミスですみませんwww
でもこういうのにもすぐ気づけるようならないとダメですよねぇ...
0427デフォルトの名無しさん (ワッチョイ d690-gQqU)2016/08/25(木) 22:05:53.98ID:+uURWhA40
C言語の勉強をしようと思うのですがおすすめの本を教えてください
自分のレベルは
if for whileとかの意味や、printfとかの単純な関数は理解している
ポインタや配列があまりよくわからない
足し算するだけとか文字を表示するだけなどは作ったことがあるが、30行以上のコードであったりデータ構造を実装するなどはやったことがなく、おそらくできない 逆にいうとこういうことができるようになりたい
できれば環境設定も載ってる本がいいです(上記の知ってる内容は大学のPCでやったので、自宅だとできません)
0428デフォルトの名無しさん (アウアウ Sa01-t1qj)2016/08/25(木) 22:10:44.06ID:tzXfC0WHa
はじめてのCとか?
0429デフォルトの名無しさん (ワッチョイ 3e85-gQqU)2016/08/25(木) 22:36:15.07ID:1NVjem7W0
windowsでvisual studio express付きのやつを買うとか、bccで解説している本でもそういうのは例えば後ろの方にセットアップの仕方なんか
載せてるもんだけど。
パスの通し方が判らんとかコマンドラインの操作が判らんってんならvisual studioを使ってるやつで探せばいいっしょ。
というか、自宅で環境設定が出来ないというならその前にOSの操作について慣れておく必要があるんじゃ?
0430デフォルトの名無しさん (ワッチョイ dd7b-IrME)2016/08/25(木) 22:53:20.97ID:OHZLQrvn0
>>427
環境構築から説明するようないわゆる「初心者向けの本」は総じてオススメしない
情報が古すぎるし内容もwebでいくらでも入手できる情報の下位互換でしかない
どうしても本を買うなら「標準ライブラリのリファレンス本」がいい
それも自分でサンプル集なりhtmlでリファレンスなり作っちゃえば用無しになるけど
0431デフォルトの名無しさん (ワッチョイ d690-gQqU)2016/08/25(木) 22:55:34.28ID:+uURWhA40
レスありがとうございます
それでは環境構築の説明が無い本も含めるとオススメはありますか?
0432デフォルトの名無しさん (ワッチョイ d66c-gQqU)2016/08/25(木) 23:31:13.89ID:f4ZfsxuS0
>if for whileとかの意味や、printfとかの単純な関数は理解している
>ポインタや配列があまりよくわからない
こういうレベルであればこそK&R
0433デフォルトの名無しさん (ワッチョイ e1c1-KD3v)2016/08/25(木) 23:55:05.50ID:vjDEOn7Y0
>>431
自分もカーニハン&リッチーおすすめですかね
0434デフォルトの名無しさん (スプッッ Sdb8-t1qj)2016/08/26(金) 00:29:54.61ID:xGNz5Xend
>>431
一応プログラミング言語Cがこのスレ的にはバイブル
たた訳者がポンコツなので英語分かるなら原書をお勧めする
0435デフォルトの名無しさん (アウアウ Sa01-t1qj)2016/08/26(金) 07:33:11.29ID:Gni4uRYXa
K&Rは初心者には難しくないかな?
0436デフォルトの名無しさん (ワッチョイ 7eba-Vqeh)2016/08/26(金) 11:14:04.17ID:LkV1Lc9c0
http://www.jisc.go.jp/app/pager?id=1051554
0437デフォルトの名無しさん (ドコグロ MM3f-t1qj)2016/08/26(金) 12:53:51.23ID:RJ1rrcoTM
>>435
何の初心者かによる。プログラミングは知ってるけどC言語は初心者
って人向けだと前書きに書いてあるので
何も知らない赤ちゃんみたいな人だと難しいかも
0438デフォルトの名無しさん (ワンミングク MM40-Ptq2)2016/08/26(金) 13:08:24.67ID:xCkCqiRqM
printfで¥r使えばカーソル先頭に戻して上書きできるってこと最近知ってかなり衝撃を受けたw
凝ったことするときはcurses使うので考えたこともなかったけど知ってれば便利なものってまだまだあるんだろうな
0439デフォルトの名無しさん (JP 0H61-t1qj)2016/08/26(金) 13:40:24.49ID:exZ6eD+dH
>>437
配列があまりよくわからないってんだから
プログラミングは知ってないだろ
0440デフォルトの名無しさん (ワッチョイ 9c7b-zvPZ)2016/08/26(金) 16:55:08.92ID:RGEn9Q8j0
詳説 Cポインタ、2013、オライリー・ジャパン
0441デフォルトの名無しさん (ワッチョイ cec2-Q4SI)2016/08/26(金) 18:19:32.20ID:Q2xDNdws0
英語版はこれだろ。
ttps://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf
0442デフォルトの名無しさん (ワッチョイ cec2-Q4SI)2016/08/26(金) 18:22:16.96ID:Q2xDNdws0
ポインタのはこれか?
ttp://www.mosaic-industries.com/embedded-systems/_media/c-ide-software-development/learning-c-programming-language/understanding-and-using-c-pointers.pdf
0443デフォルトの名無しさん (スップ Sdc8-qQHP)2016/08/26(金) 18:33:19.77ID:JPE4ysRCd
自作関数に配列を使ってreturnをmain関数の配列に格納する場合、どのように書けばいいのでしょうか
0444デフォルトの名無しさん (ワッチョイ 7c7b-F3Fi)2016/08/26(金) 18:40:26.78ID:DwWF74Ym0
メイン関数の配列のポインタを自作関数に引数で渡す
0445デフォルトの名無しさん (スップ Sdc8-qQHP)2016/08/26(金) 18:44:30.49ID:JPE4ysRCd
あざっす
0446デフォルトの名無しさん (ガラプー KK25-AuDT)2016/08/27(土) 02:09:18.50ID:bgZ0ZyXgK
>>1
独習Cっていう厚い本良いですか?
アマゾンレビューは評価が分かれてて…。
0447デフォルトの名無しさん (アウアウ Sa01-t1qj)2016/08/27(土) 08:34:00.87ID:7WDda6qqa
あのシリーズはいいよ。独習C、C++、アセンブラ、全部読んだらもうバッチリ。
0448デフォルトの名無しさん (ワッチョイ 7fc9-t1qj)2016/08/27(土) 09:25:03.98ID:vSdZgkIy0
独習シリーズって言語によって評価大きく分かれてたような覚えがある
0449デフォルトの名無しさん (ワッチョイ 3e85-gQqU)2016/08/27(土) 10:00:21.66ID:x/ApqDvP0
本屋に行って眺めてみて判断する。 それくらいしたら?
0450446 (ガラプー KK25-AuDT)2016/08/27(土) 10:17:30.68ID:bgZ0ZyXgK
>>449
住んでる所が地方なので周りの本屋にあまりプログラムの本が置いてないんです。オライリーの本くらいしかありません。
0451デフォルトの名無しさん (ワッチョイ b77b-qEI/)2016/08/27(土) 12:10:05.94ID:OFUg9SIZ0
今時オープンソースのソフトウェア一杯あるんだからそれらを自分好みに改造してみるとかがいいんじゃね
だからぶ厚い入門書なんて要らんと本で入門しなかった俺は思う
0452デフォルトの名無しさん (ワッチョイ 0448-Ptq2)2016/08/27(土) 12:33:07.27ID:hvbipPnB0
いきなりソース見ても挫折するだけじゃ
0453デフォルトの名無しさん (ワッチョイ 7f6f-Kfh8)2016/08/27(土) 13:12:02.43ID:puh4Hp890
>>438
ほんとは\rの後同じ文字を出力してbold表示を作るんだ
0454デフォルトの名無しさん (ワッチョイ de3c-t1qj)2016/08/27(土) 13:28:38.17ID:wqSjCbZp0
>>453
ゴルフボールかよ w
つか B^HBO^HOL^HLD^HD ってやる方が普通だと思う
0455デフォルトの名無しさん (ワッチョイ cec2-Q4SI)2016/08/27(土) 14:04:40.12ID:/lPBBpET0
プログラムの本があまり置いてないのに
オライリーを置く本屋の方が珍しい。
0456デフォルトの名無しさん (ワッチョイ df41-hMGK)2016/08/27(土) 21:32:51.74ID:nVNQ8rj/0
最近ようやく立ち歩きができるようになった
初心者ですが
ポインタの理解としては
電話で変数の中身を聞くのではなく
住所を割り出して自宅凸して直接確かめる、
という感じでいいんでしょうか?
0457片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK7f-/Sah)2016/08/27(土) 21:39:51.94ID:UpERV3vPK
>>456
メインメモリーにあるデータ記録場所は数で表せる。
それをアドレスと言ったりポインターと言ったりする。
アドレスは普通のデータ型と区別するためにポインター型というものを使う。
0458デフォルトの名無しさん (アウアウ Sa01-t1qj)2016/08/27(土) 21:50:01.58ID:mZx/GONBa
>>456
違うと思う。電話で例えるのはやめたら?
0459デフォルトの名無しさん (ワッチョイ 757b-t1qj)2016/08/27(土) 21:54:59.35ID:mf8cYo/10
>>456
car と cdr の違いだよ
0460デフォルトの名無しさん (ワッチョイ 7f6f-Kfh8)2016/08/27(土) 22:12:26.95ID:puh4Hp890
quoteの有無だよ!
0461デフォルトの名無しさん (ワッチョイ dd7b-IrME)2016/08/27(土) 22:59:37.11ID:mTjMXdTp0
>>456
難しく考えることはない

int a = 100;
int *b = &a;

箱 a の中身が「100」 だとすれば
箱 b の中身は「箱 a の場所を記した紙切れ」だ

単に b とアクセスしてしまうと紙切れを内容と解釈するだけなので
b を経由して a にアクセスするためには関節参照演算子 * を付けて *b とする
0462デフォルトの名無しさん (JP 0Hcd-gQqU)2016/08/28(日) 00:28:01.09ID:0bJar0u9H
「zdnet ポインタ 記事」 でググれ
コメント含めて優秀なポインタの解説記事が出てくる
0463デフォルトの名無しさん (ワッチョイ e1c1-KD3v)2016/08/28(日) 00:30:20.10ID:7HPdDlC80
includeガードについてなんですが

abc.hのヘッダファイル先頭に
#ifdef ABC_H
#define ABC_H

void test(){
}

最後に
#endif ABC_H
と記述します

main.cから

#include "abc.h"
としてインクルードし

test();

を呼び出すのですが
test関数が定義されてないと怒られてしまいます。インクルードガードの使い方を間違っているのでしょうか?
0464デフォルトの名無しさん (ワッチョイ 9c7b-zvPZ)2016/08/28(日) 00:33:37.69ID:CaGzKWyD0
アドレス・参照とは、各プロセス固有の、4GBの論理アドレスの番地のこと。
アドレスの中身・内容が値

例えば、100〜103番地の4バイトに、Int32型の値、1を持つとき、
先頭アドレスは100で、Int32型、サイズは4バイト、値は1となる
0465デフォルトの名無しさん (ワッチョイ 7f6f-Kfh8)2016/08/28(日) 00:34:13.10ID:NS1QgDmI0
>>463
> #ifdef ABC_H
> #define ABC_H
> #endif ABC_H
いろいろやばいですよ
0466デフォルトの名無しさん (ワッチョイ 9c7b-zvPZ)2016/08/28(日) 00:38:15.77ID:CaGzKWyD0
>#ifdef ABC_H
>#define ABC_H

#if not def ABC_H
もし、定義されていなければ、定義する。
漏れもよく知らないから、自分で否定形を検索して
0467デフォルトの名無しさん (ワッチョイ 7e42-gQqU)2016/08/28(日) 00:42:04.94ID:bDqORRlk0
吹き出しそうになったじゃないか・・
0468デフォルトの名無しさん (ワッチョイ 7e42-gQqU)2016/08/28(日) 00:43:12.63ID:bDqORRlk0
どれでも良いから、インクルードファイルを一度見てみたら良いと思う
0469446 (ガラプー KK7f-AuDT)2016/08/28(日) 00:43:15.73ID:hWMEp1xFK
書籍独習Cについて質問した者です。
答えて頂いた方、ありがとうございました。
0470デフォルトの名無しさん (ワッチョイ e1c1-KD3v)2016/08/28(日) 00:47:15.70ID:7HPdDlC80
回答有り難うございます
まじすか。。。webで書き方チラッとみたんですがやっぱりおおちゃくせず自分で考えて書きます
0471デフォルトの名無しさん (JP 0Hcd-gQqU)2016/08/28(日) 00:52:25.36ID:0bJar0u9H
>>470
#ifndef ABC_H
#define ABC_H

#ifdef __cplusplus
extern "C" {
#endif

extern void test();

#ifdef __cplusplus
}
#endif

#endif // ABC_H
0472デフォルトの名無しさん (ワッチョイ 40a3-LL1O)2016/08/28(日) 02:24:51.92ID:S4wK6H090
おおちゃく..
0473デフォルトの名無しさん (ワッチョイ 7e42-gQqU)2016/08/28(日) 02:33:22.49ID:bDqORRlk0
インクルード内で関数定義というのは、普通しないだろう
参考にしたサンプルソースがあるのか?
0474デフォルトの名無しさん (ワッチョイ cddc-Eng/)2016/08/28(日) 06:36:44.08ID:Gj2gLWrJ0
>>463
#ifdef じゃなくて #ifndef な、
というのが最も簡潔な回答かな。説明は全部省略した場合の答え。

>>471 はC++からも呼び出される可能性のあるCの関数で使う書き方。
実際のインクルードファイルでは、こういう色んな場合に対応した
ゴチャゴチャした書き方が必要になってて、見慣れないと見にくいよね。
「この部分の条件コンパイルは何のためだろう?」てな感じ。
0475デフォルトの名無しさん (JP 0Hcd-MmRS)2016/08/28(日) 07:13:36.46ID:cNmF5uLjH
次にお前はマクロ名をスペルミスして動かないと言い出す
0476デフォルトの名無しさん (ワッチョイ 7e42-gQqU)2016/08/28(日) 09:53:07.20ID:bDqORRlk0
それっておれおま?
0477デフォルトの名無しさん (ワッチョイ e1c1-KD3v)2016/08/28(日) 12:19:51.69ID:7HPdDlC80
>>474
丁寧に有り難うございます
仰るとおり見慣れてないと見にくいように感じてしまいますね
0478デフォルトの名無しさん (ワッチョイ d66c-gQqU)2016/08/28(日) 17:46:34.47ID:WauWas/F0
**********************************
/* abc.h */
#ifndef ABC_H
#define ABC_H

void test(void);

#endif
**********************************
/* abc.c */
#include "abc.h"

void test(void);
{
.....;
}
**********************************
/* main.c */
#include <stdio.h>
#include "abc.h"

int main(void)
{
.....;
return 0;
} 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0479デフォルトの名無しさん (ワッチョイ cec2-Q4SI)2016/08/28(日) 19:09:15.59ID:nd9FhnVh0
Cを覚えて淫狂う奴
0480デフォルトの名無しさん (ワッチョイ e1c1-KD3v)2016/08/28(日) 20:03:26.04ID:7HPdDlC80
>>478
ちなみに
オブジェクトファイルが複数個あるときはアーカイブファイルにするのが一般的ですか?

ar crv lib.a abc.o def.o ghi.o

cc -o main main.o lib.a

でないとリンクするときめんどくさいですよね?他に良い方法あるんでしょうか
0481デフォルトの名無しさん (ワッチョイ 7f5b-t1qj)2016/08/28(日) 20:10:32.91ID:f+MS5Cr30
makefile
0482デフォルトの名無しさん (ワッチョイ 3e17-gQqU)2016/08/28(日) 21:57:51.48ID:rbcABw6M0
makefileわかりづらい
これからはrakefile
rakefileは分かりやすい
0483デフォルトの名無しさん (ワッチョイ 7e0c-qQHP)2016/08/28(日) 22:56:33.27ID:TcwdS3gd0
rubyとかいうカルト言語の宣伝はやめろ
0484デフォルトの名無しさん (ワッチョイ e1c1-KD3v)2016/08/28(日) 23:24:07.24ID:7HPdDlC80
>>481
有り難うございます
0485デフォルトの名無しさん (ワッチョイ d66c-gQqU)2016/08/29(月) 00:05:15.79ID:HoqZTsE50
オライリーが「GNU Make 第3版」pdfを無料公開しているな
http://www.oreilly.co.jp/library/4873112699/
0486デフォルトの名無しさん (ワッチョイ cddc-Eng/)2016/08/29(月) 05:19:04.83ID:hghRBhuw0
>>485
ダウンロードしてみたところ、表紙を除いて全部が入ってるみたいね。
これは助かる。ありがとうO'Reilly、ありがとう485。
0487デフォルトの名無しさん (ワッチョイ 7f6f-Kfh8)2016/08/29(月) 06:29:37.40ID:3dic6jPQ0
最近はcmakeを使ってみてる
0488デフォルトの名無しさん (ワッチョイ 40a3-LL1O)2016/08/29(月) 07:42:07.12ID:WhQhLVpY0
>>485
ナイス!
0489デフォルトの名無しさん (ワッチョイ 9c42-gQqU)2016/08/29(月) 09:31:16.45ID:9l6dWsqS0
この板にはmake関連のスレッドはないんだな
0490デフォルトの名無しさん (ワンミングク MM40-Ptq2)2016/08/29(月) 10:26:01.16ID:rITYaHNbM
>>485
おぉ!ありがと!
0491デフォルトの名無しさん (ワッチョイ 7eba-Vqeh)2016/08/29(月) 11:09:39.10ID:OcJqV5W/0
太っ腹過ぎるだろ…
ありがとう
0492デフォルトの名無しさん (ワッチョイ 9c7b-zvPZ)2016/08/29(月) 12:51:43.60ID:pCoMcuGf0
make 改訂版、1997、オライリー・ジャパン

本もあるよ
0493デフォルトの名無しさん (ワッチョイ 1e5b-Vqeh)2016/08/29(月) 17:40:26.68ID:D15V/Uej0
無料公開?どこにあるの。買わないとだめなんじゃないの
0494デフォルトの名無しさん (ワッチョイ 88ff-XNiq)2016/08/29(月) 17:46:12.12ID:O/EX6pVb0
>>493
章ごとに分かれてるけどそれぞれpdfになってるでしょ
0495デフォルトの名無しさん (ワッチョイ 1e5b-Vqeh)2016/08/29(月) 17:48:26.03ID:D15V/Uej0
なるほど。pdfへのリンクになってんのか。今わかった
0496デフォルトの名無しさん (ワッチョイ 7519-hifv)2016/08/29(月) 18:52:48.16ID:TMR7I9XN0
仮想関数テーブル作りたいんですけど
オブジェクト一つ一つに何か型を判定する識別子を持たせるしか
方法ないんですか?
それだと重いんですけど。
静的な構造体のメンバーが持てればいいんですけど。
0497デフォルトの名無しさん (ワッチョイ 7519-hifv)2016/08/29(月) 18:59:13.55ID:TMR7I9XN0
>>496
同じ型のオブジェクトは同じ配列に入れて、その配列内にあるか
判定するとか思いついたけど実現性は薄いですね。
0498デフォルトの名無しさん (ワッチョイ 7c7b-UTjx)2016/08/29(月) 19:30:21.26ID:gu3FOZUw0
イメージがよく分からんけど、関数ポインタと識別子を構造体にまとめて、構造体変数の配列または連結リストにするとかはどうなのかな?
0499デフォルトの名無しさん (ワッチョイ de4e-wEvP)2016/08/29(月) 20:22:24.11ID:HmUmWpCM0
オブジェクトにテーブルのインデックスを持たせればいい。
インデックスは列挙型。
0500デフォルトの名無しさん (アウアウ Sa01-hMGK)2016/08/30(火) 00:42:29.57ID:+L2mQNqCa
>>456です
遅くなりましたがポインタについて
いろいろレスありがとうございました
Cがメインの言語ではないんですが
ちょっと気になったので。
ゆっくり勉強します
0501デフォルトの名無しさん (ワッチョイ e0c1-WuaH)2016/08/30(火) 02:18:42.98ID:KRqrNXD70
グローバル変数の初期化について
int global_variable = function();
のように関数で初期化することは合法ですか?
標準の版によって異なるようであればそこんとこもお願いします。
0502デフォルトの名無しさん (ワッチョイ de4e-wEvP)2016/08/30(火) 02:24:52.06ID:/CBfBqKD0
無理じゃね? コンパイル時に解決できない。
Initializer element is not a compile-time constant
0503デフォルトの名無しさん (ワッチョイ e0c1-WuaH)2016/08/30(火) 03:42:59.05ID:KRqrNXD70
ありがとうございます。
0504デフォルトの名無しさん (JP 0Hcd-MmRS)2016/08/30(火) 09:36:14.56ID:7XaQ2bAdH
D言語「呼ばれた気がした」
0505デフォルトの名無しさん (ワッチョイ 7519-hifv)2016/08/30(火) 10:07:25.13ID:8FFOlsKi0
struct list {
list * next;
char a[]; // Unsized array
};
こういう可変長構造体でcharの配列部分を構造体にキャストされて
Voidポインターじゃないリストは作れるかどうかわ
実際に試して無くて理論上でしかわかってないのですが
作っても問題ないですか?
0506デフォルトの名無しさん (エーイモ SEed-40Y4)2016/08/30(火) 11:11:13.50ID:7mJsAv1uE
ubuntuでcの勉強がしたいけどPHPしか書いたことがない初心者です
今からCを覚えるためにここの先輩方おすすめのサイトか本を教えてください
ねこでもわかるC言語はWindows向け?だったので途中でやめました
0507デフォルトの名無しさん (ワンミングク MM40-Ptq2)2016/08/30(火) 11:25:36.73ID:eIfy12tjM
>>506
434
0508デフォルトの名無しさん (ワンミングク MM40-Ptq2)2016/08/30(火) 11:30:44.56ID:eIfy12tjM
C言語 アルゴリズム
でググって出てくる本が良さげ
0509デフォルトの名無しさん (ササクッテロ Sp69-qQHP)2016/08/30(火) 11:50:41.37ID:xgpTgq7wp
>>496
unionにしてtypeを判断してオブジェクトを選ぶとか

union {
int type;
struct {
int type;
// 適当にメンバー
} hoge;
struct {
int type;
// 適当にメンバー
} foo;
} uni;
0510デフォルトの名無しさん (ワッチョイ 7e4f-gQqU)2016/08/30(火) 11:56:14.99ID:t6JGm4v70
>>509 基本骨子は変わらんだろうけど
type を union でぶっつけずに struct 中 の union で書くかな?

struct {
int type;
union {
strust type1 { .. } t1;
strust type2 { .. } t2;
...
} uni;
};
0511デフォルトの名無しさん (JP 0Hcd-gQqU)2016/08/30(火) 12:20:21.53ID:cF5TzwEdH
>>505
char a[] の部分を別の構造体へのポインタにキャストできるし、ポインタを通じてアクセスもできるがオススメしない
0512デフォルトの名無しさん (ガラプー KK25-AuDT)2016/08/30(火) 20:25:22.99ID:C4ScbY62K
>>509>>510
unionなんて使う機会あるんスね。
0513デフォルトの名無しさん (ドコグロ MM74-t1qj)2016/08/30(火) 20:27:54.04ID:RPFxvzfNM
まあ使う機会があるからそう言う機能をつけたわけだし
0514デフォルトの名無しさん (アウアウ Sa01-rVUj)2016/08/30(火) 20:29:31.74ID:2E/+BbzGa
一番使ったのはDOSコールでレジスタ読むときだったかなw
0515デフォルトの名無しさん (ワッチョイ de3c-gQqU)2016/08/30(火) 20:46:48.56ID:K5NvRd9x0
ソケットで SOCKADDR とか union の見本市みたいなもんで
0516デフォルトの名無しさん (ワッチョイ 7519-hifv)2016/08/30(火) 20:59:00.27ID:8FFOlsKi0
struct {
int type;
void * derived_class;
} base_class;
こうするのが普通だろうな
0517デフォルトの名無しさん (ワッチョイ 9c42-gQqU)2016/08/30(火) 21:42:32.66ID:q7NbkRLH0
typedef union _XEvent {
int type; /* must not be changed */
XAnyEvent xany;
XKeyEvent xkey;
XButtonEvent xbutton;
XMotionEvent xmotion;
XCrossingEvent xcrossing;
XFocusChangeEvent xfocus;
XExposeEvent xexpose;
XGraphicsExposeEvent xgraphicsexpose;
XNoExposeEvent xnoexpose;
XVisibilityEvent xvisibility;
XCreateWindowEvent xcreatewindow;
XDestroyWindowEvent xdestroywindow;
XUnmapEvent xunmap;
XMapEvent xmap;
XMapRequestEvent xmaprequest;
XReparentEvent xreparent;
XConfigureEvent xconfigure;
XGravityEvent xgravity;
XResizeRequestEvent xresizerequest;
XConfigureRequestEvent xconfigurerequest;
XCirculateEvent xcirculate;
XCirculateRequestEvent xcirculaterequest;
・・・
XClientMessageEvent xclient;
XMappingEvent xmapping;
XErrorEvent xerror;
XKeymapEvent xkeymap;
long pad[24];
} XEvent;
行が長すぎなので途中省略w
0518デフォルトの名無しさん (ワッチョイ 7519-hifv)2016/08/30(火) 22:00:40.10ID:8FFOlsKi0
構造体の一番目がintなら構造体をintにキャストしても問題ないの?
0519デフォルトの名無しさん (ワッチョイ 7519-hifv)2016/08/30(火) 22:19:30.55ID:8FFOlsKi0
>>518
unionで同じにできるってことは同じ型の変数が同じ順番に
現れていれば同じとこまでは同じってことだよね。
だから問題ないね。
0520デフォルトの名無しさん (ワッチョイ 804e-t1qj)2016/08/31(水) 00:35:34.12ID:z1jYmTC80
>>514
I/Oポート操作するときとか。
0521デフォルトの名無しさん (ワッチョイ 7e4f-gQqU)2016/08/31(水) 08:46:46.70ID:R2wCMWFk0
>>517
それぞれの X〜 構造体の先頭要素に int type が必ずあるやりかたなんだね
0522デフォルトの名無しさん (ワッチョイ 7519-hifv)2016/08/31(水) 10:17:05.04ID:p1K5Mzky0
ユニオンをつかうのはサイズが同じだから直接コピーが出来るのと生のまま配列に並べられるという利点があるね。
0523デフォルトの名無しさん (ワッチョイ 9c42-gQqU)2016/08/31(水) 10:25:09.05ID:xAEFTakh0
サイズを一定にしたゆうパックみたいな感じ?
0524デフォルトの名無しさん (エーイモ SE0e-40Y4)2016/08/31(水) 11:28:53.09ID:TpIoDyHUE
すいません今からC言語を学習する場合
C言語というのはVC++でしか書けないものっていうぐらいの知識しかなかったんですが
C11とC17とC99とかいろいろあることを知りました
今から学習するならどれから始めたいいんでしょうか?
0525デフォルトの名無しさん (ドコグロ MM1c-t1qj)2016/08/31(水) 11:48:31.72ID:wnRi/liKM
規格の意味と統合開発環境の言葉の意味から
0526デフォルトの名無しさん (アウアウ Sa01-t1qj)2016/08/31(水) 11:54:02.14ID:0N5fpulZa
細かいことは気にするな。とりあえずcygwin + gccから始めよう
0527デフォルトの名無しさん (JP 0Hcd-MmRS)2016/08/31(水) 13:08:43.28ID:mqymnS7ZH
>>524
VC++ が使えるなら それで使える範囲をおぼえればいい

正直、自称プロでも C11やらC17 を理解して使いこなす人は多くないから
C99+α(環境依存) だけ目標にしとけばいい

ただし C と C++ の知識が混ざるとよくないから
C を使う場合はファイル拡張子を .c にすると決めておくのがいい
0528デフォルトの名無しさん (ワッチョイ 7519-hifv)2016/08/31(水) 15:42:46.84ID:p1K5Mzky0
Cは11までしかないだろ。
0529デフォルトの名無しさん (ワッチョイ 7e0c-qQHP)2016/08/31(水) 16:17:08.04ID:484LajMm0
CはC89,C99,C11くらいじゃなかった?
後は古のK&R Cとか?
0530デフォルトの名無しさん (ワッチョイ 7e0c-qQHP)2016/08/31(水) 16:17:41.74ID:484LajMm0
C++は98,03,11,14,17かな
0531デフォルトの名無しさん (ワッチョイ cddc-Eng/)2016/08/31(水) 17:17:44.57ID:WNpxNMes0
つまり Cナントカ って規格と C++ナントカ って規格は
別の言語なので、まずはそこに気をつけろ、ということ。

C11 と C++11 が(同じ数字で)存在するのよね。
0532デフォルトの名無しさん (ワッチョイ 7935-rVUj)2016/08/31(水) 17:43:42.59ID:ILH765tm0
但し、この板でバトる時には規格書を完全に理解している事が必要
0533デフォルトの名無しさん (ドコグロ MM3f-t1qj)2016/08/31(水) 18:43:27.15ID:Q4dnbqrxM
当たり前だよなあ
0534デフォルトの名無しさん (ワッチョイ 9cbf-qQHP)2016/08/31(水) 20:19:47.07ID:16QJTCAz0
全員が規格書を完全に理解してたらバトルは起きないだろ!
いい加減にしろ!
0535デフォルトの名無しさん (ワッチョイ de3c-t1qj)2016/08/31(水) 21:06:55.66ID:3CnmSlUz0
全員が規格完全理解していてもバトルはおきる
0536デフォルトの名無しさん (ワッチョイ 7dc9-t1qj)2016/08/31(水) 21:10:19.95ID:4OS0+uD70
括弧の位置とか
0537デフォルトの名無しさん (ワッチョイ d6c0-a0e2)2016/08/31(水) 21:25:57.87ID:U6JvyzT70
規格が物足りないから新しい規格ができるんじゃないの
0538デフォルトの名無しさん (ワッチョイ 40a3-LL1O)2016/08/31(水) 21:42:19.69ID:fEzvVNxk0
歴史とか法律なんか専門家がきちっと理解してるはずなのに解釈の違いとかあるし
0539デフォルトの名無しさん (ワッチョイ 9c42-gQqU)2016/08/31(水) 21:44:59.66ID:xAEFTakh0
一種の宗教だからな
経典の読み方で解釈が変わるとかありそうだ
0540デフォルトの名無しさん (アウアウ Sa01-KD3v)2016/08/31(水) 23:42:35.35ID:eq7fsml1a
srcとincludeというフォルダの親ディレクトリでmakefileを作ってみたのですがうまくいきません

srcディレクトリにsrc1.cとsrc2.c
includeディレクトリにlib.h
これらを使って実行ファイルmainをビルドしようと思って書いてみました

CC = gcc
CPPFLAGS = -I include
VPATH = src

    main:main.c src1.o src2.o
    $(CC) -o main $(CPPFLAGS) $^

    src1.o:src1.c
    $(CC) -c src1.c

    src2.o:src2.c
    $(CC) -c src2.c

***最初のターゲットより前にコマンドを起動. 中止と出てしまいます。

srcディレクトリにて cc -o main -I ../include main.c src1.o src2.o
とした場合には正常にビルド出来ます
0541デフォルトの名無しさん (ワッチョイ 3e17-gQqU)2016/08/31(水) 23:50:19.04ID:dHlqOnKF0
CC = gcc
CPPFLAGS = -I./include
VPATH = ./src

    main:main.c src1.o src2.o
    $(CC) -o main $(CPPFLAGS) $^

    src1.o:src1.c
    $(CC) -c $(VPATH)/src1.c

    src2.o:src2.c
    $(CC) -c $(VPATH)/src2.c
0542デフォルトの名無しさん (ワッチョイ 777b-UYCy)2016/09/01(木) 00:42:15.19ID:nGqVI4Wr0
VPATH が間違っているのだろ
0543デフォルトの名無しさん (JP 0H4f-pIcq)2016/09/01(木) 00:52:51.92ID:oR+I8oU5H
makefile 初心者はまずタブとスペースの使い分けを叩きこまねばならない
0544デフォルトの名無しさん (ワッチョイ 777b-UYCy)2016/09/01(木) 04:02:43.27ID:nGqVI4Wr0
コマンドを書く行頭は、タブ文字で始まるから、わかりにくい

Gradle なら構文もわかりやすいし、Groovy でプログラミングのように、手続きも書ける
0545デフォルトの名無しさん (ワッチョイ b3dc-+jFW)2016/09/01(木) 05:32:30.99ID:FZE3lCU70
>>540
ちょうど >>485 で紹介された無料PDFの『GNU Make 第3版』を読んでるとこ。

main: , src1.o: , src2.o: の各行はターゲットの指定なので
行の先頭から書かないとダメよ。

makeさんは main: の行(たぶん行頭にタブがある)を見て
「ターゲットが指定されてないのにコマンド main:main.c を
実行するように命じられてるですけど」と言ってる。
とりあえず今回の原因はそれだろう。


makeの実行時にmakefile中のエラー行番号が表示されるはずだがなぁ。
0546デフォルトの名無しさん (ササクッテロ Sp8f-10NS)2016/09/01(木) 12:04:26.92ID:VlidTBqEp
個人学習なら今更makeやるならCMakeがいいような
0547デフォルトの名無しさん (アウアウ Sa0f-I+Ar)2016/09/01(木) 16:07:23.20ID:985JS2lia
>>540です
タブを抜いたら出来ました。有り難うございます
ですが、makefileを親ディレクトリにおくとオブジェクトも親に出来てしまうのですね...
makefileと実行ファイルのみ親に作ることはできるのかな?オライリーのpdfが配布されている様なのでちゃんと目を通して見ることにしてみますm(__)m
0548デフォルトの名無しさん (ワッチョイ c7ff-/sqZ)2016/09/01(木) 16:15:02.19ID:QpZxesxe0
通常はMakefileは各ディレクトリにおいて
上のMakefileはそれぞれのMakefileでmakeする形になるかと
0549デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/01(木) 16:25:01.00ID:FY85t8sS0
>>517のやり方は、メモリー割り当てるとき
全体のサイズを割り当てなくても必要な構造体だけが入る大きさで問題ないですか?
0550デフォルトの名無しさん (JP 0H4f-pIcq)2016/09/01(木) 17:42:36.93ID:oR+I8oU5H
リストしたやつの総合計やないんやで
0551デフォルトの名無しさん (ワッチョイ c7ff-/sqZ)2016/09/01(木) 18:06:53.80ID:QpZxesxe0
まあ一番でかいやつだな、常に
0552デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/01(木) 18:43:57.36ID:IqqYN49f0
>>549
long pad[24];
これが共用体のサイズを決めていたはず
各イベント構造体はこれより大きくない様に設計されてたはず
0553デフォルトの名無しさん (ワッチョイ afc2-mhjm)2016/09/01(木) 18:53:11.40ID:wr8HVpEY0
オライリーの英語の本ならこっちで無料pdfで提供してるので
こっちのタイトルもそのうち日本語版が提供されるのかな。
http://www.oreilly.com/openbook/
0554デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/01(木) 19:02:28.86ID:FY85t8sS0
数ある構造体の中で最大の構造体のサイズより小さいそれしか
使わないからいいさく割り当てても問題ないのか聞いています。
0555デフォルトの名無しさん (ワッチョイ 6f3c-wh/5)2016/09/01(木) 19:23:54.76ID:L4FyPA9F0
(1) 構造体そのものを引数に詰んだり、コピーしたりするのは×
(2) ポインタで渡して、実質そこしか使わないなら大丈夫かもしれないが、
 呼び出された先で(1)のようなコピーとってるようだと駄目

自分で作って 自分で使って (自分で消去する) 範囲なら大丈夫なんじゃね?
0556デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/01(木) 19:31:55.97ID:otP8eK2Ia
ポインタ演算してもダメだし、やめた方がいい。そもそもそれじゃunionとる意味ない
0557デフォルトの名無しさん (ワッチョイ 6f3c-wh/5)2016/09/01(木) 19:37:29.15ID:L4FyPA9F0
foo(const XEvent* arg); ってあって 実質 XAnyEvent を渡すだけだから と

XAnyEvent any;
・・・
foo((const XEvent*)&any);

こうやるのは危ない
0558デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/01(木) 19:42:13.74ID:FY85t8sS0
&any.xEventって出来るのが凄いところだと思うのにキャストしたら
意味ないと思うのだけど
0559デフォルトの名無しさん (ワッチョイ 6f3c-wh/5)2016/09/01(木) 19:43:41.40ID:L4FyPA9F0
>>558
Cの文法じゃ キャストがあろうがなかろうが 振る舞いかわらんよ?
0560デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/01(木) 19:48:22.14ID:FY85t8sS0
>>559
すみません、すみません
反省しています
もう二度としません
許してください
お願いします
0561デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/01(木) 20:14:03.40ID:otP8eK2Ia
あと1バイトのデータとかだったらpaddingが左詰めで入るか右詰めで入るかとか処理系によって違ったりしないのかな?
0562デフォルトの名無しさん (ドコグロ MM9f-RETc)2016/09/01(木) 20:51:32.22ID:qC9ojyjSM
>>561
ビットフィールドの話?
0563デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/01(木) 20:58:11.76ID:otP8eK2Ia
>>562
ビットフィールドじゃなく、構造体でも4バイトアライメントとかあったような気がしたんだけど。違ったらすまぬ。
0564デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/01(木) 21:07:19.53ID:otP8eK2Ia
スマホなのでちゃんと説明できないけど、charとintのメンバのunionで、アドレスの0番地にデータを置いたとき、エンディアンによっては、charはc000と置かれるか、000cと置かれるかが変わるから、charメンバのアドレスは0番地か3番地か変わらないかなって思いまして。
間違ってたら重ねてすまぬ。
0565デフォルトの名無しさん (ワッチョイ 6f3c-RETc)2016/09/01(木) 22:16:44.58ID:PHNdABP90
union {
int i;
char c;
} u;
で、(char *)u.i != u.c になるかって話?
さすがに見たことない
0566デフォルトの名無しさん (ワッチョイ 6f3c-RETc)2016/09/01(木) 22:18:28.77ID:PHNdABP90
すまん
(char *)u.i != u.c
じゃなくて
(char *)&u.i != &u.c
だった
0567デフォルトの名無しさん (JP 0H0f-RETc)2016/09/01(木) 22:20:26.21ID:72MJ7dmmH
保証されてるかってことでしょ
さぁみんな、ISO読むんだ
0568デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/01(木) 22:58:14.53ID:otP8eK2Ia
u.c=1のとき、u.iが1の処理系と、0x1000000になる処理系があるんじゃないかと思って。そしたら
>>554
みたいな使い方したらおかしくなるんじゃね?って思ったのです。
0569デフォルトの名無しさん (ササクッテロ Sp8f-10NS)2016/09/01(木) 23:33:22.97ID:pRoUKq45p
>>568
それはパディングの話じゃなくてエンディアンの話じゃ無いかな
>>554 はもちろんunionの中でアクセス対象とするメンバの構造体が決まっているから成り立つ
基本的にキャストしない方変換なんてやってはいけない
0570デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/01(木) 23:36:55.86ID:wH/lQgu70
http://i.imgur.com/SLbhswZ.png

今はどっちが主流・多数派なん?
0571デフォルトの名無しさん (スップ Sd5f-RETc)2016/09/01(木) 23:40:28.98ID:iloxib6xd
K&R原理主義なのでこれ
if ( 条件式 ) {
}
0572デフォルトの名無しさん (ワッチョイ 77bf-10NS)2016/09/01(木) 23:44:23.93ID:ky2ADSad0
if(CON)
{ // ここの行がスカスカになって好きじゃない
//コメント書けばいいけどインデントの前に括弧がつくのは受け付けない
}
0573デフォルトの名無しさん (ワッチョイ 6f4e-9qqA)2016/09/01(木) 23:52:04.48ID:1exmvNlu0
>>571
制御文はこれ。

>>572
関数はこれ。
0574デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/02(金) 00:57:44.36ID:k1WNyXWb0
>>571
あなたは……でなくて、世間一般で多いのはどっちかを訊いてるのに。
0575デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/02(金) 01:05:16.23ID:tpnnhSQT0
K&Rの信徒が一番多いだろう
0576デフォルトの名無しさん (ワッチョイ 2317-RETc)2016/09/02(金) 01:06:51.56ID:ET6lSoO60
別にどっちでもいい
コンパイルは同じだし
0577デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/02(金) 01:18:00.04ID:tpnnhSQT0
if や while などの制御文に続く ( の間にスペース入れるのかどうかとか
) と { の間はスペース入れるのかどうかとか
( ) の内側に、スペース入れるのかどうかとか、
= や == の前後にはスペース入れるのかどうかとか
いろいろあって、議論すると延々と続いて楽しいよね?
0578デフォルトの名無しさん (ワッチョイ 6f4e-9qqA)2016/09/02(金) 01:20:20.04ID:4oA64gFx0
()の内側には入れない、演算子の両サイドには基本入れるって感じです。
0579デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/02(金) 01:29:22.82ID:k1WNyXWb0
>>578
forとかwhileとか()に演算式の入る場合が多々あるのはどうするん?
0580デフォルトの名無しさん (ワッチョイ 033f-RETc)2016/09/02(金) 01:29:37.30ID:jyXXlfBd0
>>574
世間一般がどうかなんて知ってるはずねーだろ
いい加減にしろ
0581デフォルトの名無しさん (ワッチョイ 6f4e-9qqA)2016/09/02(金) 01:36:32.63ID:4oA64gFx0
>>579
こう書く。かっこの内側ってそういう意味でしょ。
for (int i=0; i<max; i++) {

}
0582デフォルトの名無しさん (ワッチョイ 77bf-10NS)2016/09/02(金) 01:38:36.21ID:2eJk4Nb60
コーディングルールに従うべきであって世間に合わせる必要はない
よってどちらが一般的などと気にすることも明確にする必要もない
そもそも実用性の点から自分で判断すべきだろう
世間がこうだから俺もこうするってのはアホ
この類の宗教戦争の実は俺こっちの方が絶対良いもん!って言いたいだけでまったく強要してないし
0583デフォルトの名無しさん (ワッチョイ 0b9b-RETc)2016/09/02(金) 01:51:45.95ID:17n5VyUh0
結論としてはどっちでもいいだな
自分はCとC++で使い分けてる
0584デフォルトの名無しさん (ワッチョイ f7d2-RETc)2016/09/02(金) 02:25:49.78ID:VW6VL/c10
>>570
#if とか使う時位かな?
0585デフォルトの名無しさん (ワッチョイ 63c1-I+Ar)2016/09/02(金) 03:51:05.77ID:01mdSIC60
utility.hに
extern void tes();

と宣言してその関数のあるソースファイル

tes.cに
#include <stdio.h>
#include "utility.h"

void tes(){
.
.
.

で、utility.hをincludeする必要はなんですか?
色々参考見てみるとこの様に書かれていることが多いのですが、なんというか自分自身をincludeしているようでいらないように思えるのです。実際これincludeしなくても動きますよね?
0586デフォルトの名無しさん (ワッチョイ b3dc-+jFW)2016/09/02(金) 06:57:34.59ID:96M6CE+e0
>>585 時々出る疑問だね。俺はいつもこう答える。

当初の仕様...
tes.h:
extern void tes(); /* 引数なし */

tes.c:
#include "tes.h"
void tes() {...} /* 引数なし */


製作途中でtes()の仕様が変わって、例えば引数が1個追加されたとする。
tes.h:
extern void tes(); /* 引数なし ... 実際の関数と食い違ってる! */

tes.c:
#include "tes.h"
void tes(int para) {...} /* 引数を1個追加 */


tes.h での宣言と tes.c での定義とが食い違ってる、
つまり tes.h の修正をし忘れた、
tes()を呼び出す側も古い仕様のままtes()を使用してる、ということを
tes.cのコンパイル時に知ることができるようになる。
0587デフォルトの名無しさん (ワッチョイ 6f4e-9qqA)2016/09/02(金) 07:14:24.42ID:4oA64gFx0
extern要らなくね?
0588デフォルトの名無しさん (ドコグロ MM9f-RETc)2016/09/02(金) 08:11:08.40ID:Vf4h0u1DM
>>585
tes( ) を使うのが tes.c だけならお前さんの言う通り include の必要はないし、定義より下で使うなら
> extern void tes();
も要らない

(そのファイル内でしか使わない場合は
> static void tes(){
> .
> .
のようにして外部では使わないことを明示した方がいい)

でも、tes( ) を tes.c 以外のソースファイルで使うならそのソースにも
> extern void tes();
を書かないと使えない
一個や数個位ならいいけど使うソースファイルや関数が増えて来たら大変でしょ
引数ある関数ならその引数の型も書く必要あるしね

printf( ) や fopen( ) を使うためにいちいちそれらの宣言書くより
#include <stdio.h>
って楽でしょ?
0589586 (ワッチョイ b3dc-+jFW)2016/09/02(金) 08:33:27.37ID:96M6CE+e0
>>587
関数に対するextern修飾は不要なんだっけね。
あってもなくても動作は同じ。

個人的には extern と static (とC++のinline) が
同じ6文字の単語なんで重宝することがある。

extern int func1( 何やら複雑な引数列 );
static int func2( 上と同じ引数 );
inline int func3( ここも同じ引数 );

引数並びが同じになってることを見比べやすい程度だけど、
まぁ害もないのでexternを書く習慣になってる。
で、一ヶ所で書くならどこでも書くでしょ、という感じ。
空白で位置を揃えれば、というのはまた別の話ね。
0590デフォルトの名無しさん (JP 0Hdf-TXi9)2016/09/02(金) 08:59:28.64ID:nBYyPGNBH
>>570
その日の気分で
0591デフォルトの名無しさん (ワッチョイ ef4f-wh/5)2016/09/02(金) 09:09:04.09ID:p/b91eBU0
整形ツールでレッツ整形
0592デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/02(金) 09:44:28.45ID:6Qab/oE80
グロバ変数も定義が無ければ勝手にexternになるからいらないんだよね。
0593デフォルトの名無しさん (JP 0H5f-wh/5)2016/09/02(金) 11:35:32.00ID:09Or23vIH
やっと構造体までいったんだけど
struct student{
int x;
in y;
}s1
これで、関数に渡すだろ?
ポインタで渡すやり方も書いてあるけど
どっちが主流なの?
0594デフォルトの名無しさん (ワッチョイ 6f4e-9qqA)2016/09/02(金) 11:42:11.41ID:4oA64gFx0
あまりサイズの大きい構造体を値渡しするとスタックオーバーフロー起こすよ。
大きな配列をメンバーに持つとかのね。
そういう時はポインタ渡しだな。
それぐらいのサイズなら、1行で済むので値渡しするな俺は。
0595デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/02(金) 11:48:13.09ID:6Qab/oE80
listはメモリーを一要素に付きvectorよりポインターのサイズだけ
多くいるなんて昔は思ってたけどmallocするとfreeするためにサイズを保存するから
さらに一つ多くいるんだね。
0596デフォルトの名無しさん (ササクッテロ Sp8f-10NS)2016/09/02(金) 11:51:56.01ID:EpS7gvoKp
>>593
ポインタで渡す
0597デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/02(金) 11:55:29.04ID:6Qab/oE80
>>593は
intは32bitでアドレスは64bitだから同じだよね。
0598デフォルトの名無しさん (アウアウ Sa0f-I+Ar)2016/09/02(金) 13:15:38.35ID:tvWxkBk7a
>>593
構造体はコピー渡しだからデカイデータだと効率悪くなると読んだ
0599デフォルトの名無しさん (JP 0H5f-wh/5)2016/09/02(金) 14:05:30.10ID:Z98P2xofH
ありがとうございました
0600デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/02(金) 14:09:32.78ID:6Qab/oE80
関数ポインターの引数の型ってチェックされてないんですか?
型を何にしても通るんですけど
0601デフォルトの名無しさん (オッペケ Sr8f-RETc)2016/09/02(金) 15:08:04.08ID:ZlS/xk/Sr
>>600
関数ポインターに対して演算することは無いからだと思う
0602デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/02(金) 16:23:19.91ID:6Qab/oE80
調べて見るとかんすうぽいんたーの引数に型を書くやりかたと
空の括弧だけの2つやり方があるけれど、違いは
どこにもありませんね。
どちらにしろ、どんな型でも代入できるので書く意味は無意味ですね。
0603デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/02(金) 17:15:13.27ID:6Qab/oE80
色々やってみたけど、関数ポインターの引数の型に違う型を入れると
エラーも警告も出ないのに動作は未定義になる。
0604デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/02(金) 17:51:05.46ID:6Qab/oE80
>>565
struct {char a} A;の&Aと&A.aが一致するかってことでしょ?
これは一致することが保証されてるよ。
0605デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/02(金) 18:06:35.95ID:O8D4JkXba
>>604
いや、unionの話ね。でもたぶん大丈夫らしい
0606デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/02(金) 18:34:59.83ID:k1WNyXWb0
>>586
エラーになるん違うん?
宣言と本体とで違うとそこで止まらん?
0607デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/02(金) 19:01:49.98ID:sEVlG8M9a
なるよ。エラーを出させてコンパイル時に見つけるのが目的。
0608デフォルトの名無しさん (ワッチョイ ff13-hHef)2016/09/02(金) 20:34:39.53ID:BGbCtBYN0
>>571
その K&R も関数に限っては
func()
{
}
なんだよ,中途半端だねー
0609デフォルトの名無しさん (ワッチョイ ff13-hHef)2016/09/02(金) 20:36:32.61ID:BGbCtBYN0
>>600
チェックされるのが普通,コンパイラはなに?
0610デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/02(金) 20:42:50.49ID:6Qab/oE80
>>609
コンパイラーがなんでもチェックされない。
http://ideone.com/dtVBz0
これみて、型が違っているのに何もエラーも警告も出ない。
0611デフォルトの名無しさん (ワッチョイ ff13-hHef)2016/09/02(金) 20:53:24.56ID:BGbCtBYN0
>>610
へえ,thx
引数のときには厳しくチェックされるのにねえ‥
0612デフォルトの名無しさん (スッップ Sd5f-RETc)2016/09/02(金) 21:00:19.40ID:gUJas/pId
>>608
関数とブロックを同じにする必要はないだろ
0613デフォルトの名無しさん (ワッチョイ b3dc-+jFW)2016/09/02(金) 21:12:48.51ID:96M6CE+e0
>>610 のソースを手元の GCC 4.8.2 でコンパイルしたら警告が出たよ。
やっぱりコンパイラによるんじゃないか。

main.c:5:20: warning: initialization from incompatible pointer type [enabled by default]
  int (*fp)(double)=f;

メッセージを日本語にすると
main.c:5:20: 警告: 互換性のないポインタ型からの初期化です [デフォルトで有効]
0614デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/02(金) 22:10:45.13ID:k1WNyXWb0
10年以上コード書いても読んでもないから忘れたのか?その間に変わったのか?
構造体とか配列とかは値渡しできないんじゃなかったのかと、おどろいてる。
0615デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/02(金) 22:14:19.87ID:k1WNyXWb0
>>613
MS-Cの5.1でもポインタの型が違うとsyntax error出てたよなあ。
0616デフォルトの名無しさん (ワッチョイ 6f3c-wh/5)2016/09/02(金) 23:17:02.87ID:PY4YqZXl0
>>614
それは C89 より前の話だな
0617デフォルトの名無しさん (ワッチョイ ef17-wh/5)2016/09/02(金) 23:30:53.17ID:ZSY08LTZ0
出来るってだけで
やってもいいかといえば
やるべきではないな
やっぱり構造体はポインタ渡しがデフォ
0618デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/02(金) 23:41:42.47ID:sEVlG8M9a
配列は出来ないけど構造体はできる。構造体の中に配列を入れれば配列もできる。これは昔から変わらない。
0619デフォルトの名無しさん (ワッチョイ eb7b-iG4w)2016/09/02(金) 23:47:54.79ID:JpI/S6dI0
>>618
C89より昔はできなかったが
0620デフォルトの名無しさん (ワッチョイ 63c1-I+Ar)2016/09/03(土) 03:02:44.03ID:O1fxKxR40
C勉強中だけど配列は値渡しできないのに構造体のメンバにして構造体ごとだとなぜ値渡し出来るのだろうか、構造体だと値が渡せますということはよく目にするけどそれがなぜなのか書いてあるのを見たことがない
0621デフォルトの名無しさん (ワッチョイ 6f4e-9qqA)2016/09/03(土) 03:29:04.32ID:UWPoCkyG0
関数の引数では、配列名はポインタ変数として扱われ、
構造体はメンバーの領域も含めたひとつの値だからじゃないか
struct { char a[10]; } s; // sはaを含む10バイトの値
0622デフォルトの名無しさん (ワッチョイ c7d4-wh/5)2016/09/03(土) 04:27:52.35ID:r1wVhHpW0
>>620
構造体は値渡しできる仕様だから。
配列をメンバにした構造体は特例として値渡しできません、
なんて仕様にしたら複雑な仕様になってしまうからじゃね?
0623デフォルトの名無しさん (ワッチョイ 6f3c-wh/5)2016/09/03(土) 04:34:22.41ID:GOcItm8M0
ポインタという概念を導入したことで、配列を値渡しするのはオーバーヘッド大きいし
いらないんじゃね?って、配列を値渡しする文法を用意しなかったんだろう
0624デフォルトの名無しさん (ワッチョイ 6f4e-9qqA)2016/09/03(土) 04:38:40.26ID:UWPoCkyG0
でかい配列の値渡しは落ちるよ
0625デフォルトの名無しさん (ワッチョイ 6f4e-9qqA)2016/09/03(土) 04:42:28.89ID:UWPoCkyG0
構造体の値渡しはC89からってことだから、後から追加された仕様
0626デフォルトの名無しさん (JP 0H4f-pIcq)2016/09/03(土) 06:52:40.74ID:p8M3DYzdH
配列の長さ持ってないのに値渡しできるわけねーだろ
0627デフォルトの名無しさん (ワッチョイ 6f3c-wh/5)2016/09/03(土) 07:10:14.41ID:GOcItm8M0
長さ込みの型扱い(=構造体で包んだのと実質同じ) の意図の話だと思うよ
受ける側の求めている配列長と 渡す側の配列長が違うのは通さない
0628デフォルトの名無しさん (ワッチョイ 8fc0-lvJd)2016/09/03(土) 09:15:23.22ID:IfSgulxM0
スタック食うからやめて
0629デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/03(土) 10:27:15.80ID:UiaEvtM3a
構造体の値渡しはC89とかってやつからなのか。知らんかった。ありがとう。
0630デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/03(土) 10:27:51.55ID:Q84ojFW+0
逆に構造体の値返しはどうよ
0631デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/03(土) 10:31:15.49ID:UiaEvtM3a
できる。同じ。値返しはコピーの回数がさらに増えると思う。
0632デフォルトの名無しさん (ワッチョイ 0b7b-RJRD)2016/09/03(土) 12:33:56.26ID:CBwHrheW0
最適化で変わらんでしょ
0633デフォルトの名無しさん (ワッチョイ e741-RETc)2016/09/03(土) 13:31:36.02ID:rj2mbv2U0
確かにw
0634デフォルトの名無しさん(霧の向こうに繋がる世界) (エーイモ SE4f-R3iF)2016/09/03(土) 13:36:14.82ID:dJKRKg36E
gccとclangってどっちから勉強したほうがいいとかありますか?
0635デフォルトの名無しさん (ササクッテロ Sp8f-10NS)2016/09/03(土) 13:52:55.72ID:w0/W7pdHp
>>634
逆にどんな差異があると思ってる?
0636デフォルトの名無しさん (ワッチョイ 478c-wh/5)2016/09/03(土) 13:56:49.47ID:C0V9vXnr0
>>634
両方使えるようになったほうがいいけどね
Cの初心者でこれから勉強するっていうなら
まだこだわる段階じゃないかな
0637デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/03(土) 15:50:04.54ID:Q84ojFW+0
clangでもgccでもgdbとlldbのどちらでも使えるから違いは無いと言っても過言ではない。
0638デフォルトの名無しさん (ワッチョイ c7ff-/sqZ)2016/09/04(日) 10:11:53.14ID:NFfxFQpB0
>>630
構造体の値返しはもっと前からできてたけど、標準だったのかどうか・・・
0639デフォルトの名無しさん (JP 0H4f-pIcq)2016/09/04(日) 10:45:01.04ID:VFCxu5XKH
clang の方がエラーメッセージが親切だったりコンパイルが早かったりしたような気が
でもデバッガサポートは gcc+gdb の方がまだ上なのかな
0640デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/04(日) 10:59:40.11ID:nRB1RJVu0
>>626
>>627

printf() とか、引数が可変長じゃんよ。なんで配列だとできないんさ?
宣言した長さか、実際にアロケーションされてる長さか、あるだろ。
0641デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/04(日) 11:22:13.10ID:1JFYw2xu0
固定長の可変長データを持つ構造体の配列を作るにはそれを代入するポインターの型をどう書けばいいですか?
0642デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/04(日) 11:28:18.91ID:nRB1RJVu0
なに、その、夜明けの晩に鶴と亀みたいなのは
0643デフォルトの名無しさん (ワッチョイ ff13-hHef)2016/09/04(日) 11:31:57.35ID:dd19h2wX0
>>638
K&R2, C89から標準だ
0644デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/04(日) 11:38:50.60ID:88S2I+t60
サイズがばらばらのまま配列にするのは無理じゃない?
0645デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/04(日) 12:12:23.74ID:1JFYw2xu0
サイズは一つの配列に対してダイナミックに固定長です。
0646デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/04(日) 12:15:05.31ID:88S2I+t60
配列にしたい、構造体の定義をソースで
0647デフォルトの名無しさん (ワッチョイ c7ff-/sqZ)2016/09/04(日) 12:45:35.58ID:NFfxFQpB0
>>640
printfは、、に限らんけど可変長引数は何らかの手段で長さを得る必要があるね
printfなら、第一引数の文字列を解析すると続く変数の数と型がわかる
0648デフォルトの名無しさん (ワッチョイ 93ee-10NS)2016/09/04(日) 13:07:51.94ID:obvf9NcQ0
>>641
可変長構造体の配列って事でOK?
だったら構造体のポインタ型の配列しかないと思う
0649デフォルトの名無しさん (ワッチョイ 93ee-10NS)2016/09/04(日) 13:13:17.70ID:obvf9NcQ0
>>647
va_listで取るけど、関数コールの引数のスタックサイズを引数の型で割って個数を求めてるんじゃ無いかな
0650デフォルトの名無しさん (ワッチョイ ef17-wh/5)2016/09/04(日) 13:14:38.69ID:CyTmdPeE0
>>641
日本語で頼む
0651デフォルトの名無しさん (ドコグロ MM9f-RETc)2016/09/04(日) 13:32:19.33ID:pCJy0LgLM
>>645
ダイナミックに固定長・・・
0652デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/04(日) 13:42:07.06ID:gawD3zjMa
固定長の構造体の後ろに可変長のデータが繋がってるとかのことかな?
構造体自体は可変長って出来ないと思うけど。
0653デフォルトの名無しさん (JP 0H4f-pIcq)2016/09/04(日) 13:53:45.00ID:VFCxu5XKH
ダイナミックの意味がわかってないんじゃろ
0654デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/04(日) 13:59:56.70ID:88S2I+t60
>>652
構造体の最後のメンバーだけは可変長が可能
0655デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/04(日) 14:06:10.11ID:gawD3zjMa
そうなの?実行時にサイズが決まるの?sizeofとつたらどうなるの?
0656デフォルトの名無しさん (ワッチョイ ef17-wh/5)2016/09/04(日) 14:45:58.82ID:CyTmdPeE0
こういうことか?

typedef struct {
 head_t head;
 body_t body[0];
} data_t;
data_t *data = (data_t *)malloc(sizeof(data_t) + N);
data->body[0] = BODY_1;
data->body[N - 1] = BODY_N;

要素数ゼロの配列宣言はC99以降でしかコンパイル通らないけど。
0657デフォルトの名無しさん (ワッチョイ eb7b-iG4w)2016/09/04(日) 14:46:53.15ID:hSBu5f8h0
可変長構造体ってなんだよ
オレオレ用語は定義してから使うように
0658デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/04(日) 14:50:50.77ID:88S2I+t60
>>656
要素数ゼロがダメなコンパイラの時は1にするってジッチャが言ってた
0659デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/04(日) 15:22:51.12ID:gawD3zjMa
>>656
これなら分かるよ。構造体のサイズは固定。メンバにポインタを持たせるってだけだよね。配列にしても問題ない。ポインタをさらに別の領域に確保すればいいだけ。
0660デフォルトの名無しさん (ワッチョイ 6f3c-RETc)2016/09/04(日) 15:23:50.05ID:xp6EP8jq0
>>658
> 要素数ゼロがダメなコンパイラの時は1にするってジッチャが言ってた

それやると
> data_t *data = (data_t *)malloc(sizeof(data_t) + N);
のサイズ計算がちょっとやな感じになるのがね
0661デフォルトの名無しさん (ワッチョイ ff13-hHef)2016/09/04(日) 15:26:53.36ID:dd19h2wX0
>>659
違う違う
body[0] が可変長なんだよ
構造体のサイズは可変にできる
http://www.kouno.jp/home/c_faq/c2.html#6
0662デフォルトの名無しさん (ワッチョイ ef17-wh/5)2016/09/04(日) 15:41:17.44ID:CyTmdPeE0
バグ訂正
×:data_t *data = (data_t *)malloc(sizeof(data_t) + N);
○:data_t *data = (data_t *)malloc(sizeof(head_t) + (sizeof(body_t) * N));
0663デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/04(日) 15:47:34.82ID:gawD3zjMa
>>661
そうなんだ!知らなかった。ありがとう。sizeofでは可変部がないサイズが返るのかな?
でないと配列とかポインタ演算はできないよね。
0664デフォルトの名無しさん (ワッチョイ ff13-hHef)2016/09/04(日) 16:15:37.88ID:dd19h2wX0
>>663
そう,sizeof では表現上の構造体のサイズが返る
自分で可変長のサイズを足す
http://codepad.org/O1CzMlHd

簡単なものを書いてみると良い
0665デフォルトの名無しさん (アウアウ Sa0f-RETc)2016/09/04(日) 18:57:40.56ID:Mbp+qbbka
曲芸師のようなコードだね!ありがとう、勉強になった。
0666デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/04(日) 20:02:57.67ID:1JFYw2xu0
typedef struct {
 head_t head;
 body_t body[0];
} data_t;
size_t N=rand();
data_t *data = malloc((sizeof(data_t) + N)*10000);
これでデータのn番目の要素にアクセスするには
dataをchar *にキャストして掛け算で位置を割り出すしかないですか?
たとえば長さNの要素のポインターが動的に作れればいいとおもうんですよ。
0667デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/04(日) 20:15:00.70ID:1JFYw2xu0
>>666
たぶん、計算するしかないですね。
そのようなマクロを書けばいいと思いますよ。
0668デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/04(日) 20:22:56.20ID:1JFYw2xu0
>>666
[]演算子も内部的には掛け算していると思うから同じだと思いますよ。
0669デフォルトの名無しさん (ワッチョイ ef9f-MuSt)2016/09/04(日) 20:26:09.31ID:Ti488QlC0
多重人格?なんか怖い😱
0670デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/04(日) 20:53:30.89ID:1JFYw2xu0
これが俺のスタイル 俺のヴァイヴス
0671デフォルトの名無しさん (アウアウ Sa0f-I+Ar)2016/09/04(日) 20:54:33.62ID:jSoBQXkca
なんかワロタ
0672デフォルトの名無しさん (ワッチョイ 93ee-10NS)2016/09/04(日) 21:10:05.63ID:obvf9NcQ0
パディングが入るから無理
0673デフォルトの名無しさん (ワッチョイ b3dc-+jFW)2016/09/05(月) 06:57:25.15ID:IQvMB0/c0
>>666
この方法はダメじゃないかな。>>672の言う通り。

一般的にdata_t*のアラインメントは偶数か
より厳しい4や8の倍数になると思うけど、
例えばrand()の結果が1になった時、sizeof(data_t) + 1 が
奇数になって、アラインメント要求から外れる場所ができる。

body[0]の割り当てサイズを安全なアラインメントに切り上げる、
規格にそった確実な方法ってあったかな。
0674デフォルトの名無しさん (ワッチョイ 8fc0-lvJd)2016/09/05(月) 07:23:29.85ID:Cn/U6jA70
別の変数に取り出してからキャストする
0675673 (ワッチョイ b3dc-+jFW)2016/09/05(月) 08:09:43.42ID:IQvMB0/c0
>>666 の場合は下のようにすればいいかな。

/* 型tのアラインメントに合うように数値nを切り上げる */
#define ALIGN_TYPE(t, n) ((((n) + sizeof(t)-1) / sizeof(t)) * sizeof(t))

size_t N=rand();
size_t data_t_unit = sizeof(data_t) + ALIGN_TYPE(data_t, N);
data_t *data = malloc(data_t_unit * 10000);

擬似的な配列dataのi番目の要素を指すポインタpは
data_t *p = (data_t*) (((char*)data) + i * data_t_unit);


コンパイルして試したわけじゃないのでコピーしても動かないかも。
「dataをchar *にキャストして掛け算で位置を割り出す」という
考え方自体は >>666 の通りだね。
0676デフォルトの名無しさん (ワッチョイ 1351-wh/5)2016/09/05(月) 08:15:09.83ID:EI9/AJWb0
>>662の修正が必要なだけじゃないか?
0677デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/05(月) 09:58:18.65ID:wrSgAGff0
あまりトリッキーな手法を使わず、構造体のメンバーはどちらもポインターにし、
構造体の配列を必要数だけ確保する。
ポインターの指す領域は必要に応じて固定長配列か、実行時に必要なサイズで確保、
構造体の配列の各要素にそれぞれの配列アドレスを格納する。
または、二つの配列を並行して処理するような関数を作成し、
この関数を介して各配列要素へのアクセスをする
0678デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/05(月) 11:42:51.15ID:p8waCebS0
http://ideone.com/1P9Tnl
こんなコード書いてみたけどintのアラインメントが4の倍数じゃないのに
置けるのと同じじゃないの?
よってアラインメントはずれててもいいんじゃないの?
0679デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/05(月) 11:56:15.22ID:p8waCebS0
http://ideone.com/1P9Tnl
普通に出来たけど、なんか間違ってる?
0680デフォルトの名無しさん (スプッッ Sd5f-y9+U)2016/09/05(月) 12:22:33.51ID:FoT5fB0Hd
>>680
CPU による。もしかするとコンパイラにもよるかもしれん。
オリジナル68系ではだめだったはず、今の後継のものでは大丈夫。
インラインアセンブラをC言語の一部として見るのなら、命令によってはだめなものもあったりする。
0681デフォルトの名無しさん (ワッチョイ ef4f-wh/5)2016/09/05(月) 12:42:36.01ID:JVkL6zQg0
malloc の実装のほうでペナルティー発生しないように
余計に取ってるのをもたことはある
0682デフォルトの名無しさん (アウアウ Sa0f-I+Ar)2016/09/05(月) 14:25:14.95ID:890ub2uxa
よし基礎はだいたい理解した!なんかオプションつけて作ってみよ!ってウキウキでgetoptみたら複雑で心ベキベキに折られた...なんやこれ...
0683デフォルトの名無しさん (ワッチョイ c7ff-/sqZ)2016/09/05(月) 14:48:09.85ID:7iAzEFmL0
一番シンプルな使い方を使ってみるしか・・・
0684デフォルトの名無しさん (ワッチョイ b3dc-+jFW)2016/09/05(月) 15:12:25.01ID:IQvMB0/c0
getopt.hを使わずに、オプション指定できるコマンドを何個か作ってみ。
そうすりゃgetopt()がどれだけ便利か身に染みて分かる。
と言うか、オプション処理の定型を知らないと使い方を理解しにくいね。
0685デフォルトの名無しさん (ワッチョイ 1319-y9+U)2016/09/05(月) 16:11:25.30ID:p8waCebS0
>>675
型Tのアラインメントはsizeof()じゃなくて_Alignof()!
0686デフォルトの名無しさん (ワッチョイ 63c1-I+Ar)2016/09/05(月) 16:37:42.40ID:KonAT/RP0
とりあえずlongオプションの方じゃなくて普通の方でなにか書いてみようかな
0687デフォルトの名無しさん (ワッチョイ b3dc-+jFW)2016/09/05(月) 17:17:10.14ID:IQvMB0/c0
>>685
おおっと、C11以降は _Alignof() が使えるのだな。不勉強であった。
そう言うことなら >>675 のマクロは古い規格での便法。それに加えて
「sizeof()で得られる値は必ずその型のアラインメントの倍数になる」
という、確実とは言えない仮定の上に成り立ってるね。

さらに、可変長部メンバ以外の容量が大きい構造体だと無駄も多くなるな。


>>678
確かに俺の環境でも、intの値が奇数番地に格納されるようにしても動いた。
でも >>680 の言う通り、格納番地によって動かないってCPUもある。
あと86系CPUだとアラインメント境界をまたいでると遅くなるんじゃなかったかな。
0688デフォルトの名無しさん (ワッチョイ efba-FA7T)2016/09/05(月) 18:21:17.42ID:OkFJMOsk0
x86 境界をまたぐとバスサイクルが二回に分割されるんで遅くなる
68k bus error(失笑
0689デフォルトの名無しさん (ドコグロ MMff-RETc)2016/09/05(月) 19:20:09.40ID:5F1Hp9JOM
>>688
> 68k bus error(失笑

Address Error だよ(失笑
0690デフォルトの名無しさん (JP 0H4f-pIcq)2016/09/05(月) 19:21:58.28ID:YWY0BgavH
コンパイラが十分賢ければそれで問題ない
0691デフォルトの名無しさん (ワッチョイ 8fc0-lvJd)2016/09/05(月) 21:53:54.20ID:Cn/U6jA70
>>678
86系はいいけど68系はダメ
あと出来ても遅くなるとかなんとか聞いたような気がしなくもない
0692デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/05(月) 22:00:41.92ID:XEmnjeGm0
明示的に最適化を禁止しないと、勝手にアラインメントを整えたり、構造体の大きさが4とか16とかの倍数なったりするんじゃないの?
0693デフォルトの名無しさん (ワッチョイ ef17-vIQC)2016/09/06(火) 01:53:09.90ID:ggKhBHmS0
>>665
通信系では普通に書くコードだよ
パケットなんかはこういう構造体でよく表す
一般的で別に珍しくないよ
0694デフォルトの名無しさん (ドコグロ MMaf-RETc)2016/09/06(火) 09:13:40.21ID:ASRetdO/M
>>692
最適化とアライメントは関係ない
0695デフォルトの名無しさん (ワッチョイ eb7b-iG4w)2016/09/06(火) 09:20:47.70ID:bgQCWsty0
>>694
スペースを優先する最適化もあるんだよ、ボーヤ
0696デフォルトの名無しさん (ワッチョイ efba-FA7T)2016/09/06(火) 10:26:16.46ID:6Lg2ZIDg0
>>689
あひゃ (∩∀∩)
0697デフォルトの名無しさん (ワッチョイ 0390-wh/5)2016/09/06(火) 20:59:50.77ID:+Td/3K9l0
>>694
うそぉん。86系だと、命令間にNOPが要れらりたり、スタックの区切が8バイトになるように整えられたり、するじゃん。
0698デフォルトの名無しさん (ワッチョイ 7742-wh/5)2016/09/06(火) 21:29:44.42ID:lMZiI53V0
>>697
>命令間にNOPが要れらりたり

これはないだろ
0699デフォルトの名無しさん (ワッチョイ ef17-wh/5)2016/09/06(火) 21:37:09.50ID:ggKhBHmS0
ジャンプ命令(分岐命令含む)とNOPは2つで1つ
0700デフォルトの名無しさん (ワッチョイ efba-FA7T)2016/09/06(火) 22:14:42.92ID:6Lg2ZIDg0
shみたいだな
v-tuneだとそんなことあるのかすぃら?
0701デフォルトの名無しさん (ワッチョイ 6b4e-RETc)2016/09/07(水) 07:28:49.74ID:EhymPaKF0
>>698
パイプライン効率化の為に、命令の実行順序入れ替わったりするから、ジャンプ命令とかでNOPが必要になる。
0702デフォルトの名無しさん (ワッチョイ b3dc-+jFW)2016/09/07(水) 07:31:11.01ID:9ei6Qh2k0
>>697-698
ちょいと手元のLinux環境で試してみた(GCC 4.8.2)。
適当なmain.cをデッチ上げて-O2オプション(速度最適化)の
有無を違えてアセンブラ用ソースを出力させる。
具体的には次のようなコマンド(上が最適化あり)。
$ gcc -O2 -S main.c
$ gcc -S main.c

生成されたアセンブラ用ソースmain.sを比較したところ、
-O2指定ありで出した方に疑似命令 .p2align 4,,15 ってのが
ループの開始点(飛び先)などの何ヶ所か挿入されているのが目についた。

GAS の疑似命令 .p2align の効果は、
「(2の第1引数乗)の倍数になるようロケーションカウンタを切り上げる」
というものらしい。
この場合は16バイト(2の4乗)に合わせるってこと。


最適化で命令の番地に関しても何か操作してるね。
「アラインメント」と呼ぶのか知らないけど。
0703デフォルトの名無しさん (ササクッテロ Sp8f-10NS)2016/09/07(水) 12:17:04.28ID:r09HpaM4p
それは境界合わせだからアラインメントだよ。
命令もメモリーから読むんだからアラインされているほうが効率が良いのは当然。

既出だけどアラインメントでないタイミング調整のNOP挿入なんかもある。
0704デフォルトの名無しさん (ワッチョイ 6b7b-k9cZ)2016/09/07(水) 20:08:49.04ID:ZdFSelEV0
gcc -Os(省サイズ方向の最適化)でコンパイルしたものをobjdumpしてみればいいよ
0705デフォルトの名無しさん (ドコグロ MM9f-RETc)2016/09/07(水) 20:40:02.12ID:2w88FCBzM
>>703
> タイミング調整のNOP挿入なんかもある。
そんなもんを勝手に入れるコンパイラなんて見たことないけど?
遅延スロットとかの話は最適化とはちょっと違うし
0706デフォルトの名無しさん (ワッチョイ b3dc-+jFW)2016/09/07(水) 20:58:16.27ID:9ei6Qh2k0
>>704
$ objdump -d main
で実行ファイルの逆アセンブルが表示されるんだね。

ジャンプの飛び先アドレスが奇数になったり2のべき乗になったり、
コンパイル条件によって変わるってことは確認できた。
が、それ以上のことはよく分からん。
0707デフォルトの名無しさん (ワッチョイ 3d90-tq+X)2016/09/10(土) 23:20:01.70ID:0ub2co9J0
構造体も勝手に最適されるしな。
レコード処理で、fwrite()とかfread()とか使うときすんげ困るでよ。
0708デフォルトの名無しさん (ワッチョイ 3d90-tq+X)2016/09/10(土) 23:26:37.78ID:0ub2co9J0
>>703
86系の新しめのプロセッサだと、パイプラインに放り込んで一度に実行できる命令数とか一度に放り込める命令長の合計とかに制限があって、
それを超える数とか長さだとパイプラインが数クロック停止するだろ。
そこでパイプラインに放り込める命令数とか命令長の合計とかを調整するためにNOPを放り込む。
NOPは、フェッチのバイト数は稼ぐけれど、いくつ並んでもパイプライン上の命令数は0だから、調整用に放り込むのにもってこい。
で、新しめのプロセッサ出すたびにパイプライン構造に最適化したコンパイラ持ってきて、新のは速いだろ、ってやるんよ。
0709デフォルトの名無しさん (ワッチョイ 98ff-Ai1A)2016/09/11(日) 14:43:54.87ID:sDjieMc30
そのためのパッキング指定では
0710デフォルトの名無しさん (ブーイモ MM28-tyZc)2016/09/11(日) 20:00:23.56ID:ire1gzjrM
マクロでコメントに置換する方法教えてくれ
#define A //
A int a;//コメントにしたい
ダメだった
グローバルなんでif(0)は無理
0711デフォルトの名無しさん (ガラプー KKb1-fLkO)2016/09/11(日) 20:08:11.43ID:RCWOBF9/K
ない
0712デフォルトの名無しさん (アウアウ Sa35-j70e)2016/09/11(日) 20:43:26.44ID:rN2Apxo9a
マクロもコメントもプリプロセスだからね。sedでも回すとか?
0713デフォルトの名無しさん (ワッチョイ c57b-1gdI)2016/09/11(日) 20:50:02.81ID:HriW58A50
少し違う
# if ...
#define A(x) x
# else
#define A(x)
# endif
0714デフォルトの名無しさん (ブーイモ MM28-tyZc)2016/09/11(日) 20:54:30.38ID:ire1gzjrM
A( int a;)は不格好なんよ
staticやexternのように書きたいんよ
0715デフォルトの名無しさん (ワッチョイ e63c-tq+X)2016/09/11(日) 20:57:33.35ID:pmFg7QLJ0
無いから2択 不格好で採用するか、あきらめるか
0716デフォルトの名無しさん (ワッチョイ c57b-GYKP)2016/09/11(日) 21:14:04.10ID:HriW58A50
これまた少し違う

#ifdef DEBUG
#define BEGIN_HAGE struct {
#define END_HAGE };
#else
#define BEGIN_HAGE
#define END_HAGE
#endif

BEGIN_HAGE
int a;
int b;
END_HAGE

コンパイラによっては警告出るが、文法的にエラーではない
0717デフォルトの名無しさん (ワッチョイ 3d3f-j70e)2016/09/11(日) 21:49:28.59ID:KJGBbNVD0
普通はIDEの機能を使う
0718デフォルトの名無しさん (ブーイモ MM28-tyZc)2016/09/11(日) 22:34:35.54ID:ire1gzjrM
m4でいくわw
0719デフォルトの名無しさん (ワッチョイ bc42-tq+X)2016/09/11(日) 22:38:28.81ID:NvSd/4YA0
>マクロでコメントに置換する

聞いただけでぞっとするけどな
素直にエディタの置換機能つかってコメントに書き換える方が後々読みやすいと思うぞ
一時的に無効にしたいなら、そういうやり方があるだろうし
0720デフォルトの名無しさん (ワッチョイ 6951-tq+X)2016/09/11(日) 22:38:30.94ID:GFeyLjq70
>>716
インラインじゃなくてブロックでいいなら普通に#if使うわな
0721デフォルトの名無しさん (ワッチョイ fb5b-j70e)2016/09/11(日) 22:45:48.09ID:buFT0Vxu0
デバッグ用を運用版では無効化したいとかそういう話じゃないのな
0722デフォルトの名無しさん (ブーイモ MM28-tyZc)2016/09/11(日) 23:29:53.38ID:ire1gzjrM
理由はだな
効率的なアセンブラに落ちないんで番地指定したいが
at(0x20) int a;
at(0x21) int b;
...こんなのを各地に散らばった変数にやると絶対ミスる=>grepで抜き出して一カ所にまとめればよくね?
=>EXTERN externみたいに切り替えられると便利だなあ
というので聞いてみたのです
m4で連番打てそうだからもうよいのです
0723デフォルトの名無しさん (ワッチョイ d017-XNJE)2016/09/11(日) 23:39:04.76ID:U0UqJ0080
#define A /##/
でいけるだろ。
0724デフォルトの名無しさん (ワッチョイ c617-tq+X)2016/09/11(日) 23:47:06.03ID:qOBSijlm0
プリコンパイラは便利すぎて逆にコードを難読化させるからイヤ
0725デフォルトの名無しさん (ワッチョイ a1dc-F415)2016/09/12(月) 06:29:24.00ID:RZJSFDKk0
>>723
#define /##/
ていう手法は GCC(4.8.2) だとダメみたい。

エラー: "/" と "/" を貼付けましたが正常な前処理トークンとなりません
error: pasting "/" and "/" does not give a valid preprocessing token
0726デフォルトの名無しさん (ワッチョイ 3d90-tq+X)2016/09/12(月) 11:21:02.66ID:3A1R7NRR0
コメント文のヤツはどんなことあっても置換禁止だろ
#define A //
はシンタックス的に
#define A
と
0727デフォルトの名無しさん (ワッチョイ a1dc-F415)2016/09/12(月) 17:09:44.52ID:RZJSFDKk0
あんまり深追いしても意味ないと思いつつ、少し調べた。
#define A /##/

Cのプリプロセスは、先に注釈部分を取り除いて(空白1字に置換して)
マクロの置換処理はその後に行われるらしい。
だから /##/ がマクロ置換の段階で // になっても、
その // はもう注釈と判断されないってことみたい。
0728デフォルトの名無しさん (アウアウ Sa35-j70e)2016/09/12(月) 18:08:35.05ID:+anZ94T1a
>>727
だったらプリプロセスで止めたコードをもう一度全体からコンパイルすれば行けるかもねw
0729デフォルトの名無しさん (アウアウ Sa35-yCFK)2016/09/12(月) 18:14:24.40ID:StNedFMna
grepコマンド作ってます。
本家同様の-v オプションの実装で
パターンにマッチしなかった行を表示させるようにしようと思ってnomatchを定義しオプションが-vオプションが有りの場合に
nomatch = 1とし
nomatchが1だった場合とそうでない場合で処理を分岐させています。

http://ideone.com/kx3bqq

nomatchが1ならマッチしない行、0ならマッチする行を表示させたいのですが、マッチしない行の処理の方が何故かマッチする行も含めてすべて表示してしまいます。regexecの戻り値はマッチすれば0、マッチしなければREG_NOMATCHと見たのですがなにか違いますでしょうか?
0730デフォルトの名無しさん (ワッチョイ fbe8-eyxN)2016/09/12(月) 21:05:09.63ID:a2mSPyGd0
話題がスレ全般と違いすぎるかもしれませんが、初めてプログラム板に来た今質問スレはここだと判断したのでその上で聞かせてください
C言語の構造体をやさしく学べる参考書はありますか?もしあるなら教えて頂けたらと思います
情報系学部の大学2年生ですが分野が構造体に入った2年生からC言語の授業が理解できなくなりました
後期からC言語構造体が使われる別個のプログラミング授業がいくつか始まります
0731デフォルトの名無しさん (アウアウ Sa35-j70e)2016/09/12(月) 21:08:49.23ID:UIRd2QyCa
独習CとはじめてのC
0732デフォルトの名無しさん (JP 0Hb1-YACI)2016/09/12(月) 21:13:26.32ID:y21Asc3iH
構造体はいくつかの変数をパックして名前をつけたもの
たぶん型定義と実体の区別がつかなくてこんがらがってるんだろうけど
0733デフォルトの名無しさん (ワッチョイ fbe8-eyxN)2016/09/12(月) 21:17:04.28ID:a2mSPyGd0
>>731
ネットで質問し参考書の名前を知れたのは初めてですありがとうございます!
>>732
正確に言うと構造体に関連するプログラム全ての物事が意味不明になったという感じで結局構造体そのものもあやふやな状態ですね
0734デフォルトの名無しさん (アウアウ Sa35-j70e)2016/09/12(月) 21:26:53.65ID:UIRd2QyCa
どんなんでも難しいのと簡単なのと一冊ずつ読めばいいと思うよ。
0735デフォルトの名無しさん (ワッチョイ c617-tq+X)2016/09/12(月) 22:05:41.91ID:U0T32XYU0
構造体が難しいとかw
0736デフォルトの名無しさん (アウアウ Sa35-j70e)2016/09/13(火) 00:18:20.84ID:+Sx2+CUYa
最初は構造体とポインタが理解しにくいかもね
0737デフォルトの名無しさん (スップ Sd28-j70e)2016/09/13(火) 00:24:29.07ID:NS2OOmywd
英語がわかるなら、はじめてのCは原著がいいよ
0738デフォルトの名無しさん (ワッチョイ fb6f-j70e)2016/09/13(火) 05:57:57.81ID:sslRt/dA0
原著とかないだろ
0739デフォルトの名無しさん (ワッチョイ a1dc-F415)2016/09/13(火) 06:39:36.43ID:by+Fe1430
>>729
リンク先の関数、というか条件判断の部分は合ってるように見えるけどなぁ。
nomatch == 0 の時はマッチする行だけが表示されるの?
「マッチしない行の処理の方が何故かマッチする行も含めてすべて表示してしまいます」
という症状からすると、逆にマッチする行の処理は何も表示されないと思うんだが。

regex_t *pat が正しく作られてないのかも知れない。
・regcomp() でエラーが返ってるのにチェックし忘れてる
・regcomp() の第2引数(正規表現文字列)を間違えてる
... "string" を見つけたくて第2引数に "/string/" を与えた、みたいな。
0740デフォルトの名無しさん (ワッチョイ 902c-tq+X)2016/09/13(火) 07:28:43.66ID:anFpbqKg0
アセンブラやると理解しやすい
0741デフォルトの名無しさん (スップ Sd28-j70e)2016/09/13(火) 08:16:33.39ID:hCVCJQHRd
>>738
プログラミング言語Cと間違ったのでスルーしてくれ
0742デフォルトの名無しさん (JP 0Hb1-YACI)2016/09/13(火) 09:31:45.09ID:GD/RUd4YH
>>730
データ型をユーザーが定義して使うというのが飲み込めてない
int とかをおまじないと思ってるとそうなる
0743デフォルトの名無しさん (ワッチョイ c5c1-yCFK)2016/09/13(火) 10:15:09.69ID:dzSXTRmG0
>>739
nomatch == 0つまり-vオプション無しだとマッチングする行だけ表示してくれます...
regcompの引数ですか。ちょっと確認してみます
0744デフォルトの名無しさん (ブーイモ MM28-tyZc)2016/09/13(火) 10:54:53.97ID:mQH4BUxsM
なんで条件が対照じゃないんだか
片方==0ならもう一方は=!0だろうに
どうせregexecでエラーコード返してるんだろうな
0745デフォルトの名無しさん (ワッチョイ a1dc-F415)2016/09/13(火) 12:54:35.91ID:by+Fe1430
>>743
nomatch == 0 の時は期待通りの動作をするのか。それは意外だ。
>>729 のリンク先が問題の部分を正確に引用してないのかな。

オプション-vを指定した時だけ、正規表現の指定がおかしくなるのかも。
例えば、引数文字列への配列添字orポインタを進め忘れて
regcomp() に正規表現パターンとして "-v" を渡してる、とか。
regcomp() を呼び出す直前で第2引数の文字列を表示してみるのはどうかな。
0746デフォルトの名無しさん (ワッチョイ 064f-tq+X)2016/09/13(火) 13:30:21.64ID:mhhZljw30
オプションの -v 処理は殺して
nomatch の値をハードコーディングで0と1の切り替えてどうなるか
0747デフォルトの名無しさん (ワッチョイ c57b-O/Pw)2016/09/13(火) 16:08:27.41ID:V3xaDSOQ0
>>729
常に9行目を通る = 常にREG_NOMATCHが返る = regexec()の引数(おそらくpat)に問題あり
0748デフォルトの名無しさん (JP 0H69-yCFK)2016/09/13(火) 17:29:35.18ID:24Z2YI/MH
皆さんの言うとおりでしたm(__)m
正規表現パターンでargv[1]を渡しており結果的に-vがパターンになってました。ありがとうございます。
0749デフォルトの名無しさん (アウアウ Sa1f-WB70)2016/09/15(木) 10:31:21.24ID:7D6BeU3Ua
コマンドの再実装をCで書いているときに以下のような事を学びました。
ファイルは実体にアクセスするのにシンボリックリンク、ハードリンクなどでリンクしているだけであり、ファイルを削除するとはその実体のリンクカウントが0になること。と学びましたUNIXシステムでrmコマンドをする場合実体とリンクしているファイル名を指定しunlinkをシステムコールしリンクを取り除くことで実質的にファイルが消えると。
質問ですが、リンクが存在する段階でファイルの実体を削除することは可能でしょうか?
0750デフォルトの名無しさん (ワッチョイ 9f7b-NmdU)2016/09/15(木) 11:25:08.19ID:Z5b3aQWV0
fsdbでclriすれば解放されるような気がするが、それは壊れたファイルシステムを作ることになる
0751デフォルトの名無しさん (ワッチョイ 177b-2wAQ)2016/09/15(木) 11:41:12.12ID:ql+kvaik0
ソースを消せるよ

ソースを消せば、シンボリックリンクがリンク切れになるだけ。参照できない

ハードリンクの場合は、参照カウントが1つ減る。
参照カウントが0になれば、実体も消える
0752デフォルトの名無しさん (JP 0H9f-nW2o)2016/09/15(木) 12:41:54.17ID:Dfv6m4lxH
普通の運用の範囲内で起きるかどうか 対策が必要かどうかって意味じゃないのん
0753デフォルトの名無しさん (アウアウ Sa1f-WB70)2016/09/15(木) 12:53:06.41ID:FsBKIRRHa
解凍ありがとうございます。
なるほど、そういうことも可能なんですね
コマンドを再実装するという手段とりながらC勉強している身なのですが、ファイルというものについて上記した内容を学んだときにただ単に気になって質問させていただきました。
0754デフォルトの名無しさん (ワッチョイ 8319-dKB2)2016/09/17(土) 11:37:39.80ID:Zm7q0cRh0
linuxでは一つのファイルに複数のファイル名を付けることができる。
ファイル名が全部消されるとファイル自体が消される。
0755デフォルトの名無しさん (ワッチョイ 1719-chWY)2016/09/17(土) 13:37:18.38ID:AAcR8VBu0
ttp://www.atmarkit.co.jp/ait/articles/1306/07/news111.html
Windowsでも2000からハードリンクとか出来るようになったけどね。
0756デフォルトの名無しさん (スッップ Sdbf-wJFc)2016/09/18(日) 14:34:01.52ID:yK2/oeZfd
そらPOSIX準拠させないと、一部の組織には絶対に使って貰えないからね
0757デフォルトの名無しさん (ワッチョイ 4790-wJFc)2016/09/18(日) 18:40:04.74ID:v7By9Mzd0
ショッカーは全てのアプリを、POSIX準拠で開発しているのである。
0758デフォルトの名無しさん (ワッチョイ f3a1-yzfI)2016/09/18(日) 22:05:53.34ID:F+IyRJ3h0
迫るショッカー 地獄の軍団
我等をねらう 黒い影
世界の平和を 守るため
ゴーゴー・レッツゴー 輝くマシン
0759デフォルトの名無しさん (ワッチョイ ef4e-wJFc)2016/09/19(月) 02:28:01.80ID:+zeUCF670
>>757
悪の組織は建設的なのに、正義の味方は破壊活動しかしない。
0760デフォルトの名無しさん (ワッチョイ 333c-7YKb)2016/09/19(月) 09:07:29.77ID:6DmadnKl0
初心者です.processingで,なぜか動画が表示されません..音だけきこえる状態です.

import processing.video.*;

Movie movie;

void setup(){
size(640, 360);
movie = new Movie(this,
0761デフォルトの名無しさん (ワッチョイ d33f-wJFc)2016/09/19(月) 10:24:57.19ID:MNI7W9ty0
C++っぽいけどそもそも言語と言うよりAPIの話なので、何のAPIか分からない以上答えようがない
0762デフォルトの名無しさん (ワッチョイ 177b-2wAQ)2016/09/19(月) 10:53:17.05ID:iIvzjj/t0
>movie = new Movie(this,
たぶん、" を使ったのか?

2chのバグで、書き込み確認画面が表示される際、
" があると、そこで文字列の終了とみなされる

\" とエスケープすれば、どうか?

proce55ing のことなら、以下のスレへ

proce55ing プログラミングアート全般
http://echo.2ch.net/test/read.cgi/tech/1186384753/l50
0763デフォルトの名無しさん (ワッチョイ d390-chWY)2016/09/20(火) 07:23:43.85ID:f5VXyBVp0
>>629
薄い本の即売会みたいな・・・・・・
0764デフォルトの名無しさん (ワッチョイ 8319-iU0R)2016/09/20(火) 19:47:23.81ID:mIYozdoF0
マクロにコードを埋め込むにはどうやりますか
例えば
#define abc(x)\
for(int i=0;i<100,++i){ x }

abc( 2行以上のコード );
とかやって上手くいきますか?
0765デフォルトの名無しさん (ドコグロ MM3f-wJFc)2016/09/20(火) 19:50:41.57ID:3dZ35Rz2M
うまくいきますかってやりゃいいだろうに
0766デフォルトの名無しさん (アウアウ Sa1f-wJFc)2016/09/20(火) 19:52:06.89ID:znGLWqkia
何十行もマクロで書いているのはよくある。行末の\は次の文字を打ち消すから、調べてみるといいよ。
君の書いたabcってマクロは引数が2つ以上にある時点でコンパイル通らないね。
0767デフォルトの名無しさん (ガラプー KK5f-Y+P+)2016/09/20(火) 20:02:26.52ID:aC9BpWa+K
>>764
C++11でラムダとテンプレートやれば幸せになれるかもしれない
0768デフォルトの名無しさん (JP 0H9f-nW2o)2016/09/20(火) 20:02:46.48ID:9l0NUqqbH
マクロは直感と違う振る舞いが起きてハマりやすいからなるべく使わない方がいい
0769デフォルトの名無しさん (ワッチョイ ef3c-chWY)2016/09/20(火) 20:05:05.57ID:zdbHvwVE0
,で連結して ()で1まとめに括れば、マクロ引数は1個扱いになる
けど、そんなキモイマクロは嫌だー
0770デフォルトの名無しさん (ワッチョイ bf13-J+BV)2016/09/20(火) 20:41:46.01ID:D6Mxtiz/0
>>769
君へのプレゼント
http://echo.2ch.net/test/read.cgi/tech/1434079972/16
0771デフォルトの名無しさん (ワッチョイ ef3c-chWY)2016/09/20(火) 20:46:57.49ID:zdbHvwVE0
>>770
#if での分岐?
for() との切り替えは強引だけど、まだ許容できる キモイまではいかない
0772デフォルトの名無しさん (ワッチョイ 6f9f-wcsI)2016/09/20(火) 20:52:29.47ID:bARwUQ8p0
gccとclangは可変引数マクロが使える


#include <stdio.h>
#define abc(...) for(int i=0;i<100;++i){ __VA_ARGS__ }

int main()
{
  int a=0,b=0;
  abc(
    for(int j=0;j<i;j++){
      a++;
    }
    b+=i;
  )
  printf("a=%d, b=%d\n", a,b);
  return 0;
}
0773デフォルトの名無しさん (ワッチョイ bf13-J+BV)2016/09/20(火) 20:56:35.57ID:D6Mxtiz/0
>>771
違う
三項演算子とカンマ演算子をフル活用しているところを見てくれ
0774デフォルトの名無しさん (ワッチョイ ef3c-chWY)2016/09/20(火) 21:07:00.93ID:zdbHvwVE0
>>773
うーーん 技巧的だけど、読めないわけじゃないし
初見でスルーしたぐらいだからキモイセンサーにかからなかったというところかな?
0775デフォルトの名無しさん (ワッチョイ bf13-J+BV)2016/09/20(火) 21:11:37.35ID:D6Mxtiz/0
そうか,キモいセンサーにかからなかったとは残念だ‥
0776デフォルトの名無しさん (ササクッテロ Sp1f-eXu6)2016/09/21(水) 00:10:45.17ID:h6Bx9Lrjp
>>764
マクロはdo-while文で書く
理由はググって

#define abc(x) \
do { \
処理 \
} while(0)
0777デフォルトの名無しさん (ワッチョイ 375b-eXu6)2016/09/21(水) 07:13:14.43ID:c8YoCAqF0
条件が定数だーとかワーニング出たりするから困る…
0778デフォルトの名無しさん (ワッチョイ 43dc-2Tg1)2016/09/21(水) 09:19:33.28ID:K2D2Rq8+0
>>772
議論の本質(>>764への答え)とはズレたツッコミで悪いが、
その例だとマクロの引数は長い1個の文字列だから
可変引数の効用が分かりにくいんじゃないかな。

確かに任意個数の引数を受け入れるマクロに、1個の引数を与えてるけど。
0779デフォルトの名無しさん (ワッチョイ d37b-NmdU)2016/09/21(水) 12:30:14.20ID:jVJXZoqq0
>>778
abc(return 0,1;)
とかで、引数の個数が不一致になる

あと10年ROMってろ
0780デフォルトの名無しさん (ワッチョイ 8319-iU0R)2016/09/21(水) 13:00:13.82ID:L+fawlXH0
_Genericのコロンの右側はセミコロン使えないし式もかっこで囲まないと
ダメなときあるし
マクロの変数の展開はルールが謎過ぎる
0781デフォルトの名無しさん (ワッチョイ d37b-NmdU)2016/09/21(水) 14:58:36.73ID:jVJXZoqq0
_Genericはマクロじゃないから
知ったかはやめたまえ
0782デフォルトの名無しさん (ワッチョイ 8319-iU0R)2016/09/21(水) 15:19:26.82ID:L+fawlXH0
  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;  _Genericはマクロじゃない・・・
  ヾ;;;ハ    ノ       .::!lリ;;r゙
   `Z;i   〈.,_..,.      ノ;;;;;;;;>  そんなふうに考えていた時期が
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f.   俺にもありました
   ~''戈ヽ   `二´    r'´:::. `!
0783778 (ワッチョイ 43dc-2Tg1)2016/09/21(水) 17:05:10.78ID:K2D2Rq8+0
>>779
うん、だからabc()の中にコンマを含むような例も
並べて出した方が趣旨が分かりやすくなるんじゃないかな、
と指摘させてもらったんだ。

極端にお粗末な読解力しか持たない人がいることを
考慮していなかった。その点はすまん。
0784デフォルトの名無しさん (ワッチョイ 83c9-wJFc)2016/09/21(水) 17:14:09.67ID:J1yww4nX0
>>783
その点「は」じゃねーんだよ
素直に間違いを認めろよ馬鹿
0785デフォルトの名無しさん (ガラプー KK9f-V2Ex)2016/09/21(水) 20:51:44.05ID:kmGXG9f/K
>>1
printfの第2引数はアドレス(ポインタ)をとってもいいんですよね?
0786デフォルトの名無しさん (ガラプー KK9f-Y+P+)2016/09/21(水) 21:02:40.29ID:w6mjKqw1K
>>785
%pを使えばね
0787デフォルトの名無しさん (ドコグロ MM3f-wJFc)2016/09/21(水) 22:04:09.99ID:/N0KVbCKM
%s もじゃね?
0788デフォルトの名無しさん (ワッチョイ d32e-mGWo)2016/09/21(水) 22:07:47.89ID:ArcRPClD0
初心者です
以下に書いたプログラムがVS上でdebug Errorを起こします
コメントアウトした部分を足すと正常に動くのですが
何故初期化を行わないと動かないかが知りたいです

http://ideone.com/fork/9RibLs
0789デフォルトの名無しさん (スッップ Sdbf-wJFc)2016/09/21(水) 22:29:15.60ID:hGatPHE6d
次スレからコード貼るサイトをテンプレに入れるのがいいのかな
0790デフォルトの名無しさん (ワッチョイ 4375-aQDp)2016/09/21(水) 23:29:42.84ID:Qu9Tr4mY0
>>786-787
%nを忘れているぞ
0791785 (ガラプー KKad-MBHu)2016/09/22(木) 01:55:43.49ID:AptHdH96K
>>786>>787
ありがとうございます。

そうなんです。
例えば俺の読んでる本に当たり前のようにprintf("%s", st);のような文が出ていて(char st[80];とかだとして)、stはポインタなのに、printfは(ポインタでない)変数とポインタどっちでも引数に取れるのか?と疑問に思ったわけです。
0792785 (ガラプー KKad-MBHu)2016/09/22(木) 02:04:03.52ID:AptHdH96K
>>790
ありがとうございます。
&がつくのでこれはもろアドレスですね。
0793デフォルトの名無しさん (ブーイモ MMb8-QT2J)2016/09/22(木) 02:06:29.45ID:qMPSDmlzM
>>788
みにくい。エラー内容も貼れよ
しゃーないから推測だが
・賢いコンパイラがアホなコードを検出してる
・関数呼び出し時にバッファオーバーフロー検知の番兵置けなくて失敗してる
・その他
のどれかじゃね
しかし最近のコンパイラは賢いねえ
0794デフォルトの名無しさん (ワッチョイ 80d2-xdvH)2016/09/22(木) 02:33:16.76ID:ouaoFEvr0
>>785
第一引数もポインタで良い
0795デフォルトの名無しさん (ワッチョイ 16c0-GI7U)2016/09/22(木) 05:30:24.78ID:gyLxLatL0
関数もポインタ
0796デフォルトの名無しさん (ワッチョイ 88e0-xjL4)2016/09/22(木) 10:55:36.36ID:VTYNl4uv0
>>788
初期化していない変数を使っているので、怒られているだけ。
不定の値の変数を関数に渡して何をしたいのか?
0797デフォルトの名無しさん (ワッチョイ 7e17-5q76)2016/09/22(木) 11:43:17.18ID:6Fmfg5kY0
>>796
コードから察するに初期化したいんだろうねきっと
でもポインタ渡しじゃなく値渡しで構造体渡してるから
全く意味のないコードになっているっていう

ただ関心なのが今のコンパイラ
不定値変数の使用をワーニングでなくてエラーにしちゃうのが偉い
あのコードならワーニングで動かすだけなら動きそうな気もするんだけどね
0798デフォルトの名無しさん (ワッチョイ be4f-5q76)2016/09/22(木) 12:02:50.62ID:xG07tIJj0
(デバッグビルドで) 未初期をランタイムでひっかけるのに
あえて 0xEE かなんかでフィルしてるのはあったけど

関数突入時に、値まで確認してたかはわからんなぁ
(意図してその値を代入し呼び出しているのと区別つけれるのか?)
0799デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/22(木) 12:12:35.46ID:/kVm/R5X0
debug Errorと言う申告がウソなんだろ
値渡しの引数は参照してないし、値返ししてるので問題無く動作する
0800デフォルトの名無しさん (ワッチョイ 1e4e-fewg)2016/09/22(木) 12:32:54.02ID:KlY7sbno0
この場合は未初期化で問題ないので、コンパイラは偉くないw
0801791 (ガラプー KK05-MBHu)2016/09/22(木) 12:58:28.36ID:AptHdH96K
>>794>>795
ありがとうございます。

>>795
?
0802デフォルトの名無しさん (ワッチョイ be4f-5q76)2016/09/22(木) 13:15:56.78ID:xG07tIJj0
コンパイル時の警告で 「未初期化の変数を参照してっけど?」 なら話はわかるが
警告であってエラーじゃないしなー
0803デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/22(木) 13:35:14.29ID:/kVm/R5X0
警告をエラーとみなすオプションがついてるんだろ
0804デフォルトの名無しさん (ワッチョイ 1c42-5q76)2016/09/22(木) 13:38:06.95ID:9VAfKpO40
構造体じゃなく、普通に値を返す関数に渡す未初期化の変数にも警告出るのかな?
0805デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/22(木) 13:46:41.99ID:/kVm/R5X0
ああ、値渡しだから関数呼び出す時に参照するのか
0806デフォルトの名無しさん (ワッチョイ be4f-5q76)2016/09/22(木) 14:12:00.58ID:xG07tIJj0
>>805
そそ
関数呼び出し部分の構文解釈で引数に値をつむときのタイミングでの警告

値の由来が未初期化の変数で不定値を渡すことが確定してるってケースだね
0807デフォルトの名無しさん (オッペケ Src9-xdvH)2016/09/22(木) 16:15:07.06ID:qDc3aW5Ur
>>801
関数もアドレス値がある。
0808デフォルトの名無しさん (スププ Sdb8-xdvH)2016/09/22(木) 21:40:26.64ID:hYBM8X5Zd
コンパイラなんですが
vs2015インストールエラーが出てどうしようもないから
苦Cの開発環境落としたんだけど
起動と同時にエラーが出ちゃう
どうしたらいいの?
0809デフォルトの名無しさん (ワッチョイ 7e85-5q76)2016/09/22(木) 21:48:48.70ID:Euqx97no0
他のスレでもそうなんだけど、なんでそういう時にエラーが出ただけで済ませてしまうのか。
そのエラーメッセージはどういう内容のものか、どうして書かないの?
0810デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/22(木) 22:13:19.58ID:/kVm/R5X0
エスパー探してるんだろ
0811デフォルトの名無しさん (ワッチョイ 979b-xdvH)2016/09/23(金) 01:33:40.34ID:5oRe2n110
案外管理者権限がなかったりしてな、その場合は持ち主に相談だ
0812デフォルトの名無しさん (アウアウ Sa61-xdvH)2016/09/23(金) 09:10:16.60ID:kEu041OHa
起動って何だよw
コンパイルなのかエディタなのか。OSは何か、.net入れてるか、エラーメッセージくらいは書こうぜ。
0813デフォルトの名無しさん (ドコグロ MMf6-xdvH)2016/09/23(金) 09:23:44.19ID:JdvpEzGGM
エスパーからの回答「それはエラーメッセージではないから「はい」を押しなさい」
0814デフォルトの名無しさん (アウアウ Sa61-xdvH)2016/09/23(金) 09:34:48.99ID:kEu041OHa
質問者:エスパーさんさすがっす!解決したっす
0815デフォルトの名無しさん (ワッチョイ dd19-+c6w)2016/09/24(土) 10:38:15.93ID:pO9K7HQu0
int a[]={1,2,3,..............,,INT_MAX};
のようなテーブルを作ってincludeするときのの限界サイズってありますか?
0816デフォルトの名無しさん (ワッチョイ 9f6f-9vrk)2016/09/24(土) 14:19:49.84ID:Qp3BxrXe0
何を訊いてるのかわからないが、ファイルサイズにしろ、実行形式でのセグメントの制約にしろ、
実行環境で割り当て可能なメモリの制約にしろ、限界はある
0817デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/24(土) 14:35:09.10ID:y4/Y2YH60
言語仕様上の制約はない
0818デフォルトの名無しさん (ワッチョイ 4090-xdvH)2016/09/24(土) 15:37:41.62ID:vBVe8HB40
>>817
メモリ上に置けても、配列としてはアクセス出来なくなるよね。
0819デフォルトの名無しさん (ワッチョイ 1c42-5q76)2016/09/24(土) 15:49:15.41ID:gfa422Kv0
includeの中に記述は出来るだろうけど
配列としてアクセス不可なものが
エラーならずにメモリ上に配置できるものなのか?
0820デフォルトの名無しさん (ワッチョイ be23-xdvH)2016/09/24(土) 16:41:48.76ID:g/gfVTwZ0
>>818
メモリ上におければアクセスできるんじゃ?
0821デフォルトの名無しさん (ワッチョイ 2ddc-c2t3)2016/09/24(土) 16:51:16.02ID:wtm5QT5x0
もちろんコンパイラ次第だろうけど...

例えばsize_tがintのtypedefだとすると、
(INT_MAX / sizeof(int)) より大きい配列インデクスは
オフセット計算でオーバフローする危険があるんじゃないかな。

対して初期値リストの方は、アセンブリ言語の
dw なり dd なりの疑似命令で初期値をベタに並べてく方式なら、
ロケーションカウンタがintのバイト数ずつ進むだけで
インデクスの溢れに関係なくデータの配置は可能かも。


初期値リストの要素数から配列のサイズを算出する時に
大きすぎることをチェックしてくれると思うけどね。
0822デフォルトの名無しさん (ワッチョイ b6b2-5q76)2016/09/24(土) 17:18:26.92ID:uXJinPvS0
VCで1Mオーバーの配列作ったときは大抵動作がおかしくなった。
16bit環境で64kオーバーの配列作ったらまともに動くことは期待できない。
0823デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/24(土) 17:59:58.68ID:y4/Y2YH60
>>818
意味がわからないか?

例えばCなら
5.2.4.1 Translation limits
に記述されてるものを言語仕様上の制約って言うんだよ
0824デフォルトの名無しさん (ワッチョイ 9f6f-9vrk)2016/09/24(土) 18:44:43.84ID:Qp3BxrXe0
それは制約というか、処理系が最低限満たさなければならない下限だよね
0825デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/24(土) 18:48:38.63ID:y4/Y2YH60
それを超えて記述してエラーになっても文句は言えない
0826デフォルトの名無しさん (ワッチョイ 1e3c-5q76)2016/09/24(土) 18:54:28.20ID:RUz2ytpq0
全く逆のことをそれぞれ言っているように見えるが
下限値(最低限これだけ入力できないとまずい) と 上限値(これ以上入力すると鼻から悪魔)
むずかしーねー
0827デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/24(土) 19:02:34.32ID:y4/Y2YH60
作る方と使う方の違い
0828デフォルトの名無しさん (ワッチョイ 1e3c-xdvH)2016/09/24(土) 21:22:23.11ID:TOidze/l0
>>825
>>823 を越えた上限を設定してる処理系もあるから
>>823 を越えたらエラーになってもいいと言うものでもない
0829デフォルトの名無しさん (スップ Sdc8-g4Gg)2016/09/25(日) 16:25:29.71ID:pnGomYLHd
C(C++)でお仕事されてるかたみえます?
0830デフォルトの名無しさん (ワッチョイ f1a1-cAys)2016/09/25(日) 19:14:23.21ID:vE+2UgZZ0
みえますよ。いい質問をしてくださいね
0831デフォルトの名無しさん (ワッチョイ 8448-rS6/)2016/09/25(日) 19:35:03.49ID:YPbWLNw50
おれにも見える
0832デフォルトの名無しさん (ガラプー KK1f-uhb+)2016/09/25(日) 19:48:10.47ID:YhIx3hsTK
口元にホクロがあるのが見える
0833デフォルトの名無しさん (ガラプー KK1f-uhb+)2016/09/25(日) 19:51:55.54ID:YhIx3hsTK
肌荒れがひどいね。毎日やさしく洗顔やってる?
0834デフォルトの名無しさん (ドコグロ MMf4-xdvH)2016/09/26(月) 22:38:33.97ID:h8LMN8J1M
見えるぞ、3日間徹夜で真っ赤な目をしながらキーボードを打つ >>829 の姿が!
0835デフォルトの名無しさん (ワッチョイ dd42-5q76)2016/09/27(火) 21:25:28.91ID:Gry6xj9+0
C/C++からJavaに移ったらクラッシュしたときにソースコードのどこでクラッシュしたとか、
そのメソッドの呼び出し元がルートまで全部表示されててぬるま湯すぎてワロタwww
これってほかの言語でもあるの?便利すぎてもうこれがない言語はやりたくないsっすw
C/C++だったらどこでクラッシュしたかを調べることから始めないといけないからな
Segmentation faultとか表示されて意味不明なアセンブラの羅列とか見せられても何の役にも立たねえよ
至る所にprintf入れて、ここのprintfは表示されてるけどここのprintfは表示されてない、
みたいなことを繰り返して特定していかないといけないだろ
そのうえメモリ破壊してたらビルドするたびにクラッシュ箇所が変わるからprintf作戦も使えないw
こんな原始的な言語を未だに使ってるやつは馬鹿。もっと早くjavaに移ればよかったw
0836デフォルトの名無しさん (ワッチョイ 16c0-GI7U)2016/09/27(火) 21:30:50.23ID:G7SFDpUA0
クラッシュダンプ見れば一発やないか
0837デフォルトの名無しさん (ワッチョイ dd42-5q76)2016/09/27(火) 21:41:34.45ID:Gry6xj9+0
ダンプを見るのが面倒
ダンプを見るぐらいならprintfを入れる
printfを入れるよりjavaのstack traceの方が楽

クラッシュした瞬間にクラッシュダンプ表示すればいいのに
0838デフォルトの名無しさん (ワッチョイ dd42-5q76)2016/09/27(火) 21:52:26.82ID:Gry6xj9+0
ある関数が呼ばれたときに、その関数の呼び出し元をルートまで全部表示する方法ってあるんですか?
C言語やってたときはgrepでその関数を呼んでる関数全部にprintf入れて〜みたいなことをやってたんですが。
0839デフォルトの名無しさん (ワッチョイ 1e3c-xdvH)2016/09/27(火) 22:07:34.89ID:3O+TtbVt0
>>835
質問ならまだしもくだらん独り言をマルチすんな、ボケ
http://echo.2ch.net/test/read.cgi/tech/1466119015/805
0840片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK1f-uhb+)2016/09/27(火) 22:13:47.40ID:/Yg2QTqOK
>>838
IDEでブレークポイントを設定してデバッグ実行し、呼び出し履歴を見る。
0841デフォルトの名無しさん (ワッチョイ d77b-FR2x)2016/09/27(火) 22:17:36.11ID:qi0BjMrp0
クラッシュしたところのスタックトレースぐらい表示できるだろ…
0842デフォルトの名無しさん (ドコグロ MM9c-xdvH)2016/09/27(火) 22:27:34.19ID:YwQFIgP+M
職業としてやってるなら驚愕ものだな
0843デフォルトの名無しさん (ワッチョイ dd42-5q76)2016/09/27(火) 22:29:27.58ID:Gry6xj9+0
呼び出し履歴かあ
ちょっと今VS2005でブレークポイントで止めるとこまでやってみたけど、
呼び出し履歴を表示する場所が分かんなかったなあ
てかC言語だと大体IDEじゃないっしょgccでvimな感じだから。
IDEにやり方が依存する感じじゃなくてこの関数一発呼んだら良い感じのやつないっすか
0844デフォルトの名無しさん (ワッチョイ dd42-5q76)2016/09/27(火) 22:31:27.58ID:Gry6xj9+0
あ、呼び出し履歴ありました!失礼。
0845片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK1f-uhb+)2016/09/27(火) 22:38:53.68ID:/Yg2QTqOK
IDE使わないならgdb
0846デフォルトの名無しさん (ワッチョイ dd42-5q76)2016/09/27(火) 22:41:55.33ID:Gry6xj9+0
やっぱり外部の力を借りないとできないんですね
関数一発読んだらprintfで標準出力にバーっと出る感じのやつが良いんですが
0847デフォルトの名無しさん (ワッチョイ dd42-5q76)2016/09/27(火) 22:50:09.12ID:Gry6xj9+0
大体ブレークポイントで止めないといけないのも面倒
マルチスレッドだったり大規模だったりすると止めた時点でおかしくなってて何の有益な情報も得られないことあるし、
release版とdebug版で挙動が変わるからrelease版でしかビルドしたら駄目みたいな現場もあったしな現実に。
0848片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK1f-uhb+)2016/09/27(火) 23:17:58.09ID:/Yg2QTqOK
ソフトウェアをモジュールという部品に分け、単体テストでモジュール単体のバグを
取り除いてから、結合テストする。
0849片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKad-uhb+)2016/09/27(火) 23:23:52.29ID:/Yg2QTqOK
もの作りにおいては、ダメな部品や、充分にテストされていない部品を使わないのが基本。
0850デフォルトの名無しさん (ワッチョイ 7e17-5q76)2016/09/28(水) 01:34:42.98ID:bD7g3hg30
>>846
デバッグ用のprintfマクロ作って、各関数の要所要所に埋め込む
開発中からこれを意識してコーディングするのがコツ
また最近だとTDDか
0851デフォルトの名無しさん (ワッチョイ ffda-xdvH)2016/09/28(水) 01:47:55.27ID:PHAa6N840
backtraceてのがlinuxにあるが
windowsで使えるかは知らん
0852デフォルトの名無しさん (ワッチョイ dd42-5q76)2016/09/28(水) 08:14:28.38ID:sIhnSU990
javaが最強でFAですね
0853デフォルトの名無しさん (アウアウ Sa61-xdvH)2016/09/28(水) 08:26:11.82ID:G14mJ7Lfa
用途や目的によるだろ。それが分からないなら好きな言語使えばいいだけ。
0854デフォルトの名無しさん (ワッチョイ 8f00-/imC)2016/09/28(水) 08:52:12.60ID:pvNRXOO30
C/C++からjavaを始めたらコアダンプがない事で途方にくれたけどな。
0855デフォルトの名無しさん (ワントンキン MM40-rS6/)2016/09/28(水) 14:03:37.66ID:stABDaO6M
Javaはパフォーマンス出ないからあんまり使わないな
0856デフォルトの名無しさん (スフッ Sdb8-aBDa)2016/09/28(水) 14:05:44.21ID:VHzhwvlEd
Javaはパフォーマンス出ないってマジ?
0857デフォルトの名無しさん (アウアウ Sa61-xdvH)2016/09/28(水) 17:26:02.54ID:G14mJ7Lfa
文字列の操作とかはJREのバージョンによって性能差がかなり出たことあるな。バージョンによって違いが出るのもjavaの弱みかもね
0858デフォルトの名無しさん (ワッチョイ d77b-FR2x)2016/09/28(水) 17:29:27.25ID:hiAJ49Og0
Javaのgcは中途半端で嫌いだな
finalizeに頼っちゃいけない所とか
0859デフォルトの名無しさん (ワッチョイ 1c42-5q76)2016/09/28(水) 17:31:23.38ID:8blg1fTj0
Javaがネイティブに動かせるCPUってどこか作らないの?
著作権に抵触するんか?
0860デフォルトの名無しさん (アウアウ Sa61-xdvH)2016/09/28(水) 17:36:04.87ID:G14mJ7Lfa
javaの命令セットは高級すぎてCPU作ってもソフトで処理しないといけない仕様になってる。gcもソフトで実装しなきゃいけない。
一時javaのコプロセッサが乗ったCPUが出てたけどあんま流行らなくて廃れた
0861デフォルトの名無しさん (ドコグロ MMf6-xdvH)2016/09/28(水) 17:47:40.58ID:RRT2bHx+M
ARMにJavaのバイナリーコードを実行できるとかいうのなかったっけ
0862デフォルトの名無しさん (アウアウ Sa61-xdvH)2016/09/28(水) 17:50:32.92ID:G14mJ7Lfa
バイトコードね。それが>>860の話ね。ARM9の頃。VMは自分で実装しなきゃいけない。
0863デフォルトの名無しさん (ワッチョイ 1e3c-xdvH)2016/09/28(水) 20:09:54.30ID:X231kNmm0
>>852
それでいいから巣に帰れよ
0864デフォルトの名無しさん (ワッチョイ 8f00-/imC)2016/09/28(水) 22:00:14.77ID:pvNRXOO30
>>861
https://en.wikipedia.org/wiki/Jazelle
0865デフォルトの名無しさん (ワッチョイ 994a-UBrL)2016/09/28(水) 22:43:03.93ID:5esYm+jc0
関数の引数に変数iだけ渡していたらムラムラしてきたんですが
どうすればいいですか?
0866デフォルトの名無しさん (ワッチョイ c1c1-OX4N)2016/09/28(水) 23:15:10.50ID:r1bayssd0
http://ideone.com/rP57yJ

こういう書き方でディレクトリ作成してもグループとその他に書き込み権限与えられないのですが無理でしょうか?
0867デフォルトの名無しさん (ワッチョイ 597b-aBDa)2016/09/28(水) 23:55:08.17ID:9r8yV77c0
umask
0868デフォルトの名無しさん (ワッチョイ 6f17-RPp1)2016/09/29(木) 01:35:14.33ID:4TiY9tFk0
>>866
ルートで実行してみるとか?
0869デフォルトの名無しさん (ワッチョイ 6bc1-S8iu)2016/09/29(木) 03:46:06.50ID:8JCVX6Xo0
質問なんですが。
下記の様な書き方でファイルのタイプを文字列リテラルとしてリターンしたいんですが
called object type 'int' is not a 〜
と起こられてしまいます
原因は

if (S_IFIFO(mode)) return "named pipe";

S_IFIFO(mode)の部分です。
以前Linuxで書いていた時はこの書き方で大丈夫だったようきがするのですがマクロが用意されているのではないんでしょうか?

mac el capitanで現在は書いています
0870デフォルトの名無しさん (ワッチョイ 6bc1-S8iu)2016/09/29(木) 03:58:46.40ID:8JCVX6Xo0
>>869
解決しました
S_IFIFO ×
S_ISFIFO ○
ですね。
man statとかで見てみてもS_ISFIFOという書き方に関連してそうな部分がないのですがこれは特殊な書き方なんでしょうか?
0871デフォルトの名無しさん (ワッチョイ 6f16-5C+Q)2016/09/29(木) 06:23:30.07ID:Szq1hZwE0
検索するとUNIX仕様書に出てくる
たぶんPOSIX準拠なんじゃね
0872デフォルトの名無しさん (ワッチョイ dbdc-6Qeh)2016/09/29(木) 07:40:18.95ID:i0zTb6880
man stat で stat(1) のmanを見てるのかも。
man 2 stat なら S_ISFIFO()マクロの説明が出てくるよ。

某時期某ディストリビューションのLinuxの場合だけど。
0873デフォルトの名無しさん (ワッチョイ 1f13-kUAU)2016/09/29(木) 19:32:52.16ID:XGa6uwRB0
Vine Linux が 6.2 からインストールできなくなったんだが,どこで相談すればいい?
0874デフォルトの名無しさん (ワッチョイ 4742-RPp1)2016/09/29(木) 19:43:07.36ID:zwKwfWKj0
http://hayabusa6.2ch.net/test/read.cgi/linux/1415270393/

アクティブかどうかは知らない
0875デフォルトの名無しさん (ワッチョイ 6f85-RPp1)2016/09/29(木) 19:43:59.11ID:ORJ83N1f0
プログラム板の2つうえにLinux板あるやん。そこで聞けよ
0876デフォルトの名無しさん (ワッチョイ 4742-RPp1)2016/09/29(木) 19:54:42.75ID:zwKwfWKj0
>>874
ここは落ちている様だ
0877デフォルトの名無しさん (ワッチョイ dbdc-6Qeh)2016/09/29(木) 20:03:49.73ID:i0zTb6880
PentiumMなどのPAE非搭載CPUでインストーラが動かない、
とかのパターンだと思うが、この板・スレッドで深追いする話題とは違うな。

Vine Linux Thread 其の67
http://hayabusa6.2ch.net/test/read.cgi/linux/1470582459/
あたりじゃないかな。
0878デフォルトの名無しさん (ワッチョイ 6bc1-S8iu)2016/09/29(木) 22:21:43.57ID:8JCVX6Xo0
>>872
ちゃんとman 2 でシステムコール読んだつもりだったのですが...もっかいちゃんとみてみます
0879デフォルトの名無しさん (ワッチョイ 1f11-bMpm)2016/09/30(金) 19:26:34.80ID:bCkWy8zt0
ファイルオープンでバイナリモードとかテキストモードとかのモードの指定があるのですが
正直何のためにあるのか分かりません。
バイナリモードよりテキストモードで書いたほうが人間に親切だと思うのですが・・。
0880デフォルトの名無しさん (ササクッテロ Spb7-LGiF)2016/09/30(金) 19:28:28.32ID:k6QPLsM1p
バイナリファイルのためです
0881デフォルトの名無しさん (ワッチョイ 1f11-bMpm)2016/09/30(金) 19:37:41.01ID:bCkWy8zt0
その理由じゃ納得できないです。
バイナリにすることで、第三者に読まれないようにすることが狙い?
0882デフォルトの名無しさん (ワッチョイ 9b42-RPp1)2016/09/30(金) 19:42:29.74ID:FkkRARY40
改行文字の扱いが変わるんじゃなかったかなあ
0883デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/09/30(金) 19:43:24.52ID:6eP7Gy330
>>879
MSのOSの時に意味を持つ
テキストモードだとCR+LFを行の区切りにする
0884片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 19:48:30.05ID:RzBZUGvmK
>>881
コンピューターから見るとバイナリーファイルの方が合理的。サイズ、速度などの点で。
バイナリーファイルを扱えないOSは汎用に使えない。すでにバイナリーファイルの読み書きはコンピューティングの基礎だから。
作りたいならテキストファイルしか扱えないOSでも作ればいい。性能も機能性も劣るものができるだろう。
0885デフォルトの名無しさん (ササクッテロ Spb7-LGiF)2016/09/30(金) 19:52:19.21ID:k6QPLsM1p
画像ファイルはテキストですか?
0886片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 19:52:34.77ID:RzBZUGvmK
バイナリー入出力がないと機械語を扱えない。
ほとんどの機械語はバイナリーデータだから。
0887デフォルトの名無しさん (ワッチョイ 1f11-bMpm)2016/09/30(金) 19:53:23.61ID:bCkWy8zt0
>>884
>コンピューターから見るとバイナリーファイルの方が合理的。サイズ、速度などの点で
勝手な想像ですが、たとえばテキストモードに指定してテキスト作成したとして、
テキストをメモリに読み込ませて開くときは、そのテキストはバイナリに変換してる?

もしそうなら、最初からバイナリモードに指定していれば、テキスト→バイナリに変換する手間がかからずに済むし、合理的で速くなる、でしょうか。
0888デフォルトの名無しさん (ワッチョイ 9b42-RPp1)2016/09/30(金) 19:53:49.87ID:FkkRARY40
画像フォーマットというルールに沿って書かれたテキストファイルだと主張したっていいのではないか
0889片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 19:54:52.12ID:RzBZUGvmK
>>885
昔はテキスト形式の画像データも使われていた。でもバイナリの方がサイズが小さくなってダウンロードが早いだろ。
0890片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 19:57:29.70ID:RzBZUGvmK
>>887
CPUもメモリーのアドレス空間もバイナリーデータの世界だ。
0891片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 20:02:48.38ID:RzBZUGvmK
>>887
広義ではテキストデータもバイナリデータに含まれる。バイナリデータの一部をテキストデータと呼んでいるだけだ。
0892デフォルトの名無しさん (ワッチョイ 1f11-bMpm)2016/09/30(金) 20:03:27.06ID:bCkWy8zt0
テキスト=>CPU、メモリのアドレス空間がバイナリーなので、そのままでは渡せない。
バイナリ=>そのまま渡せる

区切りの違いとか細かい部分があるけど、上記のが大きいですね
0893デフォルトの名無しさん (ワッチョイ cfb2-RPp1)2016/09/30(金) 20:06:08.19ID:+APoq1FD0
>879
コンピュータに不親切なやつだな。
0894デフォルトの名無しさん (ワッチョイ 1f13-kUAU)2016/09/30(金) 20:11:21.98ID:wZVscf4Q0
テキストモードって,Micro Soft の OS と UNIX 系との間で改行をどうするかが違うってだけでしょう?
0895片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 20:14:47.86ID:RzBZUGvmK
テキストファイルをさまざまなOSで交換するとき、色々な問題が発生した。
第一は改行コードの違いだ。MS-DOSやWindowsでは改行は"\r\n"で出力する。古いタイプのMacでは"\r"で、UNIX/Linuxでは"\n"だった。
この違いを吸収するためにMS-DOSやWindowsのC言語ではテキストモードという特別なモードがある。
テキストモードでは"\r\n"を"\n"と見なす。改行コードが1文字の制御文字になるのは扱いやすい。
0896片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 20:22:27.80ID:RzBZUGvmK
第二に文字の符号化(エンコーディング)の問題だ。
日本語にはシフトJIS,EUC-JP,JISなど、さまざまな文字セットが存在する。
日本語MS-DOSではシフトJISが使われていて、古いタイプのUNIX/LinuxではEUC-JPが使われていた。また、日本語のメール送信ではJISを使っていた。
現在ではテキストデータはASCIIとUnicode(UTF-8を含む)が標準になっている。
0897片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 20:33:49.22ID:RzBZUGvmK
Windows内部のテキストデータには主にUTF-16が使われている。言い換えれば、
UTF-16ではないテキストデータをWindows内部で扱うためにはUTF-16への変換が必要かも知れない。
0898デフォルトの名無しさん (ワッチョイ 9b42-RPp1)2016/09/30(金) 20:39:54.40ID:FkkRARY40
このスレこんなに人がいたんか
0899片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 20:47:15.92ID:RzBZUGvmK
具体的に見ていこう。
#include <stdio.h>
int main(void)
{
FILE *fp = fopen("a.txt", "w");
fprintf(fp, "\n");
fclose(fp);
return 0;
}
この八行のプログラムはファイル「a.txt」に1個の改行コードを出力する。
Windowsの場合、出力の際に1個の改行コードは"\r\n" (CR LF)に変換されるので、a.txtをバイナリーエディターで開くと、
ファイルサイズは2バイトになるだろう。
0900片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 20:53:16.11ID:RzBZUGvmK
バイナリーファイルをメモ帳で読み込んでも読みづらいし、正しく書き込めないかも知れない。
バイナリーファイルを扱うプログラムを作るなら、バイナリーエディターは必需品。必ずインストールしておこう。
0901デフォルトの名無しさん (ワッチョイ 4742-RPp1)2016/09/30(金) 21:03:30.21ID:mDXbguo80
>>898
答えやすい質問だと、回答者が一杯出てくるのはいつものこと
0902片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 21:06:42.05ID:RzBZUGvmK
バイナリーエディターは、テキストファイルも開ける。
テキストファイルはバイナリーファイルのサブセットだから。
バイナリーのイメージはちょうどバイナリーエディターで表示されるように考えればよい。
バイナリーデータはバイトの並びであり、バイナリーの1バイトは2桁の16進数で表示するのが合理的である。
0903片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 21:20:07.22ID:RzBZUGvmK
WindowsのバイナリーエディターはBZかStirlingをオススメする。
0904デフォルトの名無しさん (ワッチョイ cffa-rhIY)2016/09/30(金) 21:50:31.82ID:IRw86IfD0
>>879
納得できる答えは得られたかい?
納得できてないなら fgets 関数を使ってファイルをコピーするプログラムを書いてみてくれたまえ。
大体こんな感じになると思う。

#include <stdio.h>
int main( int argc,char **argv)
{
char buf[256];
while ( fgets( buf,sizeof buf,stdin)){ fputs( buf,stdout); }
return 0;
}

そのプログラムで適当な JPEG ファイルをコピーして元のファイルと比べてみよう。
それがバイナリモードとテキストモードの違いだ。
0905デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/09/30(金) 21:54:13.95ID:6eP7Gy330
>>904
こいつアホ
0906デフォルトの名無しさん (オッペケ Srb7-rzru)2016/09/30(金) 22:16:40.31ID:Wzx/nmaxr
バイナリだと、モデムでダウンロード出来ない
0907デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/09/30(金) 22:25:10.96ID:6eP7Gy330
>>906
こいつも最高にあほ
0908デフォルトの名無しさん (ドコグロ MMef-rzru)2016/09/30(金) 22:39:53.84ID:pIKGtmPSM
>>906
ish かよっ!
0909片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 22:40:08.06ID:RzBZUGvmK
MSテキストモードで……
"\r\n"の入力 ⇒ "\n"になる。
"\n"の出力 ⇒ "\r\n"になる。
0910デフォルトの名無しさん (ワッチョイ ef3c-RPp1)2016/09/30(金) 22:54:07.70ID:aybJ7PyR0
テキストモーで 0x1a(^Z) 来たときにそこをファイル終端扱いにするってあったっけ?

何かと勘違いしている可能性はあるので自信はない
0911片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)2016/09/30(金) 23:28:45.46ID:RzBZUGvmK
MSテキストモードでは、入力時の^Zはファイル終端として解釈してもいいことになっている。
ファイルの終わりでCtrl+Zを押してたMS-DOSのなごり。現在ではゴミ文字になるのであまり使わない。getcharでEOFが返るときだろう。
0912デフォルトの名無しさん (ワッチョイ 1f11-bMpm)2016/09/30(金) 23:46:53.20ID:bCkWy8zt0
バイナリあれば十分だとわかればテキストいらなくねと思う。
C初心者がファイルオープンに関する概念を習得する過程でまずはテキストからっていうなら分かるけど
理由としては弱いな
0913デフォルトの名無しさん (ササクッテロ Spb7-LGiF)2016/10/01(土) 00:03:10.98ID:4GbhNNOQp
>>912
低レベルな質問して総評書くとか、、
0914デフォルトの名無しさん (ワッチョイ 1f11-bMpm)2016/10/01(土) 00:07:01.05ID:/yOWYQHR0
>>913
低レベルの意味が分からない。初心者が尋ねる内容としてはありだと思います。
0915デフォルトの名無しさん (ワッチョイ cfb2-RPp1)2016/10/01(土) 00:22:41.37ID:1Bkws7l90
SJISからの字化けリスクが…。
0916デフォルトの名無しさん (ワッチョイ 477b-eUFH)2016/10/01(土) 00:53:18.04ID:onRosRXh0
>>910-911
Linuxの端末で、Windowsのファイルを開くと、

最後に、^Z が付いていることがある
0917片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK57-/8Mt)2016/10/01(土) 01:01:06.84ID:Ja0BXeArK
>>916
何のファイル?
0918デフォルトの名無しさん (ワッチョイ 6748-Xr8z)2016/10/01(土) 01:50:17.10ID:VDtQernM0
バイナリモードで転送したんじゃない?
0919デフォルトの名無しさん (ワッチョイ 436f-rzru)2016/10/01(土) 02:40:50.66ID:QVoTLY8k0
>>912
テキストモードかバイナリーモードか気にしなきゃならんのってWindows環境ぐらいでは
Unixライクな環境だと要らん苦労だ
0920デフォルトの名無しさん (ワッチョイ 4fe1-rzru)2016/10/01(土) 02:42:03.96ID:tNbhSEQ70
>>912
C言語で扱えるテキストファイルと、OS(などの環境)のテキストファイルの実装の差を埋めるのがテキストモード
UnixではCのテキストファイルの扱いとOSのテキストファイルの扱いは同じなのでバイナリモードと完全に同じ
WindowsではCは改行が\n、OSでは\n\rなのでその差を埋める
他のOSではバイナリモードとテキストモードは全く別の結果になっても仕様的には問題ないはず(たぶん)
0921デフォルトの名無しさん (ワッチョイ 6bc1-S8iu)2016/10/01(土) 07:40:40.69ID:+E5H4WMH0
ディレクトリパスを入力したらそれを頂点としてトラバースしファイルをすべて表示するプログラムを書きました。

テスト用として
test
test/a.txt
test/b.txt
test/c.txt

という環境を作り test をパスとし与えてみました。testへストリームをオープンしwhileでファイルをエントリーしtest/a.txt と連結後それがファイルなのかディレクトリなのかを判定、ディレクトリなら掘っていきファイルならパスを表示します。判定するときにstatを使っているのですが何故か-1が帰って来て失敗してしまいます。lldbでその時点でのパスを見ると

(lldb) print pathbuf->ptr
(char *) $1 = 0x0000000100100280 "test/a.txt"
(lldb)

"test/a.txt"となっていてこれでstatでエラーが帰って来てしまう理由がイマイチわかりません。考えられるエラーはどんなものがありますか?

プログラム全文はこちらになります
http://ideone.com/LbAxDX
0922デフォルトの名無しさん (ワッチョイ 1f13-kUAU)2016/10/01(土) 07:56:48.22ID:pmson4Rg0
>>921
環境(OS, コンパイラ)は?
0923デフォルトの名無しさん (ワッチョイ ef3c-RPp1)2016/10/01(土) 08:08:27.61ID:v8iMmJLi0
stat に渡して確認するのは ent->d_name じゃなく
連結した pathbuf->ptr じゃないの?
0924デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/01(土) 09:48:55.00ID:mCe+YKjm0
>>901
そして>>904のような知ったかぶりして、大恥晒す道化が現れるのもいつもの事
0925デフォルトの名無しさん (ワッチョイ 436f-rzru)2016/10/01(土) 12:38:23.90ID:QVoTLY8k0
>>921
まずerrno。話はそれからだ
0926デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/01(土) 13:00:52.82ID:mCe+YKjm0
>>921
いろいろと突っ込みどころが多過ぎる
28: strcpyじゃなきゃダメ
53: >>923の指摘どおり
traverse: readdirが成功するたび、それまでを全部連結する
0927デフォルトの名無しさん (アウアウ Sa77-S8iu)2016/10/01(土) 13:53:20.86ID:xFpyNc7Ma
>>921です。
なるほど、pathbuf->ptr渡さないとダメですね。煮詰まるとなんも見えなくなるなあプログラマーは向いてないのかもしれないw
>>926
初期はstrcpyでなければならないのですか。領域だけ確保した空間に最初に文字列入れる場合にstrcpyとstrcatどう違うのでしょうか?一見strcatでもその後うまく連結出来ている様に見えるのですが
0928デフォルトの名無しさん (アウアウ Sa77-S8iu)2016/10/01(土) 13:55:06.08ID:xFpyNc7Ma
>>922
OS X el capitan
gcc
です
0929デフォルトの名無しさん (ワッチョイ ef3c-RPp1)2016/10/01(土) 14:08:28.85ID:v8iMmJLi0
path_default 通って確保される領域は malloc されただけなので、その先の内容は不定
0 でフィルされているわけでもないし *pathbuf->ptr = '\0'; と初期値を入れてもいないので

そういう不定な(もしかしたら文字列にもなっていない)ところ相手に strcat はうまい方法じゃない
0930デフォルトの名無しさん (ワッチョイ 6f16-5C+Q)2016/10/01(土) 15:59:44.48ID:1EpVFvvF0
ファイルシステムにはファイル名の最大長が決められていることが
多いので決め打ちできればmalloc/realloc使わずに済みそう
0931デフォルトの名無しさん (ワッチョイ 6f16-5C+Q)2016/10/01(土) 16:03:37.11ID:1EpVFvvF0
あ、ファイル名じゃなくてパス名
0932デフォルトの名無しさん (ワッチョイ a37b-T4vf)2016/10/01(土) 19:42:16.51ID:cvsJ/xEf0
>>930
そんな環境アップデートとかした途端に動かなくなったということが頻発しそうな事を推奨するな
0933デフォルトの名無しさん (ワッチョイ 436f-rzru)2016/10/01(土) 21:33:11.09ID:QVoTLY8k0
Cだとimits.hのPATH_MAXを使うのは普通
0934デフォルトの名無しさん (ワッチョイ a37b-T4vf)2016/10/01(土) 21:43:10.89ID:cvsJ/xEf0
>>933
それ定数とは限らないから
0935デフォルトの名無しさん (ワッチョイ 436f-rzru)2016/10/01(土) 21:54:22.80ID:QVoTLY8k0
>>934
え?まじで?
0936デフォルトの名無しさん (アウアウ Sa77-rzru)2016/10/01(土) 22:07:58.74ID:itsx8YHia
んなこと言ったらそもそもPATH_MAXは標準じゃないんだから
そんなシンボルがあるかどうかすら分からない
0937デフォルトの名無しさん (ワッチョイ cfb2-RPp1)2016/10/01(土) 22:29:30.10ID:1Bkws7l90
やっぱりCってめんどくさい…
0938デフォルトの名無しさん (ワッチョイ 9b42-RPp1)2016/10/01(土) 22:37:51.95ID:KRACKnl00
javaやろうぜ。androidの世界シェア87.6%やぜ
ttp://www.idc.com/prodserv/smartphone-os-market-share.jsp
0939デフォルトの名無しさん (ワッチョイ a37b-T4vf)2016/10/01(土) 22:51:30.75ID:cvsJ/xEf0
>>935
ググったら解るけどposixの仕様で定数である必要ないって決められてる
0940デフォルトの名無しさん (ワッチョイ 4b42-yE+Y)2016/10/01(土) 23:15:30.57ID:VMBRmgxd0
PATH_MAX自体はdefineで定義される定数だろ。
環境、コンパイラで値は違う可能性はあるとしても。
0941デフォルトの名無しさん (ワッチョイ a37b-T4vf)2016/10/01(土) 23:47:51.61ID:cvsJ/xEf0
>>940
ググれば解るけどって書いたんだけどな
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/realpath.3.html
0942デフォルトの名無しさん (ワッチョイ 435b-rzru)2016/10/01(土) 23:59:12.71ID:wIu9CS3S0
>>941
環境依存の定数やん
0943デフォルトの名無しさん (ワッチョイ a37b-T4vf)2016/10/02(日) 00:04:16.11ID:4LOtpf4Z0
>>942
日本語読めないの?
http://man7.org/linux/man-pages/man3/realpath.3.html
According to POSIX.1-2001 a buffer of
size PATH_MAX suffices, but PATH_MAX need not be a defined constant,
and may have to be obtained using pathconf(3).
0944デフォルトの名無しさん (ワッチョイ 6f17-RPp1)2016/10/02(日) 00:07:05.34ID:uh5KUtrn0
英語だろ
0945デフォルトの名無しさん (ワッチョイ 9b3a-QEBp)2016/10/02(日) 00:07:12.84ID:3hM0m+Ns0
まんまんみてちんちんおっき
0946デフォルトの名無しさん (ワッチョイ a37b-T4vf)2016/10/02(日) 00:09:03.59ID:4LOtpf4Z0
>>944
日本語のページ貼っても読めてないみたいだから英語のページ貼ってあげたんだよ
0947デフォルトの名無しさん (ドコグロ MM27-rzru)2016/10/03(月) 11:02:21.21ID:nbbH7poSM
>>943
その文章は意図が分からないな。
pathconf()はファイルパスを引数にするから
PATH_MAXをpathconf()で実装することはできないよね。

POSIX.1-2001は #define された定数なのかは明確でないけど、
POSIX.1-2008では #if の引数に使えるとあるから、
PATH_MAXも定数でいいと思う。

一応、以下からの推定

↓POSIX.1 2001相当?
http://www.unix.com/man-page/posix/0p/limits.h/
↓POSIX.1 2008相当?
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html
0948デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/03(月) 11:15:16.14ID:+w+RrJJk0
>>947
キミは本当に頭が悪いな
0949デフォルトの名無しさん (ブーイモ MM8f-SJFH)2016/10/03(月) 13:26:48.91ID:eqtJ8nudM
>>948
オツムいいレスよろ
(無理だろうけど。この手のハゲほんと増えた)
0950デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/03(月) 14:58:03.11ID:+w+RrJJk0
>>949
pathに何を渡して何が返ってくるか理解できれば自明なんだが、
ドキュメント読んでそれが理解できないのならば、説明しても理解できないだろう
だから、頭が悪いと評した
0951デフォルトの名無しさん (ワントンキン MMcf-Xr8z)2016/10/03(月) 15:13:44.36ID:glBy70iHM
話が噛み合ってなさそうね
0952デフォルトの名無しさん (ワッチョイ 6f4f-RPp1)2016/10/03(月) 16:08:29.48ID:AhgtfWPz0
コンパイル時と ランタイム時で異なるかもしれんぞ
だから fpathconf() や pathconf() sysconf() 使え (MAY) って後者の URL にはあるな

※
#if 云々は defined や #ifdef で
そのシンボルの有無を引っ掛けられるかどうかだけの話のようにも見受けられる
0953デフォルトの名無しさん (ブーイモ MM8f-SJFH)2016/10/03(月) 16:56:23.92ID:BUv5p7YEM
16ビットのバイナリーを32ビットマシンに持って行ってもまー動かんだろうけど
「INT_Maxは定数じゃないから」といって納得できるかだね
センスかおつむか
0954デフォルトの名無しさん (ワッチョイ 6f4f-RPp1)2016/10/03(月) 17:31:36.35ID:AhgtfWPz0
もう一つ (メモリが許す限り)無制限というのもあるのか
それを定数で示すのは(負数で表現可能だけど)、固定長の配列の大きさに使える代物ではないねー
0955デフォルトの名無しさん (ガラプー KK57-tskY)2016/10/03(月) 18:45:37.53ID:wsgQIWyCK
byte a[]={1,2,3,4};
int i=0;
質問です
iを1234にしたい(4つのバイトを1つにしたい)のですがどうすればいいですか?
よろしくお願いしますm(__)m
0956デフォルトの名無しさん (ガラプー KK57-tskY)2016/10/03(月) 19:03:55.92ID:wsgQIWyCK
問題解決しました
どうもお騒がせしました
0957デフォルトの名無しさん (ブーイモ MM8f-SJFH)2016/10/03(月) 19:10:06.22ID:BUv5p7YEM
なんというもゃもゃ感
union使う宿題なんだろうけど
0958デフォルトの名無しさん (ワッチョイ 4f6c-RPp1)2016/10/03(月) 19:13:36.24ID:z5jNWLnu0
union なんて必要か?
0959デフォルトの名無しさん (ドコグロ MM27-rzru)2016/10/03(月) 20:17:16.68ID:pYvbesSaM
0x1234じゃないのかな?
0960デフォルトの名無しさん (ワッチョイ 1b4e-dvmP)2016/10/03(月) 20:24:25.15ID:jCeU1cEO0
i=1*1000+2*100+3*10+4
0961デフォルトの名無しさん (ワッチョイ cfb2-RPp1)2016/10/03(月) 21:33:26.05ID:zpikSIMA0
>958
無くても問題無いけど使ってみると気持ちいい。
0962デフォルトの名無しさん (ワッチョイ a37b-T4vf)2016/10/04(火) 00:18:29.26ID:oog1epo10
>>961
その問題解くのにunionなんて必要か?って意味だろ
もう少し流れ読む力付けような
0963デフォルトの名無しさん (ワッチョイ 6bc1-6msj)2016/10/04(火) 03:58:21.88ID:2Im1Jmi+0
質問ですforkの利用方法がイマイチわかりません。

色々調べてみたのですが、pid = fork() 戻り値が
子プロセスでは0、親ではプロセスのIDと戻り値が2つある?のもなかなか
イメージがわきません。
pid = fork();
if(pid == 0){ puts(“child”); } //子
else{ puts(“parent”); } //親
みたいな例題ページはたくさんあるのですが出力結果みても
関数使うのと何が違うのかよくわかりません。
親子に分かれてプロセスが同時に進む感じをイメージすると例えば
int main(void){
child();
parent();
}
void child(){
puts(“child”);
}
void parent(){
puts(“parent”);
}
のchildとparent関数が同時に動くみたいなイメージですか?

同時に動いてどちらが先に終了するのかわからない
親が先に終了してしまうと子がゾンビになってしまうので
同時に処理はするがwait()を使って先に終了するのは子にする
という感じで良いんでしょうか?
0964デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/04(火) 04:46:54.55ID:6mv8IhAQ0
親が先に死ぬとinitに養子縁組されて、initに看取られる
0965デフォルトの名無しさん (ワッチョイ dbdc-6Qeh)2016/10/04(火) 05:58:50.98ID:6yvYs8Le0
>>963
まずfork()で分身を作って…
子プロセス側はexec系の関数を呼んで別の外部プログラムに変身。
親プロセス側は子プロセスの外部プログラムが動く間、単純に待つか、
または子プロセスと別の作業を同時進行で行う。

こんな使い方が多いんじゃないかな。
fork()だけで考えるとイメージが湧きにくいかも。


ウェブサービスのプログラムみたいに、親プロセスは依頼を待ち受けて
依頼が届く度にfork()して子プロセスに処理を丸投げ、
親プロセスはすぐに依頼待ちの状態に戻る。
それぞれの依頼は互いに並行に処理される。
というモデルもあるけど、どちらが分かりやすいかな。
0966デフォルトの名無しさん (ドコグロ MMef-rzru)2016/10/04(火) 06:41:02.76ID:2AWlMUg/M
そもそも >>957 は union 使えって言ってるわけでもないからむしろ流れが読めてないのは >>958 と >>962 の方だろ
0967デフォルトの名無しさん (ドコグロ MMef-rzru)2016/10/04(火) 06:50:44.79ID:2AWlMUg/M
>>963
fork( ) を呼び出した時にプロセスがコピーされてもうひとつプロセス(=子プロセス)が作られる
呼び出した側のプロセス(=親プロセス)には戻り値として作られたもうひとつのプロセス Id が返される
子プロセスは同じコードを実行するけど fork( ) の戻り値として 0 が返されるという仕組み
0968デフォルトの名無しさん (ワッチョイ 1f13-kUAU)2016/10/04(火) 07:02:17.79ID:BzUotdG20
>>963
fork() はネットワーク関連やシェルを自作するときに使う
0969デフォルトの名無しさん (ワッチョイ 477b-eUFH)2016/10/04(火) 07:06:09.14ID:MLgwtfwZ0
fork()では、子プロセスの管理情報だけを作る。
この時点では、まだ、子プロセスのメモリを確保していない

次の、execve()で、子プロセスのメモリを確保する

各プロセスは、プロセススケジューラによって、
0.1秒毎? などで、強制的に切り替えられるので、
どのプロセスがいつ動いているかは、分からない

端末からコマンド(子プロセス)を起動して、端末(親)を終了させると、
起動されたコマンド(子)は、すべて強制終了させられる

それが嫌なら、端末と親子関係を切って、直接initの子にする。
デーモン(サービス)化

Linuxエンジニア養成読本、第3版、2016 を読めばいい
0970デフォルトの名無しさん (ワッチョイ ef3c-RPp1)2016/10/04(火) 07:11:42.33ID:ierS0lm90
fork() まで進む
 親: 自分と同じ実行ファイルを起動して 戻り値をプロセスIDに

..... 親から作られた子の実行で コード中 fork() まで進む
 自分は子なので 戻り値を0 に

同一コードで 親も子も動かす (そして fork() の戻りがくるまで、自分が親なのか子なのかしる手段が・・・)
0971デフォルトの名無しさん (ドコグロ MMef-rzru)2016/10/04(火) 07:27:55.34ID:2AWlMUg/M
>>969
知ったかぶって嘘書くなよ...

> 次の、execve()で、子プロセスのメモリを確保する

常に exec* を呼ぶ訳じゃないのに何を言ってるんだよ
そもそもメモリー確保タイミングは実装で異なるし

> 起動されたコマンド(子)は、すべて強制終了させられる

SIGHUP シグナルが送られるだけ
終了するかどうかはプロセス次第
0972デフォルトの名無しさん (ワッチョイ 477b-eUFH)2016/10/04(火) 08:04:17.20ID:MLgwtfwZ0
>>963
子プロセスがゾンビになると、親プロセスはすでに存在しないので、
その代わりに親がinitになる

ところが、initでは、子プロセス終了時の返り値を、どう扱えばよいのか、
捨ててよいのかどうか分からないため、プロセス一覧表にゾンビがたまっていく

それがうっとおしいので、ちょくちょくゾンビを削除する必要がある
0973デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/04(火) 08:38:49.06ID:6mv8IhAQ0
>>972
こういうウソをどこで教わってくるんだろう?
0974デフォルトの名無しさん (ドコグロ MM27-rzru)2016/10/04(火) 08:59:21.54ID:b3H+v7IsM
>>972
unix系のosに触ったことないでしょ
0975969 (ワッチョイ 477b-eUFH)2016/10/04(火) 09:23:53.12ID:MLgwtfwZ0
普通、研究員・新入社員は、まずゾンビの削除の仕方から、教わるだろ?w
0976デフォルトの名無しさん (ワッチョイ a37b-T4vf)2016/10/04(火) 09:51:02.60ID:oog1epo10
なぜ自分の居るところを普通だと思っちゃうんだろうね
0977デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/04(火) 10:13:18.17ID:6mv8IhAQ0
ID:MLgwtfwZ0って、どこでどう言う教育受けてきたんだろう
ジジイっぽいけど、これまで無知な奴は滅多にいない
0978デフォルトの名無しさん (ワッチョイ 17a3-dvmP)2016/10/04(火) 10:50:29.72ID:KbTggc+e0
>>966
もうその話題終わったから
0979デフォルトの名無しさん (ワントンキン MMcf-Xr8z)2016/10/04(火) 12:48:37.18ID:b4l9l8B3M
>>963
forkの実行でプロセスが分裂して同じ処理が走るから
forkの直後は自分が親なのか子なのかを判断する処理を書くんだよ
あくまでもイメージね
デバッガで追うとわかりやすいかも
でも逆に混乱するかな...
0980デフォルトの名無しさん (ドコグロ MMef-rzru)2016/10/04(火) 12:56:52.93ID:2AWlMUg/M
>>977
無知ならいいけど知ったかぶりで嘘書くのはダメだろ
0981デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/04(火) 13:21:20.06ID:6mv8IhAQ0
>>980
大抵の知ったかぶりは自覚のない無知
0982デフォルトの名無しさん (ワッチョイ cfdb-2pTf)2016/10/04(火) 15:13:25.81ID:EsaflMwe0
printf("a = %d\n",a = a + a++ + a);
printf("b = %d\n",b = b + ++b + b);

表示される値はそれぞれいくつでしょうか?
分かりやすく教えて頂けると幸いです。
0983デフォルトの名無しさん (ワッチョイ 4b7b-dvmP)2016/10/04(火) 15:24:01.59ID:qi1/fBX60
試せ
0984デフォルトの名無しさん (ワッチョイ ef3c-RPp1)2016/10/04(火) 15:24:13.13ID:ierS0lm90
副作用完了点までに多重に参照してるので鼻から悪魔
0985982 (ワッチョイ cfdb-2pTf)2016/10/04(火) 16:33:38.14ID:EsaflMwe0
>>983
試し済みで答え自体は分かっているのですが、
いまいち要領を得ないで困っています。
ちなみにa=1、b=1でお願いします。
0986デフォルトの名無しさん (ワッチョイ 6f9f-1sJM)2016/10/04(火) 16:39:50.30ID:BNPZR97g0
こういうのは規格上で違法にすべき
0987デフォルトの名無しさん (ワッチョイ ef3c-RPp1)2016/10/04(火) 16:52:45.47ID:ierS0lm90
>>985
要領を得ないもなにも 動作未定儀のコードだから 「説明がつかない」
0988982 (ワッチョイ cfdb-2pTf)2016/10/04(火) 17:09:55.42ID:EsaflMwe0
>>987
すみません。
コード全部書きます。

#include <stdio.h>
int main(){

int a=1,b=1;

printf("a = %d\n",a = a + a++ + a);
printf("b = %d\n",b = b + ++b + b);

return 0;
}
0989デフォルトの名無しさん (ワッチョイ ef3c-RPp1)2016/10/04(火) 17:18:57.62ID:ierS0lm90
>>988
いや a = a + a++ + a と b = b + ++b + b が規格外の記述
「副作用完了点」を調べて
0990デフォルトの名無しさん (ワッチョイ ef3c-RPp1)2016/10/04(火) 17:19:51.00ID:ierS0lm90
× 規格外
○ 規格で動作未定儀になってる
0991982 (ワッチョイ cfdb-2pTf)2016/10/04(火) 17:29:30.69ID:EsaflMwe0
コンパイルするとa=5、b=6って表示されるんですが・・・。
なんででしょう?
0992デフォルトの名無しさん (ワッチョイ 4b7b-7Sel)2016/10/04(火) 17:57:24.04ID:6mv8IhAQ0
キミが使ったコンパイラはそのような結果になる
他のコンパイラでは別の結果になるかも知れない

それが「動作未定義」
副作用完了点を検索してよく読みなさい
0993デフォルトの名無しさん (アウアウ Sa77-rzru)2016/10/04(火) 18:22:31.63ID:VYFD9zNGa
5になるんだ。面白いね。想像だけど、aのやつは左からレジスタに入れて、1+1のあとにインクリメントして3になったところに2を足したのかな?アセンブラダンプ見れば分かるんじゃない?
0994デフォルトの名無しさん (ブーイモ MM8f-SJFH)2016/10/04(火) 19:47:22.08ID:jdH4W1FCM
へーやっぱ違うんだな
ちな2,3 gcc@linux
0995デフォルトの名無しさん (ブーイモ MM8f-SJFH)2016/10/04(火) 19:49:35.83ID:jdH4W1FCM
って初期値1かよ。今の忘れて…
0996デフォルトの名無しさん (ワッチョイ 1b7b-m9GF)2016/10/04(火) 20:25:02.56ID:iEd5oTSN0
次

C言語なら俺に聞け 137
http://echo.2ch.net/test/read.cgi/tech/1475580238/
0997デフォルトの名無しさん (ワッチョイ 4fc0-iAeO)2016/10/04(火) 21:19:04.23ID:EHAtSK8l0
>>969
嘘
0998デフォルトの名無しさん (ワッチョイ 6fba-ETlQ)2016/10/04(火) 22:11:24.65ID:A2L0X7us0
>>996
乙
梅
0999デフォルトの名無しさん (ワッチョイ 4742-RPp1)2016/10/04(火) 22:16:18.46ID:1LDeTD9L0
うめ
1000デフォルトの名無しさん (ワッチョイ 17d7-RPp1)2016/10/05(水) 00:43:51.88ID:ZrA9f4Xz0
梅
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 86日 2時間 54分 55秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。