C言語なら俺に聞け 145at TECH
C言語なら俺に聞け 145 - 暇つぶし2ch159:デフォルトの名無しさん
18/02/26 23:49:55.49 KRl4xBEA0.net
>>151
もともと標準mallocやfreeを使って自前realloc作るならという話の流れだっただろ

160:デフォルトの名無しさん
18/02/26 23:57:50.74 Z8+ASG310.net
>>152
CSVファイルを読み込むプログラムは作った事ありますが
CSVの仕様をどの位受け入れるかで複雑さも変わると思います。
この辺は汎用的に作るか、自分が処理したいCSVの仕様の範囲にするかで違うとは思います。
scanf系の処理はとても癖が強く、
よっぽど仕様に精通していないと填まります
私ならその道を行くのはやめます

161:デフォルトの名無しさん
18/02/27 00:01:01.54 uYnnRgds0.net
>>152
grepでおk、マジで
そんなことをCでやる馬鹿はいないから、ろくな参考情報がないのも当たり前。

162:デフォルトの名無しさん
18/02/27 00:04:33.43 vDZ6bRaj0.net
"と , のエスケープと 1要素の中に改行を含む文字列周辺 RFCみて頭いたくなった

163:デフォルトの名無しさん
18/02/27 00:13:39.83 euQ4hghrM.net
>>152
俺なら間違いなくpythonつかうね
URLリンク(qiita.com)

164:デフォルトの名無しさん
18/02/27 07:16:02.83 pdRg+OHax.net
配列とかポインタとか難しいと聞いていたから心配していたけど
とりあえず基礎の解説書レベルなら分かった。やれやれ。

165:デフォルトの名無しさん
18/02/27 09:21:35.76 uskldtVs0.net
指定したサイズの2次元配列を確保する関数を設計してくれまいか?

166:デフォルトの名無しさん
18/02/27 10:07:05.72 XfJ/ct090.net
>>159
無理じゃね?
char (*dim_alloc(size_t width, size_t height))[width];
最後の[width]がエラーになる[*]にしてもあかん
[]にすると通るには通るが、今度は
char (*a)[3][4] = dim_alloc(3, 4); //型の不一致になる

167:デフォルトの名無しさん
18/02/27 10:08:23.25 XfJ/ct090.net
あ、失礼
char (*a)[4][3] = dim_alloc(3, 4);
結果は同じだけど

168:デフォルトの名無しさん
18/02/27 10:55:55.07 XfJ/ct090.net
できた
void dim_alloc(size_t, size_t, char (**b)[*]);
int main(void)
{
size_t width = 3, height = 4;
char (*a)[width];
dim_alloc(width, height, &a);
}
void dim_alloc(size_t width, size_t height, char (**b)[width])
{
*b = (char (*)[width])malloc(width * height);
}
これならおk

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

170:デフォルトの名無しさん
18/02/27 11:48:09.27 w9pRJ3lK0.net
二次元配列とポインタの配列だと、使い方が違うでしょう

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

172:デフォルトの名無しさん
18/02/27 12:27:42.17 r7ed+pq5a.net
>>164
確保時と解放時が違うが読み書きアクセスする時の表現は同じにできる。

173:
18/02/27 12:30:04.09 CvenUVT40.net
>>159
gcc6 では一筋縄ではいかなくなっているね…

174:デフォルトの名無しさん
18/02/27 12:35:33.45 XfJ/ct090.net
>>165
非標準のね

175:
18/02/27 17:51:59.04 CvenUVT40.net
>>159
できた!
スレリンク(tech板:36番)

176:
18/02/27 18:02:32.91 CvenUVT40.net
>>162
>>159
>char (*a)[width];
これに値をいれないといけないし、そもそも、それも含めて malloc() してほしい、のでは

177:デフォルトの名無しさん
18/02/27 18:07:21.76 BEzsaLeta.net
ああ。先頭にポインタを詰め込んで一発で全部free()できるようにしたのか。

178:デフォルトの名無しさん
18/02/27 19:24:56.97 LuvO3mbWM.net
>>165
非標準だし、そもそもそんなものを使う必要は滅多にない

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

180:デフォルトの名無しさん
18/02/27 19:47:16.45 jvpYfXKk0.net
>>159
わざわざ関数を設計しなくても、例えば3次元配列なら
int ary[dim_z][dim_y][dim_x];
int (*ptr)[dim_y][dim_x] = malloc(sizeof(int) * dim_z * dim_y * dim_x);
とやれば ary と ptr は同等に扱えないかな。
ptrはfree()する必要があること、sizeofの対象にしたとき同じ値を返さないことは
別関数を作っても同じだし。

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

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

183:デフォルトの名無しさん
18/02/27 20:42:39.05 LuvO3mbWM.net
>>173
> 上の方でmalloc作者じゃなきゃrealloc作れないっていう主張があった
そもそもその主張がおかしいだろ

184:デフォルトの名無しさん
18/02/27 21:38:07.83 ejzPWrTva.net
>>177
だから、その主張はおかしいって話の流れだったろ

185:デフォルトの名無しさん
18/02/27 23:15:01.44 7DMjjd1qx.net
テトリスのプログラムって難しい方なの?

186:デフォルトの名無しさん
18/02/27 23:18:17.42 w9pRJ3lK0.net
そんなには難しくはないと思う
作る人がグラフィック処理を理解していて
キー入力のリアルタイム処理をこなせればね

187:
18/02/27 23:20:17.44 CvenUVT40.net
>>179
自分で組むためにはいろいろと段取りが必要で結構難しい部類になるかと思います
一時間で組む、とかいうやつも下準備はしてあったと思います

188:デフォルトの名無しさん
18/02/27 23:26:02.43 7DMjjd1qx.net
PetiteTech にあるテトリス
ブロックパズルの作り方 だと これはどうなの?

189:デフォルトの名無しさん
18/02/27 23:31:30.01 7DMjjd1qx.net
高校生ぐらいが無理なく取り組めるゲームプログラムって
無いですかね?もちろん初心者。

190:デフォルトの名無しさん
18/02/27 23:54:04.69 8YslYmAQ0.net
パズル系は楽そうに見えるけど、判定部分を作るのがキツいと思う
まずは固定画面でブロック崩し
次は横スクロール画面でスーパーマリオもどきぐらい
描画ライブラリを自作出来なかったら dxlib とかのフリーライブラリが使える
2Dに慣れたらUnityのフリー版で3Dゲーム作ってみるのもいい

191:デフォルトの名無しさん
18/02/28 00:04:51.75 8c8qszi40.net
ここに来て何でこんなに初心者が沸いているのか分からんが、
スレ分けた方がいいんじゃないか?
というか、上級者用のスレがあったら紹介してくれ。俺がそっち行くから。

>>183
高校生なら学校の勉強しとけ。特に数学。
俺はゲーム畑ではないが、今ですらエンジンは統合されつつあり、
フレームワーク化は今後ますます進む。というか、そうならない理由がない。
そのとき、中途半端にCが出来ても使い物にならない。
ゲームプログラミングは上位のフレームワーク上の部分と
下位のゲームエンジンの部分に分離され、Cが担当するのは後者で、
当たり前のように座標を使いこなし、ゴリゴリにチューニングすることが求められる。
つっても通じないだろうが、多分高校生の考えるゲームプログラミングなら、
C#でunity使うのが今風なんじゃね?そっちやっとけよ。

192:デフォルトの名無しさん
18/02/28 00:42:29.18 QXjyWHPf0.net
そもそも枯れた技術のC言語スレで上級者なんているのかな・・・?

193:
18/02/28 00:49:49.08 8h6/NeTB0.net
>>186
>>159 をサクッと解ける人は上級者かもしれません、私は size(int)=sizeof(int *) を仮定していたために酷くはまりました

194:デフォルトの名無しさん
18/02/28 01:07:30.80 8c8qszi40.net
>>186
むしろお前含めて一通りも使えない馬鹿が沸きまくっていることが問題だ。
それでも初心者は初心者同士で好きにやればいいが、
元々居た連中は逃げるしかない。
大体、>>184も間違いだ。
そもそもプログラミングすら出来ない奴がCから始めることが間違っている。
今は昔みたいにCしかない状況ではない。他に適した言語がいくらでもある。
だから「C初心者」は許容するとして、「プログラミング初心者」はお帰りください、でいい。
というか、それが本人の為だ。
「判定部分」は言語に依らない。
だから「判定部分を作るのがキツい」のなら、まずその程度簡単に出来るまで他言語で鍛えろ、でしかない。
それで、速度的に問題がある場合はそこをCに切り替えていくわけでさ。
(俺は使ったこと無いから推測だが、)普通の当たり判定ならエンジン側で当然持ってるだろ。
落ちゲーもそれなりの歴史はあるし、判定ルーチンがエンジンにあってもおかしくない。
そもそもテトリスの判定(一列埋め)が難しいという時点で論外だし。
お前は>>184が本人の為になるとでも思ってるのか?
高校生なら学校のお勉強しとけ、がよっぽどマシだろ。
そもそも高校生が2chするのが間違っていると思うし。

195:デフォルトの名無しさん
18/02/28 01:09:56.20 3MQnmRRma.net
>>188
そんなに不満ならスレ立てれば良いのでは?
上級者が集まったらどんな話題が出るのか興味あります

196:デフォルトの名無しさん
18/02/28 01:15:14.33 m1ANm8An0.net
上級者かそうで無いかは、どの辺で分けるの?
もしかして年齢?

197:デフォルトの名無しさん
18/02/28 01:20:42.25 QXjyWHPf0.net
ここにいる自称上級者の人達は、C++やC#なら標準で使える様な物を何で再発明しているんだろう?
ポインタ返すだけの関数だとメモリオーバーランが検知出来ないから業務では危なくて使えないし、
バッファへのポインタは別ソース内にstaticで隠蔽してintとかのハンドルだけ返して、
引数範囲チェック付きのget,setと、ハンドルでfreeする関数まで作らないと正解とは言えない

198:デフォルトの名無しさん
18/02/28 01:45:42.72 8c8qszi40.net
とりあえず他の人の反応見て週末にでも俺が立てるよ。
テンプレは>>1踏襲だが、以下に変える予定。

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

>>190
Cなら10k行で切っても人数集まるんじゃないかな?と思っている。
ゆずって5k行くらいにしとくか?
或いはC++も混ぜとくか?


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



200:
18/02/28 01:53:16.04 8h6/NeTB0.net
>>192
1万行ですか…気が遠くなりますね…
こんなのなら書いたことがありますが…
URLリンク(code.hackerearth.com)
URLリンク(code.hackerearth.com)

201:デフォルトの名無しさん
18/02/28 01:54:28.86 ifAjmiIg0.net
作ったよ。
C言語上級者スレ
スレリンク(tech板)

202:デフォルトの名無しさん
18/02/28 01:57:04.78 ifAjmiIg0.net
あ、ごめん。リロードしてなかった。そういうテンプレは入れてないな。
じゃあ俺の作った方は放置でいいよ。新しいのできたら削除依頼しとこう。

203:デフォルトの名無しさん
18/02/28 02:06:17.61 m1ANm8An0.net
>>192
1CU1ソースって仕事を昔してた。
モジュール分割すら認めてないサイトだった
ソースはそれぞれ1万行越えてたな
最大2万行あったと思う
1日に600行書いたことはある
でも自分を上級者だとは思っていない
そんな自信はありません
書くソースは500行程度だな
どんなに詰め込んでも2000行が限界だわ

204:デフォルトの名無しさん
18/02/28 02:13:49.37 8c8qszi40.net
>>193
これ何故コードに展開したんだ?何かの実験か?
それにしても意味があるとは思えないが。
さすがに手打ちとは思えないから、当然自動コード生成として、
その場合は入力は木データなのだから、歩くのが普通だろ。
100行程度で済む内容だと思うが。

205:
18/02/28 02:19:55.16 8h6/NeTB0.net
>>197
同じ課題についた別解答は次のとおりです
URLリンク(ideone.com)
まあこの程度の内容ではあるのです

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

207:
18/02/28 02:47:13.06 8h6/NeTB0.net
>>199
ああ、それは説明が必要でしたね
確かにこの課題内容の「縛り」は理解不能でしたが、当時、それに知恵を絞った者も複数いたようです、宿題スレ、粘着の嵐でもう見る影もなく廃墟になってしまったんですが
課題内容
C言語で、
#include <stdio.h>
int main(void){
char n;
/*
ここを埋める。変数の新たな定義
や,printf,scanf以外の関数の呼び出しは禁止
*/
}
な場合で、
1から6までの数字をキーボードから最小で5回受ける
(同じ文字の入力や範囲外の文字の入力は
「無視しました」と出力)
残り一つの数字がわかる場合はキーボード入力
を待たずに決めてよい
最終的に、入力された順番とは逆順に入力
された文字を出力

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


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



210:
18/02/28 03:20:22.48 8h6/NeTB0.net
>>201
あはは…そのとおりですね
非常識・無常識でウケを狙ったりもして楽しかったんですが
今残っているスレとしては、ここが雰囲気が似ていますね
スレリンク(tech板)
C 言語の宿題に対して執拗に prolog で書いていた人もいました、いつも凄いとおもっていました

211:デフォルトの名無しさん
18/02/28 04:52:04.37 u7A4CcwO0.net
>>199 bool ?

212:デフォルトの名無しさん
18/02/28 05:21:30.33 sJxURYwy0.net
普通の有限オートマトンやんな

213:デフォルトの名無しさん
18/02/28 08:56:58.23 57y2KSxK0.net
無限オートマトン ってどんななの?

214:デフォルトの名無しさん
18/02/28 09:12:27.49 MJOJ5lH0M.net
状態数が有限じゃないってことだけど、解析できないし分類上も有用じゃないので、現実には扱わないよ

215:デフォルトの名無しさん
18/02/28 09:52:53.28 eOQjYTv40.net
>>183
市販品=プロの作品を真似しようったってそんなの無理だ
必要なのはアイディアの発想力、つまり遊びのセンスだ
たとえばキーボードを壁に吊して射的ゲームとかなら
プログラム的には簡単だろ

216:デフォルトの名無しさん
18/02/28 11:17:44.41 A9USqIB/0.net
>>183
「ヒット・アンド・ブロウ」や「ハングマン」あたりかな。
乱数ベースの当て物に飽きたらテキストアドベンチャーに移行。
自然言語処理に至る。
…真に受けないでくれよ。

217:デフォルトの名無しさん
18/02/28 12:31:00.24 ZStODBz1a.net
キーボードを壁に吊るしてって、斬新なアイディアだな。

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

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

220:デフォルトの名無しさん
18/02/28 14:15:02.50 nUmzOd5xa.net
>>186ではなく>>183だった

221:デフォルトの名無しさん
18/02/28 20:10:01.78 DO+q01hP0.net
getch使ってザッザッザッザッザカリテ

222:デフォルトの名無しさん
18/02/28 21:12:07.60 sIMYGGyya.net
cursesだな。

223:デフォルトの名無しさん
18/02/28 22:05:24.10 5kf5T6va0.net
テトリスとぷよはそんなに難しくなかったなぁ。
省メモリで作ると果てしなく大変だけど、富豪的に作れば大したことない。
オセロとかもそうやな。富豪的に作れば難易度は各段に下がる。

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

225:デフォルトの名無しさん
18/02/28 23:46:39.93 5kf5T6va0.net
対戦マスターマインドとか簡単で面白いカモな。
伏せられた一つの答えを解きあう感じの。
敵作る経験にもなるし。

226:デフォルトの名無しさん
18/03/01 00:11:06.23 Ajqb03Rpx.net
それぞれ


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



228:デフォルトの名無しさん
18/03/01 09:43:11.48 O9YoI3Ipa.net
>>216
BASICで・・・30年以上前の話かな・・・

229:デフォルトの名無しさん
18/03/01 09:57:54.68 KMinam3V0.net
BASICか。。。
始めて作ったのは
敵がいないパックマンに
バック走行のレーシング
マシン語おぼえて任意方向のスクロールができるようになったら
ボスコニアンとかゼビウス
敵キャラはマシン語より難しい
完全にランダムな動きはすぐできるが
自機を狙ってくるやつの思考ルーチンは奥深い

230:デフォルトの名無しさん
18/03/01 13:15:16.58 vHclpfSxM.net
ハングマンはわりと簡単に作れてわりと楽しめるよ
英語の勉強にもなる(かもしれない)

231:デフォルトの名無しさん
18/03/01 13:42:17.24 EAWoI55s0.net
>>220
「バック走行のレーシング」て発想はなかった。
俺は「風船を背負って縦穴を落下する」という設定だった。
…そういや、今のプログラム初心者は「とりあえずスター・トレック」で
ゲーム作り始めないのね。
真面目な話、BASICでINPUT命令を使うのに比べると
Cでユーザーからのキーボード入力を受け取るのは面倒なんだよね。
そのせいで同じネタでもプログラム課題としての難度がいくらか上がる。

232:デフォルトの名無しさん
18/03/01 14:39:39.65 pSYCUqTH0.net
conio.hを発見して非標準に絶望するまでが一セット。
俺、発見するのに数年かかったんだぜ。
BASICで3日でできたことがなんでできんのじゃーって悶えたわ。

233:デフォルトの名無しさん
18/03/01 15:52:58.39 AvQj/v1Qa.net
cursesライブラリの方が対応している端末が多くてほぼ標準なんじゃないかな

234:デフォルトの名無しさん
18/03/01 16:10:34.41 KMinam3V0.net
非標準ておまえら。。。
// basic_like.h
int inkey(void);
こんなん一発作っときゃ終わりだろうがよ

235:デフォルトの名無しさん
18/03/01 17:04:57.73 3FNdba4V0.net
自分の使ってるコンパイラの枠組みの中だけで実装できればまだいいんだが…
めんどくさいので既存のものを探すことにになる

236:デフォルトの名無しさん
18/03/01 18:26:02.35 AzZlAoZA0.net
CよりC++使うべきでは?

237:デフォルトの名無しさん
18/03/01 18:33:42.83 AvQj/v1Qa.net
今さらC++使う気にはなれないな

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

239:デフォルトの名無しさん
18/03/01 21:26:58.79 pSYCUqTH0.net
>>224
ウインドウズで開発してるから、VCはconioもってるんだよな。
ただ、布教できなくて悶える。ソース配布できない。
GCCも持ってない環境あるからなぁ。

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

241:デフォルトの名無しさん
18/03/02 05:26:58.29 btKfsNEv0.net
>>230
まあ、非標準だから仕方ない。そういうのは条件コンパイルとか、たくさんあるなら環境ごとに別のソース


242:ファイルにしてビルド時に選択とか。 そういうことをちゃんとやってるオープンソースソフトウェアが参考になるかも。



243:デフォルトの名無しさん
18/03/02 06:44:50.16 bNTu0vGw0.net
待機なしの1キャラ入力は標準に欲しいね

244:デフォルトの名無しさん
18/03/02 07:35:26.90 Ht5IxdGD0.net
日本語どうやって入力するんだ?

245:デフォルトの名無しさん
18/03/02 09:02:00.75 7oxMlhUX0.net
>>225
にいさんむむむ でキーリピート解除

246:デフォルトの名無しさん
18/03/02 22:53:07.31 PBdn8yjo0.net
>>192
立てた。
C言語相談室(上級者専用)
URLリンク(mevius.2ch.sc)
老害が来てもウザイので「10,000行程度のソースを扱えない人は」と現在状態に変更した。
上級者には一朝一夕では成れない。
初心者は文法事項にばかりに目が行きがちだが、
今日覚えれば明日から使える文法事項で練度を測るのはナンセンスだ。
これを含めて、意見については新スレで受け付ける。
>>195
削除よろ

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

248:デフォルトの名無しさん
18/03/03 19:55:40.33 .net
>>237
一定のchunk sizeでreadして1byteずつ解析やな

249:デフォルトの名無しさん
18/03/03 20:06:25.92 B47zIri70.net
あ、そうか。
UTF-8って生バイトfreadしないといけないのか。
失念してた。

250:デフォルトの名無しさん
18/03/03 20:54:25.83 usZqppoC0.net
>>236
削除依頼出して誘導の書き込みしておいた。

251:デフォルトの名無しさん
18/03/04 09:51:40.56 /AI+3Uf1a.net
おまいらってすごいね
C検定の1級とか余裕なんだろね

252:デフォルトの名無しさん
18/03/04 17:53:13.34 9DD6RFWE0.net
いやいや、これでもISO/IEC 9899:2011のつまみ食いをしてるだけですよ
昔のCと違い、今のCは付き合ってらんないところが結構あるんで

253:デフォルトの名無しさん
18/03/04 23:51:40.13 8NE8Y0sUx.net
10,000行程度のプログラムで何ができるのか想像が出来ん。

254:デフォルトの名無しさん
18/03/05 00:51:13.54 .net
10000行程度を書いた経験だろ
全体だと30万行とかだろ

255:デフォルトの名無しさん
18/03/05 01:04:58.69 FpxBMBRn0.net
一プロジェクトで1万行はないな。趣味だから。
トータルならそれ以上書いてるけど。

256:デフォルトの名無しさん
18/03/05 01:26:13.77 LCMEVuoA0.net
>>241
それってここに書いてある一級?
URLリンク(ja.wikipedia.org)
だったら特に検定受かってなくてもそういう人だらけじゃないかな。

257:デフォルトの名無しさん
18/03/05 01:35:06.01 LCMEVuoA0.net
一万行ねえ。しかしあまりに行数が多くなるとするとC言語を使うこと自体が適切ではなかった可能性も出てくるよな。
あるいは何か設計がまずいか、書き方がまずいか。
何れにしてもプログラムが多くなればなるほど人間がバグを作り込んでしまう率が高くなり更に全体の把握が困難になってくる。

258:デフォルトの名無しさん
18/03/05 02:35:53.76 FpxBMBRn0.net
最高効率で1万行ってやりたくないなぁ。
ぜったゲシュタルト崩壊起こす。

259:デフォルトの名無しさん
18/03/05 02:49:21.31 udBqLrh50.net
普段から1万行程度書いてる上級プログラマが
今から模範演技を見せてくれそうな予感

260:デフォルトの名無しさん
18/03/05 06:35:47.20 wW3xLIx70.net
int
MyFunc
(
int param
)
{
return param * param;
}

261:デフォルトの名無しさん
18/03/05 07:59:23.92 DUciPmz40.net
一万行パクった事がある。

262:デフォルトの名無しさん
18/03/05 09:53:37.62 9If1UATd0.net
行数で評価とかいまだにあるのかcobolの習慣持ち込むな

263:デフォルトの名無しさん
18/03/05 10:35:59.73 6dt0Sqct0.net
生涯ではたぶん 書いた行数より消した行数の方が多い

264:デフォルトの名無しさん
18/03/05 10:56:09.00 vC0ni0wma.net
>>249
一万行の上級者様は上級者様専用スレに行ったみたいだから、実演はしてくれないだろう

265:デフォルトの名無しさん
18/03/05 16:04:50.85 /FWFrph00.net
voidポインターの足し算は未定義なんだってね。
charのポインターみたいに1バイトずつ増えるからつかえると思ってた。

266:デフォルトの名無しさん
18/03/05 16:10:41.91 QTTd7ohZF.net
どうせキャストして使うんだし

267:デフォルトの名無しさん
18/03/05 17:54:44.07 V+sS+FxI0.net
C言語初心者向けのスレって結局ここでいいんだろうか?

268:デフォルトの名無しさん
18/03/05 17:59:13.03 udBqLrh50.net
いいとも

269:デフォルトの名無しさん
18/03/05 18:07:26.38 VG/uZnqZd.net
フォルダ内の複数のエクセルシートの決まったシートをtext形式1つにまとめるのって出来ます?

270:デフォルトの名無しさん
18/03/05 18:10:45.91 qBuz+lExa.net
>>255
gccもそうなってて以前それ前提に書いてあるソースを見てビックリしたことがある。
特別扱いしているらしい。

271:デフォルトの名無しさん
18/03/05 19:32:31.91 cQ8T6f3ad.net
プリプロセッサで
#define foo(n) foo_##__typeof__(n)(n)
double a;
foo(a);
って展開したら
foo_double(a)
になって欲しかったのに
foo___typeof__(n)(n)
になりました
良い方法はないでしょうか?

272:片山博文MZ
18/03/05 20:05:03.11 N7KbDTrZd.net
>>261
型名の解釈は、プリプロセッサのレイヤーでは無理です。

273:デフォルトの名無しさん
18/03/05 20:09:24.78 SJt3Y40r0.net
__typeof__ って 演算子っぽいけど
(プリプロセッサ処理の段階では解釈されない:sizeof と同じで
 リテラルの整数に展開されているわけではない)

274:デフォルトの名無しさん
18/03/05 20:10:41.84 cQ8T6f3ad.net
がーん
_Genericも二箇所に分けて書こうとするとredefineって言われて先に定義したほうが消えるし、ジェネリックは結構厳しいんですね……
ありがとうございます

275:デフォルトの名無しさん
18/03/05 22:18:31.83 gAM47Ihup.net
1万行なんて、きちんと設計してないんじゃね?

276:デフォルトの名無しさん
18/03/05 22:28:13.08 FpxBMBRn0.net
sizeof(void)って未定義?
未定義ならそのポインタの加算幅も未定義だな。
void* p = (((void*)(&i))++);

277:デフォルトの名無しさん
18/03/05 23:16:20.23 THwFwnSk0.net
キミは正しい

278:デフォルトの名無しさん
18/03/06 03:28:05.03 ln7SJGum0.net
本当は void * に対しては足すことも引くこともできない。

279:デフォルトの名無しさん
18/03/06 06:45:37.01 r6wtBatS0.net
今ならuintptr_tにキャストして足し算引き算した後でvoid*に戻すのかな。
uintptr_t以前はchar*へのキャストだったかも知れんけど。
しかし実際のところvoid*に対してポインタを進めたり戻したりしたいって、
どういう場面で必要になるんじゃろうか?

280:デフォルトの名無しさん
18/03/06 09:29:43.76 vOSWGXrq0.net
char *でいいじゃん
構造がわからないものはバイト列って認識でしょ?

281:デフォルトの名無しさん
18/03/06 10:18:02.26 5/zKekdl0.net
分からない物を適当に扱うって、すごいな

282:デフォルトの名無しさん
18/03/06 12:31:29.65 aP2GFEvqa.net
しかも符号まであると決めつけてるな

283:デフォルトの名無しさん
18/03/06 12:40:00.86 KV/wZ8PJ6.net
GCCとかchar*と同じ挙動じゃなかったっけ?

284:デフォルトの名無しさん
18/03/06 12:50:23.18 Hdg+O/12a.net
gccはね。

285:デフォルトの名無しさん
18/03/06 12:54:06.75 Hdg+O/12a.net
そういやポインタ演算と言うと8086用のCコンパイラはfarとか拡張キーワード作ったりして面倒だったな。TurboCだったか。
ああいうなんとも言えないCPUコンパイラだと特殊な決まりがあったりするから要注意だ。
まあ、二度とあんなの市場に出ないような気はするけどな。

286:デフォルトの名無しさん
18/03/06 12:54:48.33 Hdg+O/12a.net
用のが抜けた。CPU用の、な。

287:デフォルトの名無しさん
18/03/06 12:56:39.10 3EYe6qQ70.net
ハーバードアーキテクチャだとdmとかpm修飾なんてのも

288:デフォルトの名無しさん
18/03/06 13:31:13.79 PuW1uuBL0.net
farはTurbo Cに限ったことじゃない
8086用である限り必要になる

289:デフォルトの名無しさん
18/03/06 14:52:33.73 03FKlPoEF.net
tinyモデルでも使えるfar最強

290:
18/03/06 15:01:22.33 xvhpcg6j0.net
>>279
でもコード64KBの制限はどうしようもない

291:デフォルトの名無しさん
18/03/06 16:57:53.89 PuW1uuBL0.net
64KBしかいらないときに使うのがtiny
tiny使いながら64KBじゃきついとか発想が逆
だったら端っからlarge使えつーの

292:デフォルトの名無しさん
18/03/06 17:18:40.34 03FKlPoEF.net
>>281
それは根本的な間違い
誤解産むからやめれ

293:デフォルトの名無しさん
18/03/06 21:11:42.80 0OC43do0M.net
>>272
charか符号付きかどうかは処理系とかによる
なので決めつけてるのはお前ってオチ

294:デフォルトの名無しさん
18/03/06 21:46:56.01 7Z5LV7MX0.net
整数の差分じゃなくてポインタの差分じゃろ?

295:デフォルトの名無しさん
18/03/06 21:52:27.71 GCrMS1Np0.net
char は、符号付き・符号なしの、どちらか分からないから使うな!
エラーに、-1 を使っていたら、0~255 しか表現できない事もある

296:デフォルトの名無しさん
18/03/06 21:58:50.50 3EYe6qQ70.net
>>285
9bitなの?(T_T)

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

298:デフォルトの名無しさん
18/03/06 23:01:01.51 GCrMS1Np0.net
素人が、char型の-1 を、エラー値に使っていると、
OS・コンパイラが変わって、その環境では、char型が0~255 になってる
char型は、符号付き・符号なしの、どちらか分からない

299:
18/03/06 23:07:35.07 xvhpcg6j0.net
>>288
言語内の話と環境(シェルやOS)の話を混同してはならない

300:デフォルトの名無しさん
18/03/06 23:46:04.03 5/zKekdl0.net
signed char って書けば?

301:デフォルトの名無しさん
18/03/07 02:24:03.38 Tq6bvCAq0.net
>>288
charの使い方が間違っていることが問題なのであって、charを使うこと自体が悪いのではない。

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

303:デフォルトの名無しさん
18/03/07 10:31:28.26 ylRgY7un0.net
>>282
どこか間違っているか?

304:デフォルトの名無しさん
18/03/07 12:28:33.48 maM/8pnG0.net
gets_sのsは何の略か教えて�


305:ュださい。



306:デフォルトの名無しさん
18/03/07 12:31:25.66 /Jrz1mw60.net
secure

307:デフォルトの名無しさん
18/03/07 12:53:17.89 vftXHA5La.net
>>294
Windows用のコンパイラの話?
知らないけど、多分 size の s じゃない?

308:デフォルトの名無しさん
18/03/07 12:53:35.53 vftXHA5La.net
>>295
あ、それか。

309:デフォルトの名無しさん
18/03/07 12:59:49.73 L+d1J7Rsa.net
stopper

310:デフォルトの名無しさん
18/03/07 13:42:40.79 r9zWShH00.net
昔はpc-98DOS用に作ったソフトがハード依存コードが無ければ
DOS/V機やTOWNSでも動くって聞いて驚いた。

311:デフォルトの名無しさん
18/03/07 13:49:17.29 9HCtzU4sd.net
safe

312:デフォルトの名無しさん
18/03/07 16:58:54.65 +xlstTJJ0.net
N5200 で LSI C-86 試食版を使ってた……ような気がする。昔のことだから記憶が曖昧だ。

313:デフォルトの名無しさん
18/03/07 17:13:49.35 ylRgY7un0.net
vz?

314:デフォルトの名無しさん
18/03/07 17:14:24.12 GwlIl+h20.net
MS-DOSが動作していれば使えるはず

315:デフォルトの名無しさん
18/03/07 17:17:05.15 ylRgY7un0.net
dispelしなきゃ無理じゃね?w

316:デフォルトの名無しさん
18/03/07 17:21:00.28 XsGIcGwmp.net
secureじゃねーだろ。
暗号化だってされてねーんだからw
safetyくらいな感じじゃね?

317:デフォルトの名無しさん
18/03/07 17:25:48.32 Rf3JBuAda.net
DOSのシステムコール(なんて言うんだっけ?DOSコール?忘れた)だけを呼び出しているプログラムならハードウェアが違っても動く。
しかしMS-DOSはCUIしかサボートしてないのでグラフィックスは使えない。
当時のプログラムはみんな勝手にOS無視してグラフィックスのVRAMに直接アクセスして絵を出していた。
すると当然他の機種に持っていくと意図した通りに動かない。

318:デフォルトの名無しさん
18/03/07 17:26:24.22 L+d1J7Rsa.net
int21

319:デフォルトの名無しさん
18/03/07 17:27:45.62 rG21M89G0.net
INT 21H なら ファンクションコールだったかの

320:デフォルトの名無しさん
18/03/07 17:28:50.29 GwlIl+h20.net
伝統のCALL 5

321:デフォルトの名無しさん
18/03/07 17:29:37.78 ylRgY7un0.net
DOSCALLS.DLLてのもあったなあw

322:デフォルトの名無しさん
18/03/07 17:55:21.18 L+d1J7Rsa.net
CP/M か
0066 とかもあったっけ

323:デフォルトの名無しさん
18/03/07 19:19:15.79 Zw7oeE4wM.net
>>296-298, >>300, >>305
お前らがどう思おうとマイクロソフトはセキュリティ強化版って言ってるから

324:デフォルトの名無しさん
18/03/07 21:48:34.17 mAtFjoDLa.net
super man

325:デフォルトの名無しさん
18/03/08 05:46:05.86 Eav/q7cG0.net
#define a(b) c##b##d
というマクロでcdを出力したいのですが
a()を呼び出すとエラーになります
解決策ありますでしょうか?

326:デフォルトの名無しさん
18/03/08 07:45:03.75 /HWAGXcB0.net
>>314 俺のところはエラー出ないみたい。環境によるのかな。
コンパイラのバージョンを示せば詳しい人が現れるかも。

327:デフォルトの名無しさん
18/03/08 07:52:57.57 Eav/q7cG0.net
ありがとうございます。
解決しました。

328:デフォルトの名無しさん
18/03/08 08:09:34.78 Ed7uI0ohM.net
どう解決したか書くのが礼儀ってもんだ。

329:デフォルトの名無しさん
18/03/08 08:29:41.94 Eav/q7cG0.net
コンパイラーのエラーが出ないという意見をきいて
試してみたら別のところ―がエラーになっていたということでした。
そして自分が悪質なコンパイラーに騙されていたことに気づきました。

330:デフォルトの名無しさん
18/03/08 09:10:26.22 lHBKoGy1p.net
エラーの文章くらい読めよ。

331:デフォルトの名無しさん
18/03/08 10:10:36.36 ue18PqKiF.net
Cのエラーはエラーの発生個所を教えてくれるけど原因個所は教えてくれない

332:デフォルトの名無しさん
18/03/08 10:25:51.65 0lNTHbnP0.net
おそらく警告とエラーを混同していると思われ
> warning C4003: マクロ 'a' に指定された実引数の数が少なすぎます。

333:デフォルトの名無しさん
18/03/08 17:10:32.81 /HWAGXcB0.net
関数型マクロの使用時、カッコの内側が空の場合に


334:、 「引数が指定されていない」と解釈して警告を出すか、 「1個の引数(内容はヌルストリング)が指定されている」と解釈するか、 そういう問題みたいね。



335:デフォルトの名無しさん
18/03/08 23:40:10.76 nwTnwFPU0.net
>>292
>int8_tは内部がcharかもしれないけど便宜上charではありません。
普通はsigned charだな。当たり前。「charかもしれない」なんてこともありえない。

336:デフォルトの名無しさん
18/03/09 00:58:31.73 U4YZHGfl0.net
そういう一般仕様から外れるコンパイラの使用を強制させられたことあるの?

337:デフォルトの名無しさん
18/03/09 06:39:09.84 K2/JY7Cc0.net
cout << typeid(__int8).name(); //char

338:デフォルトの名無しさん
18/03/09 10:59:36.49 rlkWp7/Ip.net
誰だよCの話題に別言語持ち出してんの。

339:デフォルトの名無しさん
18/03/09 12:10:45.59 WqdE+VIZM.net
いやらCね

340:デフォルトの名無しさん
18/03/09 12:13:57.64 LlK9d7kba.net
頭おかC

341:デフォルトの名無しさん
18/03/09 16:36:39.04 AbBnYUJz0.net
符号なし64ビット整数を64ビット右シフトすると
0にならないでそのままの時や変な別の値になるときがあるんですけど
コンパイラーのバグですか?

342:デフォルトの名無しさん
18/03/09 17:10:28.27 aCtfd81Na.net
>>329
もしかしてですが、
悪質なコンパイラに騙されているのでは?

343:デフォルトの名無しさん
18/03/09 17:10:41.68 AbBnYUJz0.net
URLリンク(fast-uploader.com)
2つのファイルが無いと再現できなかったのでソースファイルを
アップロードしました
コンパイルしてなぜ0にならないのか教えてください。

344:デフォルトの名無しさん
18/03/09 17:11:34.80 er4JdT2d0.net
>>329
a >> b で、bの値がaの型のビット数「以上」のときは未定義動作、
に該当するから、コンパイラのバグではない。…と思う。
本当は規格の引用をすべきなんだが、どなたか頼む。

345:デフォルトの名無しさん
18/03/09 17:12:19.58 AbBnYUJz0.net
コンパイラーは
gcc version 7.3.0 (Rev1, Built by MSYS2 project)
で試しました。
悪質なコンパイラーに騙されているのかもしれませんね。

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

347:デフォルトの名無しさん
18/03/09 17:27:15.48 K2/JY7Cc0.net
その昔、CPUのバグで16bitレジスタを32bitシフトすると0にならないとかいうのなかったっけ

348:デフォルトの名無しさん
18/03/09 17:45:47.23 AbBnYUJz0.net
これからは64ビットのシフト使ってるコードは全てバグの温床になるな。

349:デフォルトの名無しさん
18/03/09 18:10:27.57 Z9n7UPH0M.net
C11の6.5.7の3より。
If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.

350:332
18/03/09 20:12:23.00 er4JdT2d0.net
>>337 フォローありがとう。この部分ですわ。
6.5.7 Bitwise shift operators ビットシフト演算子 の項。
もしも右オペランドの値が負、または汎整数拡張後の左オペランドの(ビット)幅より
大きいか等しい場合、振る舞いは未定義である。
と言った感じかな。
promoted left operand の部分が「汎整数拡張後の左オペランド」で
合ってるのか自信ないけど。

351:デフォルトの名無しさん
18/03/09 21:17:55.13 ysNVe5/v0.net
64bit 符号なしを、64bit シフトするって、そもそも無意味だろ
元のビットが残っていない。
全部のビットが変わっている!
意味があるのは、6


352:3bit まで



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

354:デフォルトの名無しさん
18/03/09 22:57:22.97 dpc+cSNT0.net
0クリアする最適な方法なの?

355:デフォルトの名無しさん
18/03/09 23:23:40.83 ysNVe5/v0.net
1010 XOR
1010
----
0000
n は任意のビットで、n XOR n で、全ビット0にできる

356:デフォルトの名無しさん
18/03/09 23:25:22.45 .net
>>342
そんなん全ビット読まなきゃいけないじゃん

357:デフォルトの名無しさん
18/03/09 23:29:26.36 9IZd/e860.net
n and 030 とかで任意ビットのonはわからないか?

358:デフォルトの名無しさん
18/03/09 23:47:39.35 U4YZHGfl0.net
>0クリア
つ ゼロレジスタ

359:デフォルトの名無しさん
18/03/10 00:03:47.54 a2p+alti0.net
1 bit づつじわじわシフトするなら何とかなるんだけどな。
URLリンク(paiza.io)

360:デフォルトの名無しさん
18/03/10 05:55:47.17 jel/5KgH0.net
定数リテラルにullって使ってなくてもだいじょうぶなんだっけ?

361:デフォルトの名無しさん
18/03/10 12:12:18.84 Z1L9sOVC0.net
>>343
xor は少サイクルなのが利点ですね。

362:デフォルトの名無しさん
18/03/10 13:08:59.94 qojMr6PP0.net
アセンブリコードの0にする方法はxorやのう

363:デフォルトの名無しさん
18/03/10 13:24:16.81 +HpaswK40.net
CPU依存すぎる

364:デフォルトの名無しさん
18/03/10 13:47:45.54 f+B2oLbA0.net
Z80時代の爺だろ、放置してやれ

365:デフォルトの名無しさん
18/03/10 14:18:47.85 J/EnQN8G0.net
パチンコ屋さん

366:デフォルトの名無しさん
18/03/10 15:25:43.76 ps/htySn0.net
今じゃ乗除演算さえワンサイクルの時代に何アホな話してんだ?

367:デフォルトの名無しさん
18/03/10 16:20:41.72 HvD6qwC3a.net
アセンブラについてはどうしても自分でアセンブリ言語で書かねばならない事態に陥らない限り書くことはないだろうなあ。

368:
18/03/10 16:50:09.76 +Ww908Qw0.net
>>354
そうそう、printf デバッグでは力不足でもう否が応でも gdb に行くのを逃げ回っているのと同じです

369:デフォルトの名無しさん
18/03/10 17:18:49.50 a2p+alti0.net
gdb は普通に使うなあ。

370:デフォルトの名無しさん
18/03/10 17:35:13.89 5pXC+BOTF.net
printfなめたらいかん

371:デフォルトの名無しさん
18/03/10 17:41:43.93 ps/htySn0.net
割り込みん中でprintf使って暴走してデバッグが出来なかった思い出。

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

373:デフォルトの名無しさん
18/03/10 20:11:43.97 fNi+2/6HM.net
gdbマスターしてからprintデバッグバカにしてたけど
printデバッグ自動化してからprintデバッグ信者になった
無論レアケースデバッグはgdb使うけどね

374:デフォルトの名無しさん
18/03/11 01:20:23.17 ry5KQfC80.net
printf() をデバッグで使う時はバッファリングを考慮していないとハマる事がある。
それと stdout と stderr と両方に出る可能性がある場合にその順序が食い違う可能性もある。
シグナルハンドラ内やマルチスレッドプログラムで使ってうまく行かない事もある。
その辺を全て考慮するならいいだろうが、しかし、それなら初めからログファイルに出力される
ように作った方が良いような気もする。

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

376:デフォルトの名無しさん
18/03/11 09:19:44.59 zWe+i43K0.net
そこまでするならsyslog

377:デフォルトの名無しさん
18/03/11 10:20:33.73 szqHStkk0.net
>>361
setvbuf忘れなければ済む話だよパパ

378:デフォルトの名無しさん
18/03/11 14:10:54.85 ry5KQfC80.net
>>363
そだねー
>>364
本当にそれだけで大丈夫かね?
この頃のライブラリは多分マルチスレッドでもちゃんと動くように内部でロック掛けている部分があると
思うんだけどね、例えばシグナルハンドラの中でそのロックを掛けている最中にまたシグナルが来て
同じシグナルハンドラに入ると同じロックを掛けようとしてデッドロックするなんてことが起こり得ると
思うんだが。(まあその程度のことでデッドロックしてしまうこと自体がバグかも知れんが。それ以前に
シグナルハンドラの中でprintf()は使うなって話でもあるか…)。

379:デフォルトの名無しさん
18/03/11 15:06:05.16 szqHStkk0.net
>>365
ロケールがCならprintfだってスレッドセーフだしぎりぎりシグナルセーフだよパパ

380:デフォルトの名無しさん
18/03/11 15:33:10.91 UYIqocxw0.net
世の中には完全なCライブラリを実装していないタイニーなマシン用のサブセットだってあるんだよ坊や。

381:デフォルトの名無しさん
18/03/11 16:08:45.67 sEfAJdP70.net
それはCじゃないから、このスレで話し合っても無駄では。

382:デフォルトの名無しさん
18/03/11 16:12:01.01 UYIqocxw0.net
Cは言語仕様であって、ライブラリ仕様は別枠だろ?

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

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

385:デフォルトの名無しさん
18/03/11 17:20:27.39 Dtt3qpb50.net
Cライクって言っときゃいいのにCと名乗ってしまうから
イチャモンつけたいヤツの標的になる

386:デフォルトの名無しさん
18/03/11 17:33:57.41 sEfAJdP70.net
本場ドイツ直輸入ポークソーセージを買ったら魚肉ソーセージだったような感じですね。
つまり詐欺です。

387:デフォルトの名無しさん
18/03/11 17:36:14.99 szqHStkk0.net
>>369
それ言ったらバッファリングの話題もCの話にならないだろぉオヤジィ

388:デフォルトの名無しさん
18/03/11 17:37:59.08 iUqzSqql0.net
何が正当な教義かについて議論したければ、上級者スレでやってね

389:デフォルトの名無しさん
18/03/11 18:04:00.35 sEfAJdP70.net
こういう掲示板で宗教対決を規制したら過疎化するんじゃないだろか。

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

391:デフォルトの名無しさん
18/03/11 18:45:46.67 QedwXA9H0.net
>>366
マルチスレッド版のライブラリーがあるかと
行出力中にスレッドが切り替わらない

392:デフォルトの名無しさん
18/03/11 18:48:04.93 QedwXA9H0.net
>>374
なお初代K&Rにはライブラリーの仕様は含まれない。
WhiteSmithとかはprintfが実装されてない

393:デフォルトの名無しさん
18/03/11 20:24:48.92 1mhcZmSWa.net
>>372
セントロニクス

394:デフォルトの名無しさん
18/03/11 21:13:40.31 Dtt3qpb50.net
5Vシングルエンドがそのままコネクタに出てるアレか
アレを基板に直付けするアフォが多くて頭クラクラした

395:デフォルトの名無しさん
18/03/11 23:26:14.78 3FTmPjnp0.net
for(i=0;i<10;i++)
scanf("%d",&num[i])
で入力した変数がiに入ってしまうことがあるのですがなぜですか?

396:デフォルトの名無しさん
18/03/11 23:59:04.31 Sn9rQkOCM.net
numのサイズが10ないとか。

397:デフォルトの名無しさん
18/03/12 00:02:45.79 9wDOvV2B0.net
ソース全部晒せ

398:デフォルトの名無しさん
18/03/12 07:51:36.03 6B2Hj+UH0.net
do whileはいらない子?

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

400:デフォルトの名無しさん
18/03/12 08:36:16.07 SpziwmuNM.net
>>370
プリンタっつーてもピンキリだからなぁ
レシートプリンタとかならその程度で充分かもしれん

401:デフォルトの名無しさん
18/03/12 09:25:52.84 kO6Vn+sG0.net
>>385
んなこたーない
whileのほうが使用頻度は高いけど
本質的に後判定なロジックはそんなに珍しくもない

402:デフォルトの名無しさん
18/03/12 09:30:32.07 Cd8AY8RG0.net
do~whileは、必ず一回は処理してくれるから便利。

403:デフォルトの名無しさん
18/03/12 09:31:53.62 kO6Vn+sG0.net
繰り返し対象処理が実行される条件がブレるから気をつけないといけないけどね

404:デフォルトの名無しさん
18/03/12 10:16:52.94 Igle62xq0.net
do{continue;}while(false); で無限ループになるのウケる。

405:デフォルトの名無しさん
18/03/12 10:19:34.77 kO6Vn+sG0.net
391 error: undeclared symbol 'false'

406:デフォルトの名無しさん
18/03/12 10:42:19.80 wLVR4ID4a.net
>>389
女に見習わせたいな

407:デフォルトの名無しさん
18/03/12 12:03:54.32 A4+OWJSs0.net
こんな書き方たまにする
do{
・・・
条件
break;
・・・
条件
break;
・・・
条件
continue;
・・・
条件
break;
・・・
条件
continue;
・・・
}while(0);

408:デフォルトの名無しさん
18/03/12 12:10:22.44 rLGzoMUT0.net
>>387
一応汎用のレーザープリンターなんだ
30年って一寸行き過ぎだな
95が出てきた頃だから、20年前か

409:デフォルトの名無しさん
18/03/12 12:11:48.84 Igle62xq0.net
>>394
GOTOを怖がるな。
俺は反GOTO教は抜けた。
まぁ乱用しようとも思わんけど。
>>392
文脈で察してくれ。
boolはいったことだし。

410:デフォルトの名無しさん
18/03/12 15:52:19.83 bCYSOHOV0.net
B 判定 A B 判定 A B … みたいに
do { } while () のブロックの途中に飛び込んで開始するようなのが悩ましい
goto ENTER;
do {
 A();
ENTER:
 B();
} while(条件);

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

412:デフォルトの名無しさん
18/03/12 17:15:21.51 bCYSOHOV0.net
for(;;) {
 B();
 if (条件) break;
 A();
};
こんな感じですか。
やっぱり頭から入っていくほうが読みやすいし…

413:デフォルトの名無しさん
18/03/12 17:24:28.52 rLGzoMUT0.net
処理内容がそうならそういうことなんだろうが、
見ていて気持ちが悪くなるロジックだな、すまん

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

415:デフォルトの名無しさん
18/03/12 17:41:10.71 mlDQMbRTa.net
>>397
昔の BASIC を思い起こさせる goto の使い方だなw

416:デフォルトの名無しさん
18/03/12 17:58:00.69 DBOT0xK9M.net
gotoは禁止はしないが、異常系の終了処理にジャンプするパターンだけ許容だな。

417:デフォルトの名無しさん
18/03/12 18:04:50.67 FajbO2mAF.net
exceptionさえあれば

418:デフォルトの名無しさん
18/03/12 18:06:32.58 bCYSOHOV0.net
コンストラクター/デストラクターのような機構があれば
異常時の後始末は割と楽に書けるっすね

419:デフォルトの名無しさん
18/03/12 18:09:46.06 FajbO2mAF.net
atexit()はあるぞ

420:デフォルトの名無しさん
18/03/12 18:2


421:5:47.87 ID:rLGzoMUT0.net



422:デフォルトの名無しさん
18/03/12 19:11:12.71 HQXq1VOq0.net
つ setjmp

423:デフォルトの名無しさん
18/03/12 19:32:23.64 6OIrRNruM.net
>>408
volatileをつけ忘れて最適化で暴走するなんてよくあること。

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

425:デフォルトの名無しさん
18/03/12 21:14:21.91 hz29p2j/p.net
gotoを後始末以外の使い方して変な所に飛ばしたりするから禁止って言われるんだよな。

426:デフォルトの名無しさん
18/03/12 22:09:38.43 kO6Vn+sG0.net
昔のBASICにはON ERROR GOTOとかON ERROR GOSUBつーのがあって
異常系から復帰できたんだよな、それがCやC++にはない

427:デフォルトの名無しさん
18/03/12 22:12:32.16 rLGzoMUT0.net
setjmp longjmp

428:デフォルトの名無しさん
18/03/12 22:16:55.21 kO6Vn+sG0.net
RESUME NEXTに相当する処理はsetjmp.hにはない

429:デフォルトの名無しさん
18/03/12 23:49:45.06 +NwoaeJY0.net
gfortranで言うところのfcheck=allを設定した時のように配列の範囲外アクセスを検知したいのですが、いい方法はありますか?

430:デフォルトの名無しさん
18/03/13 00:26:13.95 zisSqBer0.net
boundschecker 使えばよろし

431:デフォルトの名無しさん
18/03/13 00:43:16.47 LMrPxj1+0.net
Linuxなので代用を探していたらvalgrindに辿り着きました
ありがとうございます

432:デフォルトの名無しさん
18/03/13 03:11:31.37 a0aOTtHi0.net
大域ジャンプはダメだ。

433:デフォルトの名無しさん
18/03/13 07:50:52.88 H/7hRIr60.net
初期化
タイトル
...
GOTO 本編
GAME OVER
...
GOTO タイトル
ゲーム本編
...
GOTO GAME OVER

434:デフォルトの名無しさん
18/03/13 08:44:52.34 a0aOTtHi0.net
>>419
よくあるダメなゴトーさん。

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

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

437:デフォルトの名無しさん
18/03/13 11:04:12.06 92t/zLSk0.net
>>421
そのif文でゴチャゴチャしだしたら「例外処理」を名乗れない

438:デフォルトの名無しさん
18/03/13 11:54:23.49 a0aOTtHi0.net
基本的にウオーターフォールを守るのが大事やな。
そのうえでどこに飛びたいかって感じ。

439:デフォルトの名無しさん
18/03/13 12:12:14.52 .net
フォールウオーバー機構を言語レベルで用意すべき

440:デフォルトの名無しさん
18/03/13 12:16:24.04 a0aOTtHi0.net
URLリンク(www.google.co.jp)
ウオーバーってなんぞ?

441:デフォルトの名無しさん
18/03/13 12:26:22.54 CTGLDN6cM.net
漢字で書くと闘婆

442:デフォルトの名無しさん
18/03/13 13:00:28.5


443:6 ID:5qOlO1LIa.net



444:デフォルトの名無しさん
18/03/13 13:12:03.18 92t/zLSk0.net
>>428
ああ、議論できないのね
いいよ話さなくて

445:デフォルトの名無しさん
18/03/13 13:20:12.96 lXm9DcKjM.net
SIGUSR1/2じゃ駄目なのか?

446:デフォルトの名無しさん
18/03/13 15:58:05.78 LC30GjQRa.net
>>429
議論?何の?新言語の?

447:デフォルトの名無しさん
18/03/13 16:39:07.67 92t/zLSk0.net
>>431
いいよ、無理に話さなくて

448:デフォルトの名無しさん
18/03/13 19:35:09.64 WMMjj2eHM.net
聞く耳持たんらC

449:デフォルトの名無しさん
18/03/13 20:04:26.12 /ChP+Vc3M.net
突っ込まれて遁走だろ w

450:デフォルトの名無しさん
18/03/14 02:09:35.30 IiyiuIPr0.net
ここで幾ら議論してもC言語は変わらない。
Cから派生した言語を新たに作るというのであれば議論することには意味があるだろうが、そうでないならそれはただの愚痴だ。

451:デフォルトの名無しさん
18/03/14 06:44:38.33 4nqAllCK0.net
おまえさあCの例外処理が言語のビルトインとか思っているわけ?
Cは変わらないとか言っちゃってるけど、
その現状のCがわかってないのに変わったかどうか気付けるのか?

452:デフォルトの名無しさん
18/03/14 07:02:59.95 M7iHvccR0.net
一応errnoだったかっていう、失敗理由を示す変数がある事はある。忘れられてるけど。
C言語で唯一トラブルシューティングに使える変数。

453:デフォルトの名無しさん
18/03/14 08:03:51.30 ylQhqnt4M.net
>>436
> その現状のCがわかってないのに
お前だけだろ w
>>437
ライブラリレベルの話を入れるかどうかは悩ましいな
普通の言語なら入れなくてもいいと思うがC言語にはsetjmp/longjmpなんて言うとんでもないものもあるからなぁ

454:デフォルトの名無しさん
18/03/14 08:15:23.77 4nqAllCK0.net
errnoだってwww あれが例外処理なのか
setjmpがどうとんでもないのか具体的には言えないんだろうな
だから聞かない

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

456:デフォルトの名無しさん
18/03/14 08:29:46.90 ylQhqnt4M.net
>>439
> setjmpがどうとんでもないのか具体的には言えないんだろうな
他の言語でライブラリレベルで実装してる例はないから
まともな頭があれば理解できるはず

457:デフォルトの名無しさん
18/03/14 08:31:33.24 6wuH32OAd.net
高級アセンブラの名前は伊達ではないよね。

458:デフォルトの名無しさん
18/03/14 08:32:17.72 M7iHvccR0.net
あれジャンプじゃなくて、スタックロールバックだからな。どっちかっていうとリセットの類。
他の言語でこれは実装できない。というかやりたくはないだろう。

459:デフォルトの名無しさん
18/03/14 08:35:45.72 M7iHvccR0.net
大域ジャンプ+動的メモリアローケート。あぁおそろしい。
なので、大域ジャンプはやめましょう。

460:デフォルトの名無しさん
18/03/14 08:37:30.11 ylQhqnt4M.net
>>440
> 大域ジャンプするとエラー処理したところが戻ったりして変数グチャグチャになることがあるからな。
それはお前の能力が足りないだけの話だろ w
> まぁ、C++の例外も大域ジャンプだし。
C++はデストラクタとかの処理も要るからライブラリレベルでは実現できない
そう言う処理を全てプログラマに押し付けられるC言語だからできるってことでもある

461:デフォルトの名無しさん
18/03/14 08:41:34.04 M7iHvccR0.net
>>445
あーすげー。この人、他人がいじった変数全部把握してるんだな。すげー。
メモリ確保したのなかったことになっても正常系に戻せるんだな。
超人か!!

462:デフォルトの名無しさん
18/03/14 08:45:22.60 M7iHvccR0.net
C++のクラス機構をライブラリで実装するときは、構文糖入れたりとか、イベントモデル入れたりとか。
エネルギーばかりかかって収穫がない。

463:デフォルトの名無しさん
18/03/14 09:25:24


464:.96 ID:ZphqLecba.net



465:デフォルトの名無しさん
18/03/14 09:28:14.80 ooB4nY3v0.net
Cにだって例外処理はある。
でもそれって、CPUの例外割り込みの事だけどね。
あー結局言語仕様じゃ無いじゃんw

466:デフォルトの名無しさん
18/03/14 09:29:50.23 ZphqLecba.net
>>449
ほら。ないよな?

467:デフォルトの名無しさん
18/03/14 09:32:49.61 ZphqLecba.net
割り込みっていうならシグナルがあるがしかしOSの問題だよな?
てか標準じゃないか。それにシグナルのために特別な言語仕様が作られてもいない。

468:デフォルトの名無しさん
18/03/14 09:35:13.20 ooB4nY3v0.net
所詮Cは高級アセンブラだからなぁ

469:デフォルトの名無しさん
18/03/14 10:19:21.23 4nqAllCK0.net
>>441
現状のCの話じゃなかったのか?
なんで他の言語が出てくるんだ
俺はてっきりsetjmpの仕様がとんでもないと言っているのかと思ったが
実装方法がとんでもないと言っているのか?
あれか動作保証のないマイクロ診断命令でも使っていると言いたいの?

470:デフォルトの名無しさん
18/03/14 10:20:28.21 4nqAllCK0.net
>>448
言語を定義する規格票が定義しているライブラリのことだよ
まさか知らんのか?

471:デフォルトの名無しさん
18/03/14 11:44:11.11 jowRUKsS0.net
何やら雰囲気が悪くなってるように感じるけど、カレンダー絡みかな。

472:デフォルトの名無しさん
18/03/14 12:08:39.92 L/3+Hz1H0.net
やたら突っかかってくるやつを構ってやっているだけだが

473:デフォルトの名無しさん
18/03/14 12:22:56.52 e7inwI4na.net
>>454
知らんなあ。Cの例外処理ってなんなの?

474:デフォルトの名無しさん
18/03/14 12:24:13.25 y6ADsCAy0.net
ここは遊び場ではありません

475:デフォルトの名無しさん
18/03/14 12:52:15.53 L/3+Hz1H0.net
>>457
そうか、知らんのか
じゃあ話にならんな

476:デフォルトの名無しさん
18/03/14 12:53:42.74 e7inwI4na.net
>>459
何のことなのかぜひ書いてくれ。

477:デフォルトの名無しさん
18/03/14 12:53:55.90 L/3+Hz1H0.net
人の話の腰を折ることに専念せざるを得ない防戦一方なつまらんやつ

478:デフォルトの名無しさん
18/03/14 12:55:02.45 L/3+Hz1H0.net
>>460
おまえ、そこで3回まわってワンといえ
書いてやるかも知んねーからw

479:デフォルトの名無しさん
18/03/14 12:55:16.50 x85VLsABM.net
>>446
むしろそう言うのを把握せずにどうやってプログラム組んでるんだよ?
動けばラッキーってか? w

480:デフォルトの名無しさん
18/03/14 12:58:38.88 x85VLsABM.net
>>453
> 現状のCの話じゃなかったのか?
> なんで他の言語が出てくるんだ
どんだけ理解力がないんだよ...
> 俺はてっきりsetjmpの仕様がとんでもないと言っているのかと思ったが
> 実装方法がとんでもないと言っているのか?
だから他の言語ではライブラリでは実装しづらい機能って話な
> あれか動作保証のないマイクロ診断命令でも使っていると言いたいの?
背伸びしてマイクロ診断命令とか言い出すとか w

481:デフォルトの名無しさん
18/03/14 13:00:11.52 e7inwI4na.net
もしやこんなやつの事を言ってるのか?
URLリンク(d.hatena.ne.jp)

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

483:デフォルトの名無しさん
18/03/14 13:02:58.32 e7inwI4na.net
>>462
言ったぞ。早く書け。

484:デフォルトの名無しさん
18/03/14 13:04:49.57 e7inwI4na.net
あ、関係ないけどホーキング博士が死んだという速報が入った。

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

486:デフォルトの名無しさん
18/03/14 13:43:20.07 Ul+PcfeA0.net
HDLCの状態遷移を大域jump無しで書くのは大変だろうなぁ

487:デフォルトの名無しさん
18/03/14 13:48:42.43 M7iHvccR0.net
さぁ、未経験だからね。

488:
18/03/14 14:09:18.81 J4jCJ0kF0.net
>>468
うん、確認した

489:デフォルトの名無しさん
18/03/14 14:51:40.09 L/3+Hz1H0.net
>>467
そんな約束してねえぞゲーハー

490:デフォルトの名無しさん
18/03/14 14:54:07.64 L/3+Hz1H0.net
>>469
gotoじゃなくGOTOね


491: Cに限らない一般論ということだな しかしlongjmpやthrowなんか大域ジャンプだろ おまえさんはそう思わないのか?



492:デフォルトの名無しさん
18/03/14 15:26:30.92 2cAisCwCF.net
>>452
それな
Cのソース書きながらアセンブラのソースが思い浮かぶ

493:デフォルトの名無しさん
18/03/14 17:04:58.74 buZ+p9lOa.net
>>473
早く書けよ。こっちゃあ昼からずっと回ってワンワン言いっぱなしなんだからよ。もう千回ぐらい回ったぞ。

494:デフォルトの名無しさん
18/03/14 17:08:34.94 L/3+Hz1H0.net
>>476
よかったな
ほら、もう1000回
# アホ

495:デフォルトの名無しさん
18/03/14 17:14:31.52 buZ+p9lOa.net
他の人でこいつの言うことわかってるやつ居るのか?

496:デフォルトの名無しさん
18/03/14 17:24:39.97 L/3+Hz1H0.net
犬に邪魔されて説明どころではない状態だからなあ

497:デフォルトの名無しさん
18/03/14 18:08:46.89 m9sKyebjH.net
情報持ってるふりして出し惜しみするのがマウンティングの基本

498:デフォルトの名無しさん
18/03/14 18:24:47.12 2cAisCwCF.net
朝日新聞ですねわかります

499:デフォルトの名無しさん
18/03/14 18:29:37.08 L/3+Hz1H0.net
煽れば出ると本気で思っているならやってみな
この程度の話、マジこの程度にも付いて来れないアホの泣き声は物笑いの種だぜ

500:デフォルトの名無しさん
18/03/14 18:30:37.68 uMO7yRavM.net
>>469
無駄じゃねーよ、把握しろ
把握しやすく設計するのも能力のうち

501:デフォルトの名無しさん
18/03/14 18:32:36.61 uMO7yRavM.net
>>480
持ってるふりすらできてないだが...
どうみてもいっぱいいっぱいやん w

502:デフォルトの名無しさん
18/03/14 18:41:41.61 buZ+p9lOa.net
ま、どうでもいいから>>436で書いたC言語の例外処理についてどういうものなのか書けよ。

503:デフォルトの名無しさん
18/03/14 18:52:07.48 L/3+Hz1H0.net
>>485
それよりあと1000回だぞ
急がないと日付が変わっちまうぞw

504:デフォルトの名無しさん
18/03/14 19:21:46.36 buZ+p9lOa.net
わかったわかった。もう書かなくていいよ。かわいそうなやつだな。合掌。

505:デフォルトの名無しさん
18/03/14 19:45:37.85 IogLKo4e6.net
ID:L/3+Hz1H0に構うな

506:デフォルトの名無しさん
18/03/14 21:53:59.94 L/3+Hz1H0.net
収穫ゼロで引き下がる、みじめなヤツw

507:デフォルトの名無しさん
18/03/15 06:38:35.49 z1/gBAj5d.net
Cでエクセルの指定シートだけテキスト化できます?

508:デフォルトの名無しさん
18/03/15 07:11:47.68 .net
>>490
できますん
Excelがインストールされている環境で動かす前提であれば
COMコンポーネント (Microsoft Excel Object Library) を使えばいいが
C++じゃないとダメかも
自前でExcelフォーマットを解析して変換することも
膨大な工数を費やせば理論的にはできるだろうが
現実的には選択肢に入らないな
xlsx限定ならまだ楽かも知れんが
Excelを扱う部分は他の言語で開発してCからはそれを呼び出すのが普通かな

509:デフォルトの名無しさん
18/03/15 07:16:10.04 BwZLx9bwM.net
>>490
できるけど結構面倒だよ
ところでなんでC縛りなの?
なんかの苦行とか?

510:デフォルトの名無しさん
18/03/15 07:53:33.32 /GlmcHqY0.net
Cにあっていると思う
バイナリを呼んでキャストして
キャスト後も分岐ルートが色々あって
構造体はほとんど可変長
細かいものを組み上げるのは、たぶん Cが最適

511:デフォルトの名無しさん
18/03/15 09:54:54.80 W95zVRhkp.net
FIFO(名前付きパイプ)で、大量データを分割して送受信したいです。

送信側
---------------------------
buff=malloc(datalen);
len=512;
pos=0;
do{
w=write(fifo,buff+pos,len);
pos+=w
datalen-=w
len=datalen < 512 ?


512: datalen : 512 }while(0<datalen) --------------------- こんなんでok?



513:デフォルトの名無しさん
18/03/15 10:35:33.07 v5sVsR9k0.net
・最初に飛び込んでくる段階で datalen が 分割サイズ(512) より小さい時の考慮
 (ループ中と同じ記述で良いのでは?)
・書けなかった時(w=0 だったとき) の脱出をケアする
ぐらいでしょうか

514:デフォルトの名無しさん
18/03/15 10:45:14.98 lf1N2aO70.net
SIGPIPEで死ぬぽ。

515:デフォルトの名無しさん
18/03/15 10:49:38.59 c+umNtGLp.net
マジックナンバー使うな。

516:デフォルトの名無しさん
18/03/15 11:01:51.80 OczprsBK0.net
>>496
シグナルは悪い文明! 粉砕する!

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

518:デフォルトの名無しさん
18/03/15 12:19:33.36 KGbgKLI3a.net
>>494
エラー処理が抜けてる。

519:デフォルトの名無しさん
18/03/15 12:21:39.25 KGbgKLI3a.net
>>496
そうそう。しかしその辺はOSや接続先によって違うかも。

520:デフォルトの名無しさん
18/03/15 16:10:59.70 CR6uT/FI0.net
>>494
これの受信側read()のコードを求むm(__)m

521:デフォルトの名無しさん
18/03/15 16:16:36.38 umqIWKjV0.net
【守銭奴】  株・FX・トレーダー  <キリスト"再臨″>  史上初テレパシー演説  【救世主】
スレリンク(liveplus板)

522:デフォルトの名無しさん
18/03/15 17:42:18.79 v5sVsR9k0.net
プロトコルなんか無しに来たものを読みきるだけの話なら
allocsz = blocksz = 512
buff = malloc(allocsz);
use = 0;
for (;;) {
 w = read(FIFO, buff+use, allocsz-use);
 if (w == 0) { /* もう来ない */
  break;
 } else if (w > 0) {
  use += w:
  if (use >= allocsz) {
   // 器が尽きた
   allocsz += blocksz;
   buff = realloc(buff, allocsz); // 手抜きで realloc
  }
} else { /* エラーケアしてね */ }
}
buff に use バイトだけ収まってる

523:デフォルトの名無しさん
18/03/15 17:56:13.79 lf1N2aO70.net
>buff = realloc(buff, allocsz)
リークするからやめなよ。

524:デフォルトの名無しさん
18/03/15 18:05:35.40 c+umNtGLp.net
ヒープなんか使わずに配列にして自己管理せい。

525:デフォルトの名無しさん
18/03/15 18:12:47.89 yyzFA25Ma.net
ヒープに配列用のメモリを確保しているわけで・・・

526:
18/03/15 18:18:50.14 xYxZI4zx0.net
>>505
ん?realloc() はリークするのか?

527:片山博文MZ
18/03/15 18:24:18.46 mTrAuuczd.net
>>508
割り当てに失敗したらリークするよ。

528:
18/03/15 18:34:07.27 xYxZI4zx0.net
>>509
確認した
buff = realloc(buff, allocsz) という書き方は、たしかに realloc() に失敗すると buff が null で上書きされてしまうのでまずいね

529:デフォルトの名無しさん
18/03/15 18:43:54.61 T5+tR1ew0.net
戻りを別の変数で受けて確認してから代入

530:片山博文MZ
18/03/15 18:51:29.92 mTrAuuczd.net
前、ANSI準拠のreallocは、mallocとfreeの代わりになるって話をしたよな。
だから、最初のmallocは、NULLに対するreallocで置き換えできるんだよ。

531:片山博文MZ
18/03/15 18:52:49.68 mTrAuuczd.net
それから、この場合はintよりもsize_tを使った方がいい。

532:デフォルトの名無しさん
18/03/15 20:39:48.98 yyzFA25Ma.net
>>512
最初だけ、な。

533:デフォルトの名無しさん
18/03/15 23:54:08.20 NmT4VXxza.net
素朴な疑問なんですが、Cでメンバ関数を関数ポインタで定義して、そのメンバ関数から引数なしにメンバ変数を参照


534:することってできませんか?



535:デフォルトの名無しさん
18/03/16 00:14:09.63 LkWvbaD00.net
>>515
メンバ関数ってなんですか?

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

537:
18/03/16 01:37:32.81 GsmhGHn70.net
>>515
スレリンク(tech板:39番)
メンバ関数 h() を返す メンバ関数 g() を定義
メンバ関数へのポインタ f を定義
メンバ関数へのポインタ f にメンバ関数 g() の返り値を代入
ここでメンバ関数へのポインタ f にはメンバ関数 h() が格納されている
->* 演算子を使用してメンバ関数へのポインタ f が指すメンバ関数 h() を実行、 h() ではメンバ変数 C::a を出力する

538:デフォルトの名無しさん
18/03/16 02:08:17.17 w3tL3lE3M.net
>>518
スレタイ見ろ

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

540:デフォルトの名無しさん
18/03/16 05:57:40.20 PrpOQ5WH0.net
(&p)->memberなんてまずやらん
p.memberで同じことができる

541:デフォルトの名無しさん
18/03/16 06:50:12.92 3pmuZEr10.net
>>521
それやったらコンパイラにそんな構造体変数ないぞって言われた

542:デフォルトの名無しさん
18/03/16 08:05:49.18 w3tL3lE3M.net
>>522
質問するときは変数の宣言も使う文脈も省略せずに書け

543:デフォルトの名無しさん
18/03/16 08:16:43.56 6+mGA4RRM.net
>>522
&p->membar
(&p)->membar

544:デフォルトの名無しさん
18/03/16 10:27:00.36 DfshN/+jp.net
型教えないと何やっても無理だろ。
あと。下手に型変換させると、奇数バイトからワード処理とかさせてしまい、石によっては例外処理が走るか暴走するよな。

545:デフォルトの名無しさん
18/03/16 11:29:31.94 07ayGtU0a.net
cのコンパイラ作るのにアセンブラの知識は必要?

546:デフォルトの名無しさん
18/03/16 11:38:22.80 ObjPIdw20.net
今なら、LLVMがあるからコード生成はそちらに任せるという
選択肢があるね。

547:
18/03/16 11:59:50.08 GsmhGHn70.net
>>526
コンパイルというくらいだから、最後に機械語に落とし込むのにアセンブラの知識は必要になるのではないか?

548:デフォルトの名無しさん
18/03/16 12:01:10.57 rupS10t30.net
C++ to C コンパイラとか 生成物が機械語で無いのもあるんじゃね?
(昔そういうの欲しかった)

549:デフォルトの名無しさん
18/03/16 12:19:28.27 56A/2jiga.net
>>517
Cには無理なんですね
ありがとうございます

550:
18/03/16 12:33:16.00 GsmhGHn70.net
>>530
>>515 でメンバ関数という言葉を使うのだから C++ を仮定している、というのならば C++ では >>518 で可能
C で可能かどうかを問題にしているのであれば、>>515 のメンバ関数という言葉が自己矛盾

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

552:デフォルトの名無しさん
18/03/16 12:47:14.28 0ILmeguTa.net
>>529
C++の初期のコンパイラはそういうやつだった。つまり、Cへのコンバータだった。

553:デフォルトの名無しさん
18/03/16 13:59:12.95 DfshN/+jp.net
ああ、各ファイルの先頭に構造体の領域宣言とか関数にいちいち構造体のポインタが追加されるんだよな。

554:デフォルトの名無しさん
18/03/16 14:00:33.86 ITdJ1YV3a.net
そういや昔々のX68000のBASICにもCへのコンバータがあったな。

555:デフォルトの名無しさん
18/03/16 14:26:36.05 DfshN/+jp.net
俺は、6502アセンブラコードをCに変えるコンバータ作ったけどな。

556:デフォルトの名無しさん
18/03/16 15:25:35.34 relEB8IL0.net
アセンブリをprintfにパースするのって大変なのかな。

557:デフォルトの名無しさん
18/03/16 15:57:57.02 ScqC3AYEa.net
>>531
ではどういう言葉なら齟齬なく伝わりましたか?

558:デフォルトの名無しさん
18/03/16 16:00:12.76 HNnsk+Eya.net
>>538
「関数へのポインタ」では?
それが構造体のメンバとしてあるわけだし。

559:
18/03/16 16:12:40.83 GsmhGHn70.net
>>538
コード断片で示すのもよい、誰かがコードを補完してくれるだろう

560:デフォルトの名無しさん
18/03/16 16:25:31.83 3ma6aQHvF.net
アスペとの会話ってつかれるよな

561:デフォルトの名無しさん
18/03/16 16:57:51.61 PrpOQ5WH0.net
Cスレで「メンバ関数」だぜ?
それをアスペとか、どんだけボキャ貧なんだよ

562:デフォルトの名無しさん
18/03/16 16:59:08.32 3ma6aQHvF.net
>> 542
おまえがアスペか

563:デフォルトの名無しさん
18/03/16 20:29:17.66 56A/2jiga.net
>>539
> Cでメンバ関数を関数ポインタで定義して
一応そのつもりで書いたんだけどなあ
アスペ基準に合わせようとした俺が悪かったのか

564:
18/03/16 21:09:53.74 GsmhGHn70.net
>>544
・関数ポインタとは別に「メンバ関数」というテクニカルタームが C++ にあった
・C/C++ の区別がついていない人の質問も、ここではよくみかける
という背景があって小さな誤解が発生したまでのこと、気にするでない、苦しゅうないぞ

565:デフォルトの名無しさん
18/03/16 21:13:51.61 nemrSVupM.net
>>526
どうやってコード生成部分を作るつもりなんだよ...

566:デフォルトの名無しさん
18/03/16 21:59:39.71 PPQOkRTja.net
マシン語があれば充分のんじょのいこの

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

568:デフォルトの名無しさん
18/03/16 22:51:53.37 SxfrRBUw0.net
ラノベ出力してくれるコンパイラってステキ

569:デフォルトの名無しさん
18/03/16 22:53:03.55 d0lIgzUw0.net
誰も決めてないしマシン語じゃなくてアセンブラのソース出すコンパイラはいくらでもあるし

570:デフォルトの名無しさん
18/03/16 23:46:17.13 ObjPIdw20.net
VHDL出してもいいよね~

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

572:デフォルトの名無しさん
18/03/17 03:07:05.34 ZFtG2t0c0.net
C++の非仮想関数 == Cの普通の関数
C++の仮想関数 == structの項(vtbl)の項

573:デフォルトの名無しさん
18/03/17 04:35:29.26 YYJgzE2Qa.net
>>553
違うね

574:デフォルトの名無しさん
18/03/17 07:17:45.03 qzfhHg+K0.net
>>553
上の方の関数。普通の関数pointerで保持出来るの?

575:デフォルトの名無しさん
18/03/17 07:35:06.72 zYYcg2u/0.net
C++のextern "C"関数 == Cの関数
Cに普通じゃない関数ってあるんだっけ

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

577:デフォルトの名無しさん
18/03/17 08:58:53.90 qzfhHg+K0.net
>>557
先生、非仮想なメンバー関数をcの構文では保持出来ません。
例をご教示願います

578:デフォルトの名無しさん
18/03/17 09:00:39.42 .net
>>558
「上の方の関数」すなわち「Cの普通の関数」を
「普通の関数pointerで保持出来るの?」
→Cの普通の関数は、普通の関数ポインタで保持できます
質問文に忠実に答えただけだが、何か問題でも?

579:デフォルトの名無しさん
18/03/17 13:08:05.54 8xjJdoU40.net
Cにゃメンバーって言語レベルの概念は無いから、そういうのはコーディング時に人様がメンバーのつもりになる書き方を明示的にやらないとならないんだよな。

580:デフォルトの名無しさん
18/03/17 13:47:23.11 8tKqJ0BR0.net
namespace のことを脇においとけば
非仮想関数って FILE 構造体と その関数だべ

581:デフォルトの名無しさん
18/03/17 13:51:13.91 V9AqDEvW0.net
LLVMはまずパースレイヤーが中間言語出力して中間言語を解釈するレイヤーが各種コードに吐き分けるということができる。
3段階のコード最適化ができるはずだったが、ち


582:ょっと迷走してる。



583:デフォルトの名無しさん
18/03/17 16:56:54.32 x+XAbvy+0.net
>>557
struct A
{
void func() {} //C++の非仮想関数
};
void (*ptr)(); //普通の関数pointer
ptr = &A::func; //まさかできると思った?

584:
18/03/17 18:20:57.82 qqOQsVrX0.net
>>555
できませんね
URLリンク(ideone.com)

585:片山博文MZ
18/03/17 18:25:10.24 6umCop+Md.net
クラス内部の関数をstaticにすると、、、

586:片山博文MZ
18/03/17 18:26:02.67 6umCop+Md.net
普通の関数みたいに参照できる。

587:デフォルトの名無しさん
18/03/17 20:05:40.42 x+XAbvy+0.net
ここはCスレということをお忘れなく

588:デフォルトの名無しさん
18/03/18 08:12:11.88 5MZOkfmV0.net
URLリンク(ideone.com)
上のコードを見てください。
sprintfを続けて使うと文字が一つも出力されません
なぜですか?

589:デフォルトの名無しさん
18/03/18 08:14:12.57 5MZOkfmV0.net
ちょっと間違えました。
上の投稿は無視してください

590:デフォルトの名無しさん
18/03/21 22:30:20.44 Pk5+CKOYa.net
ニキ
配列で array[i] と i[array] て同じナンスカ?
後者の違和感すげーあるんスけどこういう風に書くことのメリットってかどっちが普通なんでしょうか

591:デフォルトの名無しさん
18/03/21 22:33:57.97 MsjTjvgF0.net
ポインターはINTに変換できる事もある。
んで、arrayはhogeっていうアドレス値を持ってる。
iはhageていう数字を持ってる。
生の数字でhoge+hage=i+arrayである。
まぁ、後者の書き方は普通しない。

592:デフォルトの名無しさん
18/03/21 22:34:54.75 DQv7yGEy0.net
アセンブラではオフセット[レジスタ]が普通
どっちが普通なんてくだらねえことだ

593:デフォルトの名無しさん
18/03/21 22:36:13.14 D2465Z9CM.net
offsetofマクロの実装を見て見なされ
オフセット値の算出にポインタ使っているでしょ

594:デフォルトの名無しさん
18/03/22 00:04:45.10 dLiR/Xt3M.net
a[b] は *(a+b) のシンタックスシュガー

595:
18/03/22 00:19:52.50 2FEQ/Wa30.net
>>435
そうともいえない
一見目的のない議論が、将来の偉材を今育てているのかもしれない

596:
18/03/22 00:23:55.20 2FEQ/Wa30.net
>>441
知らないのか?
setjmp/longjmp は、かつては例外(exception) の標準的な実装方法だったんだよ
OS に構造化例外機能がなかったときは sjlj が主流だったんだ

597:デフォルトの名無しさん
18/03/22 04:56:30.90 0SzB6c710.net
>>576
お前のご託はどうでもいいから
> 他の言語でライブラリレベルで実装してる例
をだしてみろよ

598:デフォルトの名無しさん
18/03/22 09:40:57.08 Q2/ylW7bF.net
BDS-Cとかあったな

599:デフォルトの名無しさん
18/03/22 10:22:59.95 lT3wziJ7p.net
>>570みたいなのは、キャストしないと使えねーだし。

600:デフォルトの名無しさん
18/03/22 13:44:55.99 suw09sJq0.net
>>579
え?使えるよ。単に *(i + array) になるだけだし。

601:
18/03/22 13:56:04.06 2FEQ/Wa30.net
>>577
mingw/gcc-3 あたりまでは SEH ではなく sjlj だったと記憶している
ググってみるとちらほら出てくる

602:デフォルトの名無しさん
18/03/22 14:36:34.98 tPQcb8ora.net
SEHって何かと思ったらMS独自のやつか

603:デフォルトの名無しさん
18/03/22 19:43:32.85 qO2s+USWM.net
>>581
他の言語って書いてあるのに
話そらそうと必死だな w

604:
18/03/22 20:58:32.18 2FEQ/Wa30.net
>>583
C と C++ は違う言語だろう?(棒読み)

605:デフォルトの名無しさん
18/03/22 21:06:38.53 qO2s+USWM.net
>>584
そんなものまで持ち出さないと自我が壊れちゃうのか? w

606:デフォルトの名無しさん
18/03/24 19:49:48.79 wXlHUBLAa.net
ニキやっぱFEぐらいのC過去問なら余裕の満点すか?

607:デフォルトの名無しさん
18/03/24 22:33:50.23 glVyz9hR0.net
>>573 >オフセット値の算出にポインタ使っているでしょ そうか? offsetofの結果は整定数式になる必要があるが、 ポインタ演算を使った式が整定数になる保証がないので別の手段を使っている場合がある。



609:デフォルトの名無しさん
18/03/24 22:37:51.52 M0MLze13M.net
>>587
具体的に

610:デフォルトの名無しさん
18/03/25 00:05:52.92 r2Id4T4+0.net
>>586
例えばどんなの?

611:デフォルトの名無しさん
18/03/25 07:25:18.09 S7OmeNGW0.net
Visual Studio 2017
#define offsetof(s,m) ((size_t)&(((s*)0)->m))
gcc 7.2.0
#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
clang 6.0.0
#define offsetof(t, d) __builtin_offsetof(t, d)
borland 5.5.1
#define offsetof( s_name, m_name ) (_SIZE_T)&(((s_name _FAR *)0)->m_name)

612:デフォルトの名無しさん
18/03/25 15:04:40.75 9t80sXyiM.net
>>587
>ポインタ演算を使った式が整定数になる保証がないので別の手段を
ポインタ演算の結果が浮動小数点とか変数になる例早よう出しなされ

613:デフォルトの名無しさん
18/03/25 15:25:31.63 wNhLkN4j0.net
メモリーの仕切り壁に落書きするポインタ
9と3/4番線ホームから出発する列車を指し示すポインタ
あれば便利かも知れないが(何がだ)

614:デフォルトの名無しさん
18/03/25 17:42:21.62 S7OmeNGW0.net
鉄道に例えるならポイント(線路の分岐)を制御するデコーダに与える信号がCのポインタだ

615:デフォルトの名無しさん
18/03/25 18:06:41.94 qleen6XJF.net
それじゃ型が考慮されてない

616:デフォルトの名無しさん
18/03/25 18:24:31.28 EKcNWVxa0.net
>>591
その前に、まずはポインタ演算を使った結果が整定数になることが保証されている例を出してくれ。
当然規格は読んでいるよね。6.6p6より
> An integer constant expression shall have integer type and shall only have operands
> that are integer constants, enumeration constants, character constants,
> sizeof expressions whose results are integer constants, and floating constants that are the
> immediate operands of casts.

617:デフォルトの名無しさん
18/03/25 18:28:29.51 S7OmeNGW0.net
汎整数型定数をポインタにキャストまたは暗黙に変換した式は定数式(たとえば空ポインタ定数は定数式)
その定数式を整数にキャストし直した式が定数式でなくなる根拠はない

618:デフォルトの名無しさん
18/03/25 18:29:11.25 .net
>>595
先生!
>>587で 「ポインタ演算を使った式が整定数になる保証がないので別の手段を使っている場合がある。」
って言い切ってるんだから、その「場合」とやらを僕も知りたいです!

619:デフォルトの名無しさん
18/03/25 18:53:41.81 EKcNWVxa0.net
>>596
>その定数式を整数にキャストし直した式が定数式でなくなる根拠はない
でもそれは整定数式ではないよね。
規格にはキャスト前の型が算術型でなければならないとある。
> Cast operators in an integer constant expression shall only convert arithmetic types to integer types, except as part of an operand to the
> sizeof operator.

620:デフォルトの名無しさん
18/03/25 19:02:02.77 z318xA/90.net
(配列等で)連続が保障されてるときには要素数が求まるようにはなってるけど
連続性のないポインタの差分は鼻から悪魔だったような
規格? みてない

621:デフォルトの名無しさん
18/03/25 19:05:21.84 S7OmeNGW0.net
>>598
俺は根拠がないと言ったんだが
それをすっ飛ばして整定数式ではないと言われてもねえ

622:デフォルトの名無しさん
18/03/26 07:31:09.27 Sl5sXtlN0.net
で、587は逃げたのか

623:デフォルトの名無しさん
18/03/26 09:52:06.25 5fqWa8qC0.net
今日からC言語を始めたのでよろしくです

624:デフォルトの名無しさん
18/03/26 10:39:34.46 9cQp/9Bmp.net
ご愁傷様

625:デフォルトの名無しさん
18/03/26 11:35:27.48 0ihjlnG/0.net
a[b*c];
のようにしてもassemblyコードがアドレッシングモードじゃなくて
掛け算してしまうんですけどどうしたらアドレッシングモードで計算するように
なりますか?

626:デフォルトの名無しさん
18/03/26 11:54:06.58 dvRuSlEv0.net
>>604
b と c とを使って何をしたいのでしょうか?

627:デフォルトの名無しさん
18/03/26 12:03:06.83 EmWkiz+YM.net
>>604
何がしたいのかよくわからないけど、エスパーすると
Cソースで変数のセクションを指定して、リンカでそのセクションの配置を
期待するアドレスに配置すればいいんじゃないかな。

628:デフォルトの名無しさん
18/03/26 12:09:23.11 0ihjlnG/0.net
struct a{
int a;
int b;
};
struct a x[100];
void *v=x;
void *h(int n, int s){
return ((char *)v+n*s);
}
struct a *i(int n){
return &x[n];
}
同じことをしているのにhは掛け算するのにiは掛け算をアドレッシングモードでしているので
処理速度の差が生まれてしまいます。

629:デフォルトの名無しさん
18/03/26 12:12:26.75 0ihjlnG/0.net
自己解決しました。

630:デフォルトの名無しさん
18/03/26 12:12:50.68 EmWkiz+YM.net
struct aにキャストしてから計算すればいいという話ではなくて?

631:デフォルトの名無しさん
18/03/26 12:18:06.83 0ihjlnG/0.net
nかsは定数じゃないと駄目みたいでした。

632:デフォルトの名無しさん
18/03/26 12:31:41.16 k+G5ovIGM.net
sがなんだかわからないけど
void *h(int n, int s){
return ((struct a *)v+n*s);
}
じゃだめなん?
s=1ならi()と同じだと思うけど。

633:デフォルトの名無しさん
18/03/26 12:37:07.82 0ihjlnG/0.net
struct a *は8バイトなので8を入れればよいのです。

634:デフォルトの名無しさん
18/03/26 12:40:49.01 v3bCx+j3M.net
ブロックサイズみたいなイメージかな。
だったらsizeof(struct a)にしたほうがよいかと。

635:デフォルトの名無しさん
18/03/26 13:35:11.46 ioIbXl47a.net
>>612
それは違う環境に持っていってコンパイルしたら破綻するかも知れない。
やはりsizeof使うかそのまんまポインタ計算させた方が良いのでは?

636:デフォルトの名無しさん
18/03/26 14:37:40.54 g7RAb+fM0.net
最適化されたらおんなじじゃね?

637:片山博文MZ
18/03/26 14:44:36.91 42MV7MT1d.net
struct a*のサイズは32-bit 環境だと4だよな。64ビットだと8バイト。

638:片山博文MZ
18/03/26 14:47:59.15 42MV7MT1d.net
ポインタを操作するなら、size_tとかptrdiff_t使った方がいいな。

639:デフォルトの名無しさん
18/03/26 15:00:59.23 +d/fyZgca.net
>>616
ここでは構造体の実体の配列だからsizeof(struct a)で大丈夫。
int1つのサイズは典型的には4byteだけど、IP64だのあまり見ない
データモデルでは8byteのこともあるから、構造体のサイズを使うときは
sizeofがよい(MAY)、ではなくてsizeofにすべき(ほぼMUSTのSHOULD)。

640:デフォルトの名無しさん
18/03/26 17:51:14.16 wby0cWXW0.net
>>598
おまえさんが言いたいのは、これのことか?
URLリンク(ideone.com)

641:デフォルトの名無しさん
18/03/26 17:52:53.38 5fqWa8qC0.net
本買うならどれがいい?
本より優れたサイトがあるならそれでもいいぞ

642:デフォルトの名無しさん
18/03/26 19:16:37.53 b1dSvJWqM.net
>>620
きつねさんとおぼえる clang
きつねさんとおぼえる clang おかわり


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch