C言語なら俺に聞け 145

レス数が1000を超えています。これ以上書き込みはできません。
2018/02/19(月) 22:13:58.98ID:9/te2eSJ0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


C言語なら俺に聞け 144
https://mevius.5ch.net/test/read.cgi/tech/1514025223/

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2デフォルトの名無しさん (アウアウエー Sadf-kYbg)
垢版 |
2018/02/20(火) 02:33:02.25ID:ji3scNPMa
屑はFPGA用のCの話でもしたかったのかな
2018/02/20(火) 02:44:25.94ID:m4PE5Z7I0
C言語の話題のみ取り扱います
2018/02/20(火) 14:09:01.08ID:/DCDJ0JEd
ptintfの%nはハッカー用に用意されているのでしょうか?
2018/02/20(火) 15:18:27.75ID:hfa6NjO10
違います
デジタル回路の設計用です
6デフォルトの名無しさん (アウアウエー Sadf-kYbg)
垢版 |
2018/02/20(火) 17:08:35.47ID:mAwVhufea
0xがあるのに
0bがないので面倒っちい
2018/02/20(火) 18:08:25.47ID:cb0RUbY/d
visual studioが重いからvisual studio codo使って勉強してますが、これでデバッグできる環境設定がネットのだとよく分からないんですがどうやってやれば出来ます?
2018/02/20(火) 19:11:44.29ID:qvO4qxFaa
スレチだがVSが重い環境ってのが気になる
2018/02/20(火) 21:29:40.57ID:TNHwfC6jM
オトコは黙ってG・D・B
2018/02/20(火) 21:56:11.61ID:SJPS4KKx0
>>9
gdb からは逃げ回っています、可能な限り printf() デバッグの方を選択します
11デフォルトの名無しさん (ワッチョイ 579f-+35F)
垢版 |
2018/02/21(水) 00:51:16.84ID:srFoMZ/m0
そしてバッファリングされてしまうと
2018/02/21(水) 00:54:55.04ID:jU0tYaxw0
>>11
fflush() は必ずペアで使いますよ、まあそれでも iostream<<と混在させるとぐちゃぐちゃになりますね
2018/02/21(水) 03:09:16.23ID:srFoMZ/m0
ここはC言語のスレなので iostream の事は忘れてくれ。
14デフォルトの名無しさん
垢版 |
2018/02/21(水) 07:13:52.97
setbuf(stdout, null);
setbuf(stderr, null);
しとけばいいじゃん
15デフォルトの名無しさん (アウウィフ FF9b-kYbg)
垢版 |
2018/02/21(水) 10:46:31.37ID:zwuXHePGF
おそくなる
2018/02/21(水) 10:56:41.04ID:t+c4IaP2d
変数宣言後に値を代入する前にprintfで表示させると数値がでてきますがこれは何の数値ですか?
17デフォルトの名無しさん (アウウィフ FF9b-kYbg)
垢版 |
2018/02/21(水) 11:05:20.20ID:zwuXHePGF
メモリのなかみをprintfの書式で解釈したもの
18デフォルトの名無しさん (アウアウカー Sa6b-10N7)
垢版 |
2018/02/21(水) 11:22:42.78ID:1i/dh69la
>>16
不定値

何が出てくるかわからない
2018/02/21(水) 16:26:52.49ID:aBAsvFL30
前に使ったデータの切れはし
2018/02/21(水) 16:52:48.64ID:JslMlxHn0
意味のある値を期待してはいけない謎の値
固定値か実行毎に変わるかも謎
2018/02/21(水) 17:12:09.16ID:hxHF5FEW0
スカートめくりしてはいけないのと同じ、見てはいけない場所
2018/02/21(水) 20:06:03.04ID:N7GlfDUh0
グローバル変数とstaticなローカル変数はその変数の型によって決められている値(0や0Lや0.0など)で初期化される
staticでないローカル変数(殆どはこれ)の値は不定
2018/02/21(水) 21:09:11.08ID:enETD2EIM
なんで不定なの?
2018/02/21(水) 21:11:25.31ID:eHdxbQfi0
定まった値を入れる手間すら惜しんでもいいようにしてるから
2018/02/21(水) 21:53:04.93ID:XwEf5GYC0
Cで引数リスト部分が空の関数ポインタと構造体値渡しを↓のように組み合わせて使うのはNGですか?
#include &lt;stdio.h&gt;
long func(long a, char b, short c) {
 return a+b+c;
}
int main(int argc, char *argv[]) {
 long(*pfunc)() = func;
 struct {
  union {
   char a;
   short b;
   long c;
  } u[3];
 } param;
 param.u[0].a = 1;
 param.u[1].b = 2;
 param.u[2].c = 3;
 printf("%d\n", pfunc(param));
 return 0;
}
2018/02/21(水) 22:18:58.55ID:UifE8nP3d
>>25
関数の型が不一致。
27デフォルトの名無しさん (アークセー Sx0b-HN+l)
垢版 |
2018/02/21(水) 22:55:45.50ID:04BHZTp/x
全くの初心者だがプログラム手に入れて動かしている。
最近はテトリスを動かした。C言語は学生の時に
挫折しているので高望はしていないが俺の時代よりも
学習環境も随分と楽になったもんだ。
2018/02/21(水) 22:56:32.48ID:9Zl2Px8M0
昔はLSI-Cくらいしか無かったからな
29デフォルトの名無しさん (ワッチョイ 97b3-T3WU)
垢版 |
2018/02/21(水) 23:28:19.69ID:J5LO2Gvl0
[] [[[ [[ [] ][ [] [ ] [] ][]] [[[ [] }
30デフォルトの名無しさん (ワッチョイ df9f-x4Or)
垢版 |
2018/02/22(木) 00:28:06.89ID:rOhp+nuf0
>>25
NGっていうか、それ普通にダメだよね。型が一致しないし。
まあ、Cコンパイラの実装によってはうまいことスタックに積まれて a, b, c が意図した通りに伝わるのかも知れないが、
しかしそれは実装依存だ。同じコンパイラ使っても最適化したら違う結果になるんじゃないだろうか。
2018/02/22(木) 00:37:40.47ID:Tb8t5xzSM
>>27
ロードランナー本を手に入れるんだ
2018/02/22(木) 01:29:12.41ID:G3RQleyza
不定でバグ起きるコード書くなんてふてぇ野郎だ
2018/02/22(木) 06:13:33.98ID:WzMowRZZ0
>>25 >>30
引数リストが空の場合に「引数を持たない関数」ではなく
「引数の整合をチェックしない関数」と解釈する、
古いCでの動作を期待してるんじゃないかな。一応は規格準拠のはず。
コンパイルオプションでの規格指定がモロに影響する部分かも。

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

仮に各要素をスタックに積む場合でも、単純型の並びとは逆順に
スタックに積まれる可能性もあるんじゃないか。
2018/02/22(木) 06:16:17.25ID:WzMowRZZ0
すまん、上の書き込みは >>25 の質問に対する >>26 >>30 へのコメントだ。
なんだか混ざってしまった。
2018/02/22(木) 06:49:26.50ID:WzMowRZZ0
たびたび申し訳ない。

引数リストを書かない関数定義/宣言 func() は
どのCでも func(void) とは解釈されないんだっけ?
C99で将来廃止予定という情報は見つかったけど、まだ廃止されてないか。
36デフォルトの名無しさん (ワッチョイ d061-POFq)
垢版 |
2018/02/22(木) 11:30:56.06ID:bU9JilnM0
ウインドーズのコマンドラインオプションで記号が{があると
ダブルクオートで囲んでもこの記号の前で引数がおわってしまうんですけどなぜでしょうか?
リナックスではそうはなりませんでした、{の前にエスケープ文字\を置くとうまくいきました。
なぜこうなるのか教えてください。調べてもわかりませんでした。
2018/02/22(木) 11:45:12.93ID:mvuupCVs0
>>36
それはC言語の範疇ではないよ。
windowsのコマンドプロンプトやLinuxのシェルとかを調べるといいかも。
2018/02/22(木) 12:10:34.27ID:rGSqnyaQ0
>>36
具体的にどういうプログラムやコマンドでどういう操作をしてそういう現象が起きたのか、手順を一通り書いてみて
ひょっとして自作のCプログラムでそうなったとか?
2018/02/22(木) 12:18:26.14ID:bU9JilnM0
自作のプログラムでやりました。
具体的に書くとa "abcd{efghijk"みたいにコマンドをじっこうすると
メイン関数のおぷしょんをしらべるとabcdしか入っていませんでした。
2018/02/22(木) 13:37:57.37ID:WzMowRZZ0
>>36
自作コマンドにコマンドライン引数が渡る前に何者かが横取りするんだな。

Windowsのバージョンとか、コマンドプロンプトの種類とか、
Cコンパイラの種類を書くと情報が集まりやすいかも。
2018/02/22(木) 14:12:50.33ID:Ee7revq90
>>36
これで試してみて
こちらでは現象を再現できない
https://ideone.com/CZGZae
2018/02/22(木) 14:16:59.02ID:qwLRFwLN0
>>39
gcc (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 7.2.0
Microsoft Windows 10 Pro 10.0.16299 N/A ビルド 16299
→ 再現せず
2018/02/22(木) 15:22:35.73ID:Fv+tpfSs0
関数の宣言とプロトタイプは別物
2018/02/22(木) 15:51:29.29ID:ejK712YH0
>>39
コマンドシェルの都合か コンパイラのランタイムの都合か
環境(使ってるコンパイラ 実行環境:コマンドラインからなのかデバッガーからなのか etc) に
委ねられてるかんじだな
2018/02/22(木) 15:56:19.77ID:bU9JilnM0
ありがとうございます。
シェルを変えたらできました。
46デフォルトの名無しさん (アウアウカー Sa0a-V6cO)
垢版 |
2018/02/22(木) 16:30:38.85ID:GyUXMKgfa
>>45
シェルって?何から何に変えたの?
2018/02/22(木) 16:57:56.68ID:bU9JilnM0
eshellからmsys2に付属のやつに替えますた
2018/02/22(木) 17:29:33.80ID:rGSqnyaQ0
>>47
それを先に言わないと
一番肝心のことじゃないか・・
49デフォルトの名無しさん (アウアウカー Sa0a-V6cO)
垢版 |
2018/02/22(木) 17:31:08.76ID:4gldXmu7a
>>47
eshellは{}に特殊な意味がある。
それはeshellコマンドの実行結果に置き換えられる。(shのバッククオートと似ている)。
2018/02/22(木) 21:33:01.57ID:7WUP8gc30
スロットゲームを作成しようと思っていろいろサイト見てるんですけど、数字の1〜9を順番にループ表示ってどうやるんですか?
2018/02/22(木) 21:36:38.38ID:bw7NPixRd
>>50
0〜9、そして0が描かれた画像を表示部分だけをクリッピング(切り抜き)して、回転させてアニメーションする。
2018/02/22(木) 22:38:43.81ID:tV4J1Ww80
>>26 >>30 >>33
コメントありがとうございました。
狙いは>>33に書かれてる通りで、>>25のコードもMinGWのgccでコンパイルが通って
実行結果も期待通りだったことから大丈夫なのかなと思ったのですが・・・。

そもそも古い書き方で、将来無くなる予定(ってC99の6.11.6に書かれてるんですね)との
ことですので止めておきます。
2018/02/23(金) 01:55:49.74ID:UgOkn/Bq0
int main(void), int main(int, char**) どちらも ok なのだか
int (*pfunc)()のような書き方はなくならないと思う
2018/02/23(金) 06:00:42.07ID:lIelkvwO0
関数ポインタにvoid*的な総称ポインタはねえぜ
2018/02/23(金) 07:59:19.70ID:Ska5zxPe0
long(*pfunc)() = func; の行がエラーになるのか。
long(*pfunc)(long, char, short) = func; なら通る。

「longを返す関数なら何でも入れられる関数ポインタの変数」てのが
認められないのね。
2018/02/23(金) 08:06:24.83ID:c0IwYAH60
良く考えると関数用の汎用ポインタが無いのはおかしい
2018/02/23(金) 10:50:05.99ID:lIelkvwO0
無理だよ
仮引数の違い=スタック構造の違いなんだから
2018/02/23(金) 12:07:23.73ID:fgXllc68d
gcol(rcol & 0xFF , & gcol & 0xFF ,
bcol & 0xFF)

これの意味を教えてください。
2018/02/23(金) 12:08:21.32ID:fgXllc68d
>>58
gcolor(rcol & 0xFF , & gcol & 0xFF ,
bcol & 0xFF)

これの意味を教えてください。
2018/02/23(金) 12:15:11.26ID:uhME+YqbM
>>57
呼出側が責任持つのがc流で、だから可変引数が実装出来る
って習ったんだが、最近は違うのけ?
2018/02/23(金) 12:18:14.88ID:0SE2Ag1M0
>, & gcol & 0xFF ,
間違ってるような気がするけどな。
変数/関数名からRGB値取ってるだけに思えるし。
2018/02/23(金) 12:27:00.80ID:yhtAX1ye0
呼出し側の引数や戻り値の扱いを規定するのは呼出規約
x86/x64上のC言語ではcdeclが一般的だけど組み込み系の処理系の一部には独自実装のものもある
https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84
2018/02/23(金) 12:36:44.19ID:fgXllc68d
>>61
それは変数宣言で
rcol gcol  bcol =64です。
&16進数なのはどうしてですか?
2018/02/23(金) 13:51:39.54ID:lIelkvwO0
>>60
可変引数?
void func(double);
void (*ptr)() = func;
ptr(1); //1.0で渡すべきところ1が渡される
void func(double arg) //スタック構造の不一致が起きる
{
//全然関係ねえだろ
}
2018/02/23(金) 14:15:00.31ID:mpvgXBL20
>>63
8 bit 幅分だけ &(and) 演算子で切り取っているのではないですか?
2018/02/23(金) 14:21:37.49ID:vnQpXFI50
>>60
可変引数なら可変引数として書かないとだめでしょ
2018/02/23(金) 14:22:41.05ID:mpvgXBL20
>>55
なるほどねえ
https://ideone.com/hVdYWa
2018/02/23(金) 14:35:58.87ID:uhME+YqbM
>>64
そうか、良かったな。

所で、最近はそういうのも可変引数って言うように
なったのか。varargs.hは廃盤か。
69デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/23(金) 14:59:14.82ID:0k9d4/ABa
>>63
君が何を言っているのかよくわからない。
2018/02/23(金) 15:09:04.10ID:lIelkvwO0
>>68
あれが可変引数?
俺は全然関係ねえだろって書いたんだが
2018/02/23(金) 15:44:15.83ID:0SE2Ag1M0
ID:fgXllc68d は必要な情報書かな過ぎ。
2018/02/23(金) 15:47:17.83ID:V7qyvSbE0
可変個引数は va_start() するときに番兵となる引数が必要なので
最低でも1個は固定の引数が欲しいんだよね
func(int , ...) とかになる
73デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/23(金) 16:06:00.23ID:0k9d4/ABa
可変長引数なんて認めなければよかったのにな。
またはJavaみたいにシンタックスシュガーにしておいて実は配列に変換して要素数と共に渡すみたいにしておけばもっとましな感じになったのに。
2018/02/23(金) 16:43:48.45ID:lIelkvwO0
Bの頃からあったprintfの実装テクニックだし
だいいちCは簡潔さを売りにしてたんで
理想論に走って複雑さを増すようなことを嫌ったんだよ
2018/02/23(金) 16:48:19.38ID:yeKpu5OYM
>>72
せやな。
で、func(int,....) な関数ポインタは作れるよね。
それを汎用的に使うことは出来る。ってのが56への回答じゃね?
2018/02/23(金) 17:03:04.90ID:lIelkvwO0
void func(int, double);
void (*ptr)() = func;
ptr(1, 1); //1.0で渡すべきところ1が渡される
void func(int top, double arg) //スタック構造の不一致が起きる
{
va_list ap;
va_start(ap, top);
assert(va_arg(ap, double) == arg); //通るわけねえだろ
va_end(ap);
}
2018/02/23(金) 17:11:03.17ID:V7qyvSbE0
>>75 いいや ポインタだけじゃ片手落ち
(キャストじゃだめで)関数の実体側の引数も同じ引数で実装しなければならない
2018/02/23(金) 17:26:46.79ID:UgOkn/Bq0
スタートアップは argc,argvをスタックに積んで _mainを呼ぶ
_mainが int main(void)だとしても問題ない
2018/02/23(金) 17:49:49.55ID:Ska5zxPe0
>>67 はエラーなくコンパイル・実行できてるようだから、もう少し検証。
ideone.com でなくローカルのgccで実験。

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

警告は void (*pfunc)() = f; の行で発生。
実引数の自動拡張よりも狭い幅の仮引数の型を使おうとすると警告かな?
コンパイラによって動作が異なる部分で、深追いする価値は無いのかも。
2018/02/23(金) 18:00:16.52ID:yeKpu5OYM
>>77
78が正解。更に言えばmainの引数には envp もある
2018/02/23(金) 18:25:51.38ID:UgOkn/Bq0
envpはANSI C 標準に対する Microsoft の拡張機能
https://msdn.microsoft.com/ja-jp/library/k104fy6h.aspx
2018/02/23(金) 18:42:59.00ID:mpvgXBL20
>>81
posix にもある、推奨されているわけではないが
2018/02/23(金) 19:10:50.73ID:Ska5zxPe0
補足というか訂正。
>>55 で「long(*pfunc)() = func; の行がエラーになる」
と書いたけど警告だった。よって >>25 のソースもコンパイル可能。

ちなみに結果は期待の 6 とは桁違いのデカい数値だった。
2018/02/23(金) 20:24:30.86ID:mFkXyQ34M
void*でええやん
2018/02/23(金) 21:15:05.64ID:JKrDz8Gza
 ヘ_ヘ
ミ・・ ミ
(   )〜
2018/02/23(金) 21:32:39.13ID:my0767Fs0
void から ヘミ猫 て fj かよ
2018/02/24(土) 00:57:58.46ID:ar5NnKGja
>>83
>>25の書き方そのままじゃlong aの部分しか渡されてないからb, cは不定値になってるのでは?
2018/02/24(土) 06:40:32.39ID:agv5rOmv0
>>87
param には「long幅の共用体3要素の配列」が含まれるから、
値渡しすればスタックに (sizeof(long) * 3) byteのデータが積まれるはず。

というか、main()でparamの各要素をlong解釈で表示させたら
見事にaやbの上位ビットにゴミが入っていた。
2018/02/24(土) 09:43:12.88ID:uX3sJRXI0
structにstaticつけ忘れてましたとか
2018/02/24(土) 15:58:01.09ID:dhHE2VyNa
>>88
> 各要素をlong解釈で表示させたら見事にaやbの上位ビットにゴミが入っていた。
それは初期化の問題では?

確かに値渡しはスタックにコピーされるけど、関数の引数にはもう一回コピーはいるから、そこで関数不一致の弊害が発生すると思う
>>25のコードそのままだとaしか正しく渡されてなくて、b,cは明後日の方向からデータ取ってきてるかと
2018/02/24(土) 16:57:25.47ID:agv5rOmv0
>>88 に「期待の6」と書いたせいで誤解させてしまった。
もちろん実際の動作で6が表示されると思っていたわけじゃないのだ。
この流れの発端の質問 >>25 と、それに追加された >>52 の、
「実行結果も期待通りだった」て記述を受けての「期待の6」でね。

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

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


…長々と失礼。誤解の余地なく説明しようとするとクドくなってしまう。
2018/02/24(土) 18:41:41.80ID:7mL/bBDwd
#include <stdio.h>
#include <string.h>
#define BUF_SIZE 80

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

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

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

while( (fgets(buf, sizeof buf, fp)) != NULL) {
if( strstr(buf, input) == NULL ) continue;
2018/02/24(土) 18:42:06.22ID:7mL/bBDwd
s = my_realloc(NULL, strlen(buf) + 1, __LINE__);
strcpy(s, buf);
result[count++] = s;
if( count >= size ) result =my_realloc(result, sizeof(*result) * (size += 20), __LINE__);
}

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

return 0;
}
2018/02/24(土) 18:45:40.89ID:7mL/bBDwd
上記のコードから追加でしたいことが2つあります。
@検索単語を2つにしたい。
Aフォルダないの全ての.csvファイルを検索かけたい。

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

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

ここの文の意味が分かりません。
2018/02/24(土) 21:35:03.63ID:h1W1dcA8d
>>94
クソコードだ。あまり参考にせず、自分で考えた方がいい。
my_reallocはreallocをラップした関数形式マクロのようだ。リファレンスのreallocを参照。
__LINE__は現在の行番号を表し、デバッグなどに使う。
sprintfはprintfを文字列出力にしたものだ。%%は%になって出力される。
2018/02/24(土) 21:47:22.04ID:h1W1dcA8d
sprintfで出力した文字列をscanfに書式として渡している。でもこのようなscanfの使い方はオススメできない。
2018/02/24(土) 21:56:26.92ID:h1W1dcA8d
%dは整数を表す文字列になるので、%%%dsは%(何らかの整数)sになる。これは文字列出力の幅指定だ。
幅指定には、別の直接的な方法があるので、こんなことしなくてもいい。
scanfの使い方は引数の個数がちょっと間違っているように見える。
2018/02/24(土) 21:59:21.39ID:h1W1dcA8d
バグや不具合の元になるscanfなんて使うな。fgetsとsscanf使えば充分で分かりやすくて確実だ。
2018/02/24(土) 22:25:03.02ID:tEhbLaK5M
>>94
@else ifでええやん
Areaddirでええやん

myreallocみたいなモンはマクロにしとけ
reallocみたいな糞ライブラリ使うな
sprintfみたいな糞ライブラリ使うな
2018/02/24(土) 22:45:22.29ID:PDjCLuF50
特定のフォルダ(dir)内のファイルを順次処理したいときは
Unix系ならばopendir()、readdir()、closedir()を使う。
VCならばFindFirstFile()、 FindNextFile()、FindClose()を使う。
2018/02/24(土) 23:27:16.76ID:yWQ45jBy0
たしかに realloc() はいろいろまずいところがあって、
一番悪いのは、やり直しができない、ということ
2018/02/24(土) 23:34:03.13ID:PDjCLuF50
一致した行をそのままファイルに書き出す方が簡単な気がする
2018/02/25(日) 01:42:29.02ID:XjF3qDop0
>>99>>101
え? realloc() が糞?じゃあ malloc() で確保したメモリ領域の大きさを変えるのは何を使えばいいの?
自分で確保し直して中身を自分で全部コピーしろと?
2018/02/25(日) 01:43:39.45ID:XjF3qDop0
>>101
てか、やり直しができないってどういう意味?幾らでもできると思うが。
2018/02/25(日) 01:50:49.81ID:I4H7O+d10
1バイトでもメモリ消費量を節約する事が求められた世代と
湯水の如く無尽蔵にメモリが使える世代のバトルが始まる?
106デフォルトの名無しさん (ワッチョイ df9f-IDeO)
垢版 |
2018/02/25(日) 03:25:39.33ID:XjF3qDop0
>>105
そういうことなの?w
107デフォルトの名無しさん (ワッチョイ 2f93-IXLF)
垢版 |
2018/02/25(日) 06:04:48.57ID:Jqo0wCIZ0
>>92 >>94
sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1);
の行では input[BUF_SIZE] で BUF_SIZE が80であることから
format[] に "%79s%*[^\n]%*c" (\nは改行コード) が格納される。
よって scanf(format, input); は scanf("%79s%*[^\n]%*c", input); の動作。
変換指定の "%79s%*[^\n]%*c" の意味や妥当性は別のお話。

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

バッファサイズは固定なのに変換指定を動的に作るのは非効率だ、
という気持ちも分かるけどね。
2018/02/25(日) 07:37:51.66ID:HIxgC6KA0
片山氏はscanfがまともに使えず
自分のミスを道具のせいにする手合いか
2018/02/25(日) 08:49:08.43ID:vTPpNH4CM
>>103
そう
糞と言った理由は冪等性がないから
冪等性よりも結果整合性を重視するならrealloc使えば良いと思うよ
2018/02/25(日) 09:18:29.86ID:Jqo0wCIZ0
>>109 「冪等性がない」の意味を補足してくれまいか。
realloc()に冪等性がない、結果整合性はある、という意味が分からないのだ。
2018/02/25(日) 09:35:20.85ID:miEl51/Z0
失敗したとき NULL を返しつつ 「引数で渡したポインタは開放されない」
あたりに引っかかりを感じてるんでない?

NULL 返すなら 引数で渡したポインタを開放しろと?
※ 使いにくいかもなぁ…
112デフォルトの名無しさん (ワッチョイ df9f-x4Or)
垢版 |
2018/02/25(日) 11:58:37.90ID:XjF3qDop0
俺も意味がわからん。
113デフォルトの名無しさん (ワッチョイ df9f-x4Or)
垢版 |
2018/02/25(日) 12:17:48.32ID:XjF3qDop0
>>111
それはメモリ確保に失敗してるんだから解放したらダメだよね。
自分で malloc() 使って新規にメモリ確保しようとした場合でも NULL 返されたら元の方は free() しないだろう。
2018/02/25(日) 12:28:06.03ID:vTPpNH4CM
>>110
結果整合性って言葉が悪かったな
reallocの機能を重視するなら使えば良いと思うよって書けば良かった

冪等性の意味が分からないならググってくれとしか
2018/02/25(日) 12:33:20.87ID:XjF3qDop0
あ、もしや >>109 の言ってる冪等性がないって引数で渡したポインタとは違うポインタを返してくることがあるって意味?
あまりにも当たり前すぎて思いつかなかったが。

しかし malloc() の実装にもよるだろうがこれを許さないと効率は悪くなるのではないか?
2018/02/25(日) 13:13:10.59ID:vTPpNH4CM
>>115
そう
違うアドレスを返して初めて発現するバグをボケナスビがやらかしてから俺は戒律で禁じた
他にも初期化やアライメントの点もある

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

冪等性を最重視する俺はこのスレじゃ少数派みたいだからあまり気にせんでくれ
2018/02/25(日) 13:20:16.07ID:L5EpKLxx0
>>115
× 効率は悪くなる
○ まともな実装は無理(ほぼ全ての場合に失敗する)

>>116
気持ちは分からんでもないが、
reallocはそれが仕様で、いやならstd::stringみたいにラップするしかない。
2018/02/25(日) 13:22:50.04ID:I4H7O+d10
(流れが質問者を放置しているように感じる)
2018/02/25(日) 13:26:41.23ID:qARxqxts0
>>118
質問者の疑問を解決する事より自分の主張したいことに論点がシフトしちゃうのはよく見る光景だね。
質問スレでそれじゃダメだと思うが。
2018/02/25(日) 13:38:08.00ID:vTPpNH4CM
>>118>>119
確かにそうだな
俺は安価ついた分しかレスしないつもりだったけど、この話題についてはもう止めとく

スレ汚しすまんかった
2018/02/25(日) 13:44:15.14ID:9iGYkY9C0
>>103 >>104
c++ には realloc() は取り入れられなかった

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

我ながらちょっと例が悪いとは思うが、
realloc() を暢気に使っていると、エラー処理が一手ばったりになってしまう。
2018/02/25(日) 13:49:23.19ID:L5EpKLxx0
>>120
俺はいいと思うぞ。
むしろ無理に「質問者様が神様だ」的にしたがるゆとりは死ねと思うが。

そもそも質問には回答つきまくってるし、質問者側が何らかの反応しないと話は進まないだろ。
流れも読めない癖に流れを主張するゆとりは殺すしかない。
2018/02/25(日) 14:39:52.01ID:XjF3qDop0
なるほど。まあ確かに使い方や使い所を間違えればハマるものではあるな。

そういや以前 realloc() で渡すポインターがNULLではなくサイズの指定が0だとfree()されるってのでハマったことがあった。w
2018/02/25(日) 14:51:26.22ID:nm5odapXd
ANSI準拠のreallocは、mallocとfreeの代わりになる。
2018/02/25(日) 15:46:21.99ID:s5td7qK+0
未だにANSIの規格票を読んでる日本人いたのか
126デフォルトの名無しさん (ワッチョイ 6e23-Rch6)
垢版 |
2018/02/25(日) 15:51:12.25ID:DMbXpP0c0
俺も読んでる
127デフォルトの名無しさん (アウアウカー Sa11-CD0d)
垢版 |
2018/02/25(日) 15:59:51.76ID:NsuolzGja
未だにANSI使う理由って何だろう?
2018/02/25(日) 16:00:08.18ID:s5td7qK+0
ISOではなくANSIか?
2018/02/25(日) 18:48:53.57ID:bdk82RzyM
>>121
それはプログラムの組み方が悪いだけでrealloc()のせいじゃないだろ
2018/02/25(日) 18:55:32.39ID:I4H7O+d10
>>121
最初から文字列3つ分の領域確保すれば良いんでないの?
2018/02/25(日) 19:23:06.76ID:L5EpKLxx0
>>121
reallocではなく、自前でmalloc+memcpy+freeでやればいいだけ。
ただその前に、指摘されているとおり、
3つの「同時に変更される」生ポインタを掴ませるのが問題。
その場合には普通は一つの構造体に入れてそれ経由で使い、
「同時に変更される」という条件が外部に見えないようにする。(隠蔽)
勘違いしている奴も多いが、OOPは文法の話ではない。
2018/02/25(日) 20:09:18.52ID:fbPK05Px0
reallocをmallocとmemcpyでやろうとするともとのメモリサイズわからずに詰まない?
2018/02/25(日) 20:41:49.10ID:p0obWBJzd
結果何をどうすればいいんですか?レベルが高すぎて何を言ってるのかさっぱりです
2018/02/25(日) 20:48:37.39ID:Fc1MjilIa
だからreallocはいまいちって話なのでは?

>>132
malloc_usable_size, _msize
2018/02/25(日) 20:58:36.53ID:H8bVBKR7a
>>133
reallocに関してはひとまず気にしなくて良いかと
2018/02/25(日) 21:15:09.00ID:I4H7O+d10
>>133
見つかった行の保持ってメモリー上でやりたいの?
2018/02/25(日) 21:58:18.03ID:EC2T/8ze0
>>136
別にこだわりがあるわけではないです。

明日やろうと思うので、調べるあたりこれ見とけとかあります?
2018/02/25(日) 22:15:41.07ID:I4H7O+d10
メモリ上に保持しなくても良いなら、検索して見つかった行をそのままファイルに書き出してしまう方が簡単だと思う。
あと、どういう環境で実行するか分からないんだが、もしも正規現が使えるなら、それを利用する方が簡単だと思う。
複数のキーワードで探したいときは一括で指定できるし。
2018/02/25(日) 22:23:36.04ID:L5EpKLxx0
>>137
1. grep/sedでおk
2. AWK/Perl/Ryby/Pythonでもおk
3. つかその用途でC使うとか正気じゃねえ。メモリ上でゴリゴリやるにしても普通はスクリプト言語。
4. それも分かっててC使う覚悟のある奴がここでこんなアホな質問する訳ねえ。>>138
2018/02/25(日) 22:51:32.71ID:9iGYkY9C0
>>139
>用途でC使うとか正気じゃねえ。メモリ上でゴリゴリやるにしても普通はスクリプト言語。
その判断をするのには、一定の C での経験が必要だと思います
python なんかでやったほうがいい仕事をあえて C で書く経験はあったほうがいいでしょう
2018/02/25(日) 23:44:30.89ID:EC2T/8ze0
VBでは出来るんですがCの勉強をかねてトライしてます。
いろいろとありがとうございました!明日頑張ってみます!
2018/02/26(月) 11:24:56.97ID:0MjsGOBH0
>>132
メモリーサイズを知る必要はない
そもそも確保されてるサイズと strlen(a) が同じかどうかはわからんし
2018/02/26(月) 12:24:58.22ID:4Dp3S/v30
>>142
concat3とかいうQZのボケたろくでもない例のことは忘れろ
2018/02/26(月) 12:38:44.35ID:lxlU26hn0
>>132
メモリサイズは非公開というだけで、内部的には持っている
だからreallocの作者=mallocの作者が詰むことはない

それ言い出したらfreeも解放量わかんなくて詰むだろ
2018/02/26(月) 13:29:20.63ID:zI4VKzz4M
>>143
お前は何を言ってるんだ?
2018/02/26(月) 17:32:30.23ID:e+KVEn7XM
K&Rで説明されている筈なんだが
2018/02/26(月) 17:41:14.36ID:vVA9DKIbd
結果出来ませんでした...
2018/02/26(月) 20:20:31.75ID:4PPe6ndQ0
>>144
reallocの作者がmallocの作者と違う場合なんだが
149デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/26(月) 20:38:25.45ID:9Qy36xi2a
違うかなあ?まあ、ソース公開されてれば違う人が書くことは楽だが。
2018/02/26(月) 22:00:57.86ID:Z8+ASG310
>>147
どの辺がどうできなかったかを書いてみて
2018/02/26(月) 22:08:57.21ID:lxlU26hn0
>>148
俺は、それを空想論と断言してみる
おまえさん恥をかかせてくれることはできるかな?
2018/02/26(月) 23:37:18.28ID:Il2cKkTC0
>>150
単純に自分でやってみようと思い一から書き始めたんですけど

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

前載せたコードを読みといた方が近道ですかね?
2018/02/26(月) 23:49:55.49ID:KRl4xBEA0
>>151
もともと標準mallocやfreeを使って自前realloc作るならという話の流れだっただろ
2018/02/26(月) 23:57:50.74ID:Z8+ASG310
>>152
CSVファイルを読み込むプログラムは作った事ありますが
CSVの仕様をどの位受け入れるかで複雑さも変わると思います。
この辺は汎用的に作るか、自分が処理したいCSVの仕様の範囲にするかで違うとは思います。

scanf系の処理はとても癖が強く、
よっぽど仕様に精通していないと填まります
私ならその道を行くのはやめます
2018/02/27(火) 00:01:01.54ID:uYnnRgds0
>>152
grepでおk、マジで
そんなことをCでやる馬鹿はいないから、ろくな参考情報がないのも当たり前。
2018/02/27(火) 00:04:33.43ID:vDZ6bRaj0
"と , のエスケープと 1要素の中に改行を含む文字列周辺 RFCみて頭いたくなった
2018/02/27(火) 00:13:39.83ID:euQ4hghrM
>>152
俺なら間違いなくpythonつかうね
https://qiita.com/okadate/items/c36f4eb9506b358fb608
158デフォルトの名無しさん (アークセー Sx5f-jcVR)
垢版 |
2018/02/27(火) 07:16:02.83ID:pdRg+OHax
配列とかポインタとか難しいと聞いていたから心配していたけど
とりあえず基礎の解説書レベルなら分かった。やれやれ。
2018/02/27(火) 09:21:35.76ID:uskldtVs0
指定したサイズの2次元配列を確保する関数を設計してくれまいか?
2018/02/27(火) 10:07:05.72ID:XfJ/ct090
>>159
無理じゃね?
char (*dim_alloc(size_t width, size_t height))[width];
最後の[width]がエラーになる[*]にしてもあかん
[]にすると通るには通るが、今度は
char (*a)[3][4] = dim_alloc(3, 4); //型の不一致になる
2018/02/27(火) 10:08:23.25ID:XfJ/ct090
あ、失礼
char (*a)[4][3] = dim_alloc(3, 4);
結果は同じだけど
2018/02/27(火) 10:55:55.07ID:XfJ/ct090
できた
void dim_alloc(size_t, size_t, char (**b)[*]);
int main(void)
{
size_t width = 3, height = 4;
char (*a)[width];
dim_alloc(width, height, &a);
}
void dim_alloc(size_t width, size_t height, char (**b)[width])
{
*b = (char (*)[width])malloc(width * height);
}
これならおk
163デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/27(火) 11:45:45.08ID:r7ed+pq5a
ポインタの配列使っちゃえばいいじゃん。free()する時注意が必要だがアクセスがa[y][x]形式なのは同じだし。
2018/02/27(火) 11:48:09.27ID:w9pRJ3lK0
二次元配列とポインタの配列だと、使い方が違うでしょう
165デフォルトの名無しさん
垢版 |
2018/02/27(火) 12:21:42.40
mallocされたサイズが分からんとか何言ってるの?
gccもVCも確保サイズを返す関数を提供してるだろ
166デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/27(火) 12:27:42.17ID:r7ed+pq5a
>>164
確保時と解放時が違うが読み書きアクセスする時の表現は同じにできる。
2018/02/27(火) 12:30:04.09ID:CvenUVT40
>>159
gcc6 では一筋縄ではいかなくなっているね…
2018/02/27(火) 12:35:33.45ID:XfJ/ct090
>>165
非標準のね
2018/02/27(火) 17:51:59.04ID:CvenUVT40
>>159
できた!
https://mevius.5ch.net/test/read.cgi/tech/1434079972/36
2018/02/27(火) 18:02:32.91ID:CvenUVT40
>>162
>>159
>char (*a)[width];
これに値をいれないといけないし、そもそも、それも含めて malloc() してほしい、のでは
2018/02/27(火) 18:07:21.76ID:BEzsaLeta
ああ。先頭にポインタを詰め込んで一発で全部free()できるようにしたのか。
2018/02/27(火) 19:24:56.97ID:LuvO3mbWM
>>165
非標準だし、そもそもそんなものを使う必要は滅多にない
173デフォルトの名無しさん
垢版 |
2018/02/27(火) 19:27:39.38
>>168,172
上の方でmalloc作者じゃなきゃrealloc作れないっていう主張があったから、普通は処理系で専用関数を提供してるだろって話
2018/02/27(火) 19:47:16.45ID:jvpYfXKk0
>>159
わざわざ関数を設計しなくても、例えば3次元配列なら
int ary[dim_z][dim_y][dim_x];
int (*ptr)[dim_y][dim_x] = malloc(sizeof(int) * dim_z * dim_y * dim_x);
とやれば ary と ptr は同等に扱えないかな。

ptrはfree()する必要があること、sizeofの対象にしたとき同じ値を返さないことは
別関数を作っても同じだし。
175デフォルトの名無しさん
垢版 |
2018/02/27(火) 19:54:46.22
>>159は二次元配列を確保とは言っているがインタフェースは特に注文ないんだからxとyと型サイズを掛けて(必要ならアラインメント考慮も入れて)mallocしてvoidポインタを返せばいいよな
2018/02/27(火) 20:35:43.21ID:XfJ/ct090
>>174
別関数を作っても同じとは思わないな
void dim_alloc(size_t, size_t, char (**)[*]);
void dim_free(size_t width, char const volatile (*head)[width])
{
free((void *)head);
}
dim_allocが内部的に割り付けに使っている手段を
dim_freeに隠蔽する意味はあるんだから
2018/02/27(火) 20:42:39.05ID:LuvO3mbWM
>>173
> 上の方でmalloc作者じゃなきゃrealloc作れないっていう主張があった
そもそもその主張がおかしいだろ
2018/02/27(火) 21:38:07.83ID:ejzPWrTva
>>177
だから、その主張はおかしいって話の流れだったろ
179デフォルトの名無しさん (アークセー Sx10-jcVR)
垢版 |
2018/02/27(火) 23:15:01.44ID:7DMjjd1qx
テトリスのプログラムって難しい方なの?
2018/02/27(火) 23:18:17.42ID:w9pRJ3lK0
そんなには難しくはないと思う
作る人がグラフィック処理を理解していて
キー入力のリアルタイム処理をこなせればね
2018/02/27(火) 23:20:17.44ID:CvenUVT40
>>179
自分で組むためにはいろいろと段取りが必要で結構難しい部類になるかと思います
一時間で組む、とかいうやつも下準備はしてあったと思います
182デフォルトの名無しさん (アークセー Sx10-jcVR)
垢版 |
2018/02/27(火) 23:26:02.43ID:7DMjjd1qx
PetiteTech にあるテトリス
ブロックパズルの作り方 だと これはどうなの?
183デフォルトの名無しさん (アークセー Sx10-jcVR)
垢版 |
2018/02/27(火) 23:31:30.01ID:7DMjjd1qx
高校生ぐらいが無理なく取り組めるゲームプログラムって
無いですかね?もちろん初心者。
2018/02/27(火) 23:54:04.69ID:8YslYmAQ0
パズル系は楽そうに見えるけど、判定部分を作るのがキツいと思う

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

描画ライブラリを自作出来なかったら dxlib とかのフリーライブラリが使える
2Dに慣れたらUnityのフリー版で3Dゲーム作ってみるのもいい
2018/02/28(水) 00:04:51.75ID:8c8qszi40
ここに来て何でこんなに初心者が沸いているのか分からんが、
スレ分けた方がいいんじゃないか?
というか、上級者用のスレがあったら紹介してくれ。俺がそっち行くから。


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

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

つっても通じないだろうが、多分高校生の考えるゲームプログラミングなら、
C#でunity使うのが今風なんじゃね?そっちやっとけよ。
2018/02/28(水) 00:42:29.18ID:QXjyWHPf0
そもそも枯れた技術のC言語スレで上級者なんているのかな・・・?
2018/02/28(水) 00:49:49.08ID:8h6/NeTB0
>>186
>>159 をサクッと解ける人は上級者かもしれません、私は size(int)=sizeof(int *) を仮定していたために酷くはまりました
2018/02/28(水) 01:07:30.80ID:8c8qszi40
>>186
むしろお前含めて一通りも使えない馬鹿が沸きまくっていることが問題だ。
それでも初心者は初心者同士で好きにやればいいが、
元々居た連中は逃げるしかない。

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

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

高校生なら学校のお勉強しとけ、がよっぽどマシだろ。
そもそも高校生が2chするのが間違っていると思うし。
189デフォルトの名無しさん (アウアウカー Sa11-CD0d)
垢版 |
2018/02/28(水) 01:09:56.20ID:3MQnmRRma
>>188
そんなに不満ならスレ立てれば良いのでは?
上級者が集まったらどんな話題が出るのか興味あります
2018/02/28(水) 01:15:14.33ID:m1ANm8An0
上級者かそうで無いかは、どの辺で分けるの?
もしかして年齢?
2018/02/28(水) 01:20:42.25ID:QXjyWHPf0
ここにいる自称上級者の人達は、C++やC#なら標準で使える様な物を何で再発明しているんだろう?

ポインタ返すだけの関数だとメモリオーバーランが検知出来ないから業務では危なくて使えないし、
バッファへのポインタは別ソース内にstaticで隠蔽してintとかのハンドルだけ返して、
引数範囲チェック付きのget,setと、ハンドルでfreeする関数まで作らないと正解とは言えない
2018/02/28(水) 01:45:42.72ID:8c8qszi40
とりあえず他の人の反応見て週末にでも俺が立てるよ。
テンプレは>>1踏襲だが、以下に変える予定。


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


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

>>191
そもそもそういう思想ではないし、C++やC#がいいと思うのならそれらを使えばいいだけ。
個人的にはC使いは無駄に頑張りすぎていて、
もうちょっと上手く手抜きをすることも覚えるべきだとは思うが、
わざわざCスレで「何回目だよそれ?」をぶちかますお前も頭おかしいと思う。
2018/02/28(水) 01:53:16.04ID:8h6/NeTB0
>>192
1万行ですか…気が遠くなりますね…
こんなのなら書いたことがありますが…
https://code.hackerearth.com/431130T
https://code.hackerearth.com/7b7b82s
194デフォルトの名無しさん (ワッチョイ df9f-x4Or)
垢版 |
2018/02/28(水) 01:54:28.86ID:ifAjmiIg0
作ったよ。

C言語上級者スレ
https://mevius.5ch.net/test/read.cgi/tech/1519750371/
2018/02/28(水) 01:57:04.78ID:ifAjmiIg0
あ、ごめん。リロードしてなかった。そういうテンプレは入れてないな。
じゃあ俺の作った方は放置でいいよ。新しいのできたら削除依頼しとこう。
2018/02/28(水) 02:06:17.61ID:m1ANm8An0
>>192
1CU1ソースって仕事を昔してた。
モジュール分割すら認めてないサイトだった
ソースはそれぞれ1万行越えてたな
最大2万行あったと思う

1日に600行書いたことはある
でも自分を上級者だとは思っていない
そんな自信はありません
書くソースは500行程度だな
どんなに詰め込んでも2000行が限界だわ
2018/02/28(水) 02:13:49.37ID:8c8qszi40
>>193
これ何故コードに展開したんだ?何かの実験か?
それにしても意味があるとは思えないが。

さすがに手打ちとは思えないから、当然自動コード生成として、
その場合は入力は木データなのだから、歩くのが普通だろ。
100行程度で済む内容だと思うが。
2018/02/28(水) 02:19:55.16ID:8h6/NeTB0
>>197
同じ課題についた別解答は次のとおりです
https://ideone.com/vNZWaH
まあこの程度の内容ではあるのです
2018/02/28(水) 02:38:51.42ID:8c8qszi40
>>198
どういう課題かは知らんが、
データとして処理するべき案件をcase文にしてしまうという発想が間違っていると思うけどな。
普通は bool flags[6] でありなしを管理し、10行程度で書ける内容だぞこれは。
2018/02/28(水) 02:47:13.06ID:8h6/NeTB0
>>199
ああ、それは説明が必要でしたね
確かにこの課題内容の「縛り」は理解不能でしたが、当時、それに知恵を絞った者も複数いたようです、宿題スレ、粘着の嵐でもう見る影もなく廃墟になってしまったんですが

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

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

}
な場合で、
1から6までの数字をキーボードから最小で5回受ける
(同じ文字の入力や範囲外の文字の入力は
「無視しました」と出力)
残り一つの数字がわかる場合はキーボード入力
を待たずに決めてよい
最終的に、入力された順番とは逆順に入力
された文字を出力
2018/02/28(水) 03:11:31.80ID:8c8qszi40
>>200
クソ問題はやるだけ無駄だぞ。
大体そういうのを考えた奴は実際はプログラマではないことが多い。
だからどういう事が実際に必要なのか分かってないのさ。
K&Rにしても禿本にしても、演習課題付けてくれてるだろ。あれをやる方が1万倍マシ。
或いはテトリスなりを実際に自分で作った方がいい。
少なくともそこでは「実際に必要なこと」しか要求されないわけでさ。

スタックを1バイトも使ってはいけない状態で、
展開したコードならどれだけ大きくてもいいとか、あり得ないよ。
スタックは128バイトまでな、とかならまだ分かるが。
2018/02/28(水) 03:20:22.48ID:8h6/NeTB0
>>201
あはは…そのとおりですね
非常識・無常識でウケを狙ったりもして楽しかったんですが
今残っているスレとしては、ここが雰囲気が似ていますね
https://mevius.5ch.net/test/read.cgi/tech/1514772904/

C 言語の宿題に対して執拗に prolog で書いていた人もいました、いつも凄いとおもっていました
2018/02/28(水) 04:52:04.37ID:u7A4CcwO0
>>199 bool ?
2018/02/28(水) 05:21:30.33ID:sJxURYwy0
普通の有限オートマトンやんな
2018/02/28(水) 08:56:58.23ID:57y2KSxK0
無限オートマトン ってどんななの?
2018/02/28(水) 09:12:27.49ID:MJOJ5lH0M
状態数が有限じゃないってことだけど、解析できないし分類上も有用じゃないので、現実には扱わないよ
2018/02/28(水) 09:52:53.28ID:eOQjYTv40
>>183
市販品=プロの作品を真似しようったってそんなの無理だ

必要なのはアイディアの発想力、つまり遊びのセンスだ
たとえばキーボードを壁に吊して射的ゲームとかなら
プログラム的には簡単だろ
2018/02/28(水) 11:17:44.41ID:A9USqIB/0
>>183
「ヒット・アンド・ブロウ」や「ハングマン」あたりかな。
乱数ベースの当て物に飽きたらテキストアドベンチャーに移行。
自然言語処理に至る。

…真に受けないでくれよ。
209デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/28(水) 12:31:00.24ID:ZStODBz1a
キーボードを壁に吊るしてって、斬新なアイディアだな。
210デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/28(水) 12:47:25.24ID:ZStODBz1a
そういや昨日秋葉に行ったらUSB接続で反対側が何にも繋がってないやつで、自分でスイッチ繋げて入力用の何かを自作できるっていうの売ってたな。(確か東映無線にあった)
一応ハードウェア工作を含んで尚且つOS経由でUSBからの入力をしなければならないが、キーボードを壁に吊るすぐらいでは飽き足らない人はやってみたらどうかな。
2018/02/28(水) 14:13:55.34ID:nUmzOd5xa
>>186
グラフィカルなものとかアクション性のあるものとかは敷居が高いから、
まずはオセロや五目並べあたりをCUIで作ってみるのが取っつきやすいかな。
2018/02/28(水) 14:15:02.50ID:nUmzOd5xa
>>186ではなく>>183だった
2018/02/28(水) 20:10:01.78ID:DO+q01hP0
getch使ってザッザッザッザッザカリテ
2018/02/28(水) 21:12:07.60ID:sIMYGGyya
cursesだな。
2018/02/28(水) 22:05:24.10ID:5kf5T6va0
テトリスとぷよはそんなに難しくなかったなぁ。
省メモリで作ると果てしなく大変だけど、富豪的に作れば大したことない。
オセロとかもそうやな。富豪的に作れば難易度は各段に下がる。
2018/02/28(水) 22:10:23.35ID:LDTKKB+20
>>208
高校生というか中学生レベルかもしれんが、パソコン買ってBASICで最初に作る定番だな。懐かしい。
ヒット・アンド・ブロウ(マスターマインド)って簡単な割に意外と遊べるんだよな。
あとブラックボックスなんかも。
2018/02/28(水) 23:46:39.93ID:5kf5T6va0
対戦マスターマインドとか簡単で面白いカモな。
伏せられた一つの答えを解きあう感じの。
敵作る経験にもなるし。
218デフォルトの名無しさん (アークセー Sxdb-TGtH)
垢版 |
2018/03/01(木) 00:11:06.23ID:Ajqb03Rpx
それぞれありがとうございます。ヒットアンドブロウって初めて聞きました。

確かに学校の勉強も大事ですね。数学検定準2も終わったので(多分合格)
中3・高1のメンバーですが。2級までの間、AO入試にプログラム使えないかと
思って(将来的にも使えるようにしたい)勉強し始めています。
(立命館のあいちゃれとか参加してみたいとか・・・)まあそんな感じ。
2018/03/01(木) 09:43:11.48ID:O9YoI3Ipa
>>216
BASICで・・・30年以上前の話かな・・・
2018/03/01(木) 09:57:54.68ID:KMinam3V0
BASICか。。。
始めて作ったのは
敵がいないパックマンに
バック走行のレーシング

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

敵キャラはマシン語より難しい
完全にランダムな動きはすぐできるが
自機を狙ってくるやつの思考ルーチンは奥深い
2018/03/01(木) 13:15:16.58ID:vHclpfSxM
ハングマンはわりと簡単に作れてわりと楽しめるよ
英語の勉強にもなる(かもしれない)
2018/03/01(木) 13:42:17.24ID:EAWoI55s0
>>220
「バック走行のレーシング」て発想はなかった。
俺は「風船を背負って縦穴を落下する」という設定だった。
…そういや、今のプログラム初心者は「とりあえずスター・トレック」で
ゲーム作り始めないのね。

真面目な話、BASICでINPUT命令を使うのに比べると
Cでユーザーからのキーボード入力を受け取るのは面倒なんだよね。
そのせいで同じネタでもプログラム課題としての難度がいくらか上がる。
2018/03/01(木) 14:39:39.65ID:pSYCUqTH0
conio.hを発見して非標準に絶望するまでが一セット。
俺、発見するのに数年かかったんだぜ。
BASICで3日でできたことがなんでできんのじゃーって悶えたわ。
224デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/01(木) 15:52:58.39ID:AvQj/v1Qa
cursesライブラリの方が対応している端末が多くてほぼ標準なんじゃないかな
2018/03/01(木) 16:10:34.41ID:KMinam3V0
非標準ておまえら。。。
// basic_like.h
int inkey(void);
こんなん一発作っときゃ終わりだろうがよ
2018/03/01(木) 17:04:57.73ID:3FNdba4V0
自分の使ってるコンパイラの枠組みの中だけで実装できればまだいいんだが…
めんどくさいので既存のものを探すことにになる
227デフォルトの名無しさん (ワッチョイ df9d-wl/W)
垢版 |
2018/03/01(木) 18:26:02.35ID:AzZlAoZA0
CよりC++使うべきでは?
228デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/01(木) 18:33:42.83ID:AvQj/v1Qa
今さらC++使う気にはなれないな
229デフォルトの名無しさん (アウアウエー Sa9f-NBPA)
垢版 |
2018/03/01(木) 18:46:09.21ID:5P8YUW6ka
マスターマインドは
正解にたどり着くまでの
最短最速最適な質問の仕方
を次の一手で出すアルゴリズム考えたな
4列だったら最大7手未満とかそんなやつ
2018/03/01(木) 21:26:58.79ID:pSYCUqTH0
>>224
ウインドウズで開発してるから、VCはconioもってるんだよな。
ただ、布教できなくて悶える。ソース配布できない。
GCCも持ってない環境あるからなぁ。
2018/03/01(木) 21:28:15.90ID:pSYCUqTH0
マスターマインドのAIはダサいのは作ったことある。
正解にはたどりつけるけど、パーミテーションでグルグル回す奴だから回答がキモイ。
そして遅い・・・。
232デフォルトの名無しさん (ワッチョイ df5d-W8CT)
垢版 |
2018/03/02(金) 05:26:58.29ID:btKfsNEv0
>>230
まあ、非標準だから仕方ない。そういうのは条件コンパイルとか、たくさんあるなら環境ごとに別のソースファイルにしてビルド時に選択とか。
そういうことをちゃんとやってるオープンソースソフトウェアが参考になるかも。
2018/03/02(金) 06:44:50.16ID:bNTu0vGw0
待機なしの1キャラ入力は標準に欲しいね
2018/03/02(金) 07:35:26.90ID:Ht5IxdGD0
日本語どうやって入力するんだ?
2018/03/02(金) 09:02:00.75ID:7oxMlhUX0
>>225
にいさんむむむ でキーリピート解除
2018/03/02(金) 22:53:07.31ID:PBdn8yjo0
>>192
立てた。

C言語相談室(上級者専用)
https://mevius.5ch.net/test/read.cgi/tech/1519998483

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

>>195
削除よろ
2018/03/02(金) 23:05:02.75ID:Wy5zsGfp0
>>234
UTF-8型というものはない。
wchar_tにウニコードかOSの文字コードが入ってることを期待しよう。
まぁ、stdinをgetchで読んで解析とかかな。またはfgetsで全部読むとか。
世知辛いのじゃー。
238デフォルトの名無しさん
垢版 |
2018/03/03(土) 19:55:40.33
>>237
一定のchunk sizeでreadして1byteずつ解析やな
2018/03/03(土) 20:06:25.92ID:B47zIri70
あ、そうか。
UTF-8って生バイトfreadしないといけないのか。
失念してた。
240デフォルトの名無しさん (ワッチョイ e79f-m1UI)
垢版 |
2018/03/03(土) 20:54:25.83ID:usZqppoC0
>>236
削除依頼出して誘導の書き込みしておいた。
2018/03/04(日) 09:51:40.56ID:/AI+3Uf1a
おまいらってすごいね
C検定の1級とか余裕なんだろね
2018/03/04(日) 17:53:13.34ID:9DD6RFWE0
いやいや、これでもISO/IEC 9899:2011のつまみ食いをしてるだけですよ
昔のCと違い、今のCは付き合ってらんないところが結構あるんで
243デフォルトの名無しさん (アークセー Sxdb-TGtH)
垢版 |
2018/03/04(日) 23:51:40.13ID:8NE8Y0sUx
10,000行程度のプログラムで何ができるのか想像が出来ん。
244デフォルトの名無しさん
垢版 |
2018/03/05(月) 00:51:13.54
10000行程度を書いた経験だろ

全体だと30万行とかだろ
2018/03/05(月) 01:04:58.69ID:FpxBMBRn0
一プロジェクトで1万行はないな。趣味だから。
トータルならそれ以上書いてるけど。
246デフォルトの名無しさん (ワッチョイ e79f-m1UI)
垢版 |
2018/03/05(月) 01:26:13.77ID:LCMEVuoA0
>>241
それってここに書いてある一級?
https://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%83%BD%E5%8A%9B%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93
だったら特に検定受かってなくてもそういう人だらけじゃないかな。
247デフォルトの名無しさん (ワッチョイ e79f-m1UI)
垢版 |
2018/03/05(月) 01:35:06.01ID:LCMEVuoA0
一万行ねえ。しかしあまりに行数が多くなるとするとC言語を使うこと自体が適切ではなかった可能性も出てくるよな。
あるいは何か設計がまずいか、書き方がまずいか。

何れにしてもプログラムが多くなればなるほど人間がバグを作り込んでしまう率が高くなり更に全体の把握が困難になってくる。
2018/03/05(月) 02:35:53.76ID:FpxBMBRn0
最高効率で1万行ってやりたくないなぁ。
ぜったゲシュタルト崩壊起こす。
2018/03/05(月) 02:49:21.31ID:udBqLrh50
普段から1万行程度書いてる上級プログラマが
今から模範演技を見せてくれそうな予感
2018/03/05(月) 06:35:47.20ID:wW3xLIx70
int
MyFunc
(
int param
)
{
return param * param;
}
2018/03/05(月) 07:59:23.92ID:DUciPmz40
一万行パクった事がある。
2018/03/05(月) 09:53:37.62ID:9If1UATd0
行数で評価とかいまだにあるのかcobolの習慣持ち込むな
2018/03/05(月) 10:35:59.73ID:6dt0Sqct0
生涯ではたぶん 書いた行数より消した行数の方が多い
254デフォルトの名無しさん (アウアウカー Sabb-pjv1)
垢版 |
2018/03/05(月) 10:56:09.00ID:vC0ni0wma
>>249
一万行の上級者様は上級者様専用スレに行ったみたいだから、実演はしてくれないだろう
2018/03/05(月) 16:04:50.85ID:/FWFrph00
voidポインターの足し算は未定義なんだってね。
charのポインターみたいに1バイトずつ増えるからつかえると思ってた。
256デフォルトの名無しさん (アウウィフ FF2b-wl/W)
垢版 |
2018/03/05(月) 16:10:41.91ID:QTTd7ohZF
どうせキャストして使うんだし
2018/03/05(月) 17:54:44.07ID:V+sS+FxI0
C言語初心者向けのスレって結局ここでいいんだろうか?
2018/03/05(月) 17:59:13.03ID:udBqLrh50
いいとも
2018/03/05(月) 18:07:26.38ID:VG/uZnqZd
フォルダ内の複数のエクセルシートの決まったシートをtext形式1つにまとめるのって出来ます?
260デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/05(月) 18:10:45.91ID:qBuz+lExa
>>255
gccもそうなってて以前それ前提に書いてあるソースを見てビックリしたことがある。
特別扱いしているらしい。
2018/03/05(月) 19:32:31.91ID:cQ8T6f3ad
プリプロセッサで
#define foo(n) foo_##__typeof__(n)(n)

double a;
foo(a);

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

になりました
良い方法はないでしょうか?
2018/03/05(月) 20:05:03.11ID:N7KbDTrZd
>>261
型名の解釈は、プリプロセッサのレイヤーでは無理です。
2018/03/05(月) 20:09:24.78ID:SJt3Y40r0
__typeof__ って 演算子っぽいけど
(プリプロセッサ処理の段階では解釈されない:sizeof と同じで
 リテラルの整数に展開されているわけではない)
2018/03/05(月) 20:10:41.84ID:cQ8T6f3ad
がーん

_Genericも二箇所に分けて書こうとするとredefineって言われて先に定義したほうが消えるし、ジェネリックは結構厳しいんですね……
ありがとうございます
2018/03/05(月) 22:18:31.83ID:gAM47Ihup
1万行なんて、きちんと設計してないんじゃね?
2018/03/05(月) 22:28:13.08ID:FpxBMBRn0
sizeof(void)って未定義?
未定義ならそのポインタの加算幅も未定義だな。
void* p = (((void*)(&i))++);
2018/03/05(月) 23:16:20.23ID:THwFwnSk0
キミは正しい
268デフォルトの名無しさん (ワッチョイ e79f-8pbW)
垢版 |
2018/03/06(火) 03:28:05.03ID:ln7SJGum0
本当は void * に対しては足すことも引くこともできない。
2018/03/06(火) 06:45:37.01ID:r6wtBatS0
今ならuintptr_tにキャストして足し算引き算した後でvoid*に戻すのかな。
uintptr_t以前はchar*へのキャストだったかも知れんけど。

しかし実際のところvoid*に対してポインタを進めたり戻したりしたいって、
どういう場面で必要になるんじゃろうか?
2018/03/06(火) 09:29:43.76ID:vOSWGXrq0
char *でいいじゃん
構造がわからないものはバイト列って認識でしょ?
2018/03/06(火) 10:18:02.26ID:5/zKekdl0
分からない物を適当に扱うって、すごいな
2018/03/06(火) 12:31:29.65ID:aP2GFEvqa
しかも符号まであると決めつけてるな
2018/03/06(火) 12:40:00.86ID:KV/wZ8PJ6
GCCとかchar*と同じ挙動じゃなかったっけ?
274デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/06(火) 12:50:23.18ID:Hdg+O/12a
gccはね。
275デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/06(火) 12:54:06.75ID:Hdg+O/12a
そういやポインタ演算と言うと8086用のCコンパイラはfarとか拡張キーワード作ったりして面倒だったな。TurboCだったか。
ああいうなんとも言えないCPUコンパイラだと特殊な決まりがあったりするから要注意だ。

まあ、二度とあんなの市場に出ないような気はするけどな。
276デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/06(火) 12:54:48.33ID:Hdg+O/12a
用のが抜けた。CPU用の、な。
2018/03/06(火) 12:56:39.10ID:3EYe6qQ70
ハーバードアーキテクチャだとdmとかpm修飾なんてのも
2018/03/06(火) 13:31:13.79ID:PuW1uuBL0
farはTurbo Cに限ったことじゃない
8086用である限り必要になる
279デフォルトの名無しさん (アウウィフ FF2b-wl/W)
垢版 |
2018/03/06(火) 14:52:33.73ID:03FKlPoEF
tinyモデルでも使えるfar最強
2018/03/06(火) 15:01:22.33ID:xvhpcg6j0
>>279
でもコード64KBの制限はどうしようもない
2018/03/06(火) 16:57:53.89ID:PuW1uuBL0
64KBしかいらないときに使うのがtiny
tiny使いながら64KBじゃきついとか発想が逆
だったら端っからlarge使えつーの
282デフォルトの名無しさん (アウウィフ FF2b-wl/W)
垢版 |
2018/03/06(火) 17:18:40.34ID:03FKlPoEF
>>281
それは根本的な間違い
誤解産むからやめれ
2018/03/06(火) 21:11:42.80ID:0OC43do0M
>>272
charか符号付きかどうかは処理系とかによる
なので決めつけてるのはお前ってオチ
2018/03/06(火) 21:46:56.01ID:7Z5LV7MX0
整数の差分じゃなくてポインタの差分じゃろ?
2018/03/06(火) 21:52:27.71ID:GCrMS1Np0
char は、符号付き・符号なしの、どちらか分からないから使うな!

エラーに、-1 を使っていたら、0〜255 しか表現できない事もある
2018/03/06(火) 21:58:50.50ID:3EYe6qQ70
>>285
9bitなの?(T_T)
2018/03/06(火) 22:17:46.38ID:3SdWrwMmp
例外を範囲外の値で判定する様なインターフェースが悪い。
はっきり戻り値は動作結果、値は出力用の引数に入れる。
みたいな設計にすべき。
ちな、C#みたいに戻り値を構造体にするって手もあるぞ。
2018/03/06(火) 23:01:01.51ID:GCrMS1Np0
素人が、char型の-1 を、エラー値に使っていると、
OS・コンパイラが変わって、その環境では、char型が0〜255 になってる

char型は、符号付き・符号なしの、どちらか分からない
2018/03/06(火) 23:07:35.07ID:xvhpcg6j0
>>288
言語内の話と環境(シェルやOS)の話を混同してはならない
2018/03/06(火) 23:46:04.03ID:5/zKekdl0
signed char って書けば?
2018/03/07(水) 02:24:03.38ID:Tq6bvCAq0
>>288
charの使い方が間違っていることが問題なのであって、charを使うこと自体が悪いのではない。
2018/03/07(水) 02:45:29.86ID:kGjiUMXW0
はいー。
1バイト整数を使いたかったら、stdintを使いましょう。
int8_tは内部がcharかもしれないけど便宜上charではありません。
ハイ、復唱。int8_tはcharではありません。
ちなみにC++でバイト表現専用のstd::byteが入りました。すごく使いにくいけど。
2018/03/07(水) 10:31:28.26ID:ylRgY7un0
>>282
どこか間違っているか?
2018/03/07(水) 12:28:33.48ID:maM/8pnG0
gets_sのsは何の略か教えてください。
2018/03/07(水) 12:31:25.66ID:/Jrz1mw60
secure
296デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/07(水) 12:53:17.89ID:vftXHA5La
>>294
Windows用のコンパイラの話?
知らないけど、多分 size の s じゃない?
297デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/07(水) 12:53:35.53ID:vftXHA5La
>>295
あ、それか。
298デフォルトの名無しさん (アウアウエー Sa9f-wl/W)
垢版 |
2018/03/07(水) 12:59:49.73ID:L+d1J7Rsa
stopper
2018/03/07(水) 13:42:40.79ID:r9zWShH00
昔はpc-98DOS用に作ったソフトがハード依存コードが無ければ
DOS/V機やTOWNSでも動くって聞いて驚いた。
2018/03/07(水) 13:49:17.29ID:9HCtzU4sd
safe
301デフォルトの名無しさん (ワッチョイ df5d-W8CT)
垢版 |
2018/03/07(水) 16:58:54.65ID:+xlstTJJ0
N5200 で LSI C-86 試食版を使ってた……ような気がする。昔のことだから記憶が曖昧だ。
2018/03/07(水) 17:13:49.35ID:ylRgY7un0
vz?
2018/03/07(水) 17:14:24.12ID:GwlIl+h20
MS-DOSが動作していれば使えるはず
2018/03/07(水) 17:17:05.15ID:ylRgY7un0
dispelしなきゃ無理じゃね?w
2018/03/07(水) 17:21:00.28ID:XsGIcGwmp
secureじゃねーだろ。
暗号化だってされてねーんだからw
safetyくらいな感じじゃね?
306デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/07(水) 17:25:48.32ID:Rf3JBuAda
DOSのシステムコール(なんて言うんだっけ?DOSコール?忘れた)だけを呼び出しているプログラムならハードウェアが違っても動く。

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

当時のプログラムはみんな勝手にOS無視してグラフィックスのVRAMに直接アクセスして絵を出していた。
すると当然他の機種に持っていくと意図した通りに動かない。
307デフォルトの名無しさん (アウアウエー Sa9f-wl/W)
垢版 |
2018/03/07(水) 17:26:24.22ID:L+d1J7Rsa
int21
2018/03/07(水) 17:27:45.62ID:rG21M89G0
INT 21H なら ファンクションコールだったかの
2018/03/07(水) 17:28:50.29ID:GwlIl+h20
伝統のCALL 5
2018/03/07(水) 17:29:37.78ID:ylRgY7un0
DOSCALLS.DLLてのもあったなあw
311デフォルトの名無しさん (アウアウエー Sa9f-wl/W)
垢版 |
2018/03/07(水) 17:55:21.18ID:L+d1J7Rsa
CP/M か
0066 とかもあったっけ
2018/03/07(水) 19:19:15.79ID:Zw7oeE4wM
>>296-298, >>300, >>305
お前らがどう思おうとマイクロソフトはセキュリティ強化版って言ってるから
2018/03/07(水) 21:48:34.17ID:mAtFjoDLa
super man
2018/03/08(木) 05:46:05.86ID:Eav/q7cG0
#define a(b) c##b##d
というマクロでcdを出力したいのですが
a()を呼び出すとエラーになります
解決策ありますでしょうか?
2018/03/08(木) 07:45:03.75ID:/HWAGXcB0
>>314 俺のところはエラー出ないみたい。環境によるのかな。
コンパイラのバージョンを示せば詳しい人が現れるかも。
2018/03/08(木) 07:52:57.57ID:Eav/q7cG0
ありがとうございます。
解決しました。
2018/03/08(木) 08:09:34.78ID:Ed7uI0ohM
どう解決したか書くのが礼儀ってもんだ。
2018/03/08(木) 08:29:41.94ID:Eav/q7cG0
コンパイラーのエラーが出ないという意見をきいて
試してみたら別のところ―がエラーになっていたということでした。
そして自分が悪質なコンパイラーに騙されていたことに気づきました。
2018/03/08(木) 09:10:26.22ID:lHBKoGy1p
エラーの文章くらい読めよ。
320デフォルトの名無しさん (アウウィフ FF1f-0aB1)
垢版 |
2018/03/08(木) 10:10:36.36ID:ue18PqKiF
Cのエラーはエラーの発生個所を教えてくれるけど原因個所は教えてくれない
2018/03/08(木) 10:25:51.65ID:0lNTHbnP0
おそらく警告とエラーを混同していると思われ

> warning C4003: マクロ 'a' に指定された実引数の数が少なすぎます。
2018/03/08(木) 17:10:32.81ID:/HWAGXcB0
関数型マクロの使用時、カッコの内側が空の場合に、
「引数が指定されていない」と解釈して警告を出すか、
「1個の引数(内容はヌルストリング)が指定されている」と解釈するか、
そういう問題みたいね。
2018/03/08(木) 23:40:10.76ID:nwTnwFPU0
>>292
>int8_tは内部がcharかもしれないけど便宜上charではありません。

普通はsigned charだな。当たり前。「charかもしれない」なんてこともありえない。
2018/03/09(金) 00:58:31.73ID:U4YZHGfl0
そういう一般仕様から外れるコンパイラの使用を強制させられたことあるの?
2018/03/09(金) 06:39:09.84ID:K2/JY7Cc0
cout << typeid(__int8).name(); //char
2018/03/09(金) 10:59:36.49ID:rlkWp7/Ip
誰だよCの話題に別言語持ち出してんの。
2018/03/09(金) 12:10:45.59ID:WqdE+VIZM
いやらCね
328デフォルトの名無しさん (アウアウカー Sa7b-vvOV)
垢版 |
2018/03/09(金) 12:13:57.64ID:LlK9d7kba
頭おかC
2018/03/09(金) 16:36:39.04ID:AbBnYUJz0
符号なし64ビット整数を64ビット右シフトすると
0にならないでそのままの時や変な別の値になるときがあるんですけど
コンパイラーのバグですか?
2018/03/09(金) 17:10:28.27ID:aCtfd81Na
>>329
もしかしてですが、
悪質なコンパイラに騙されているのでは?
2018/03/09(金) 17:10:41.68ID:AbBnYUJz0
http://fast-uploader.com/file/7076138459666/
2つのファイルが無いと再現できなかったのでソースファイルを
アップロードしました
コンパイルしてなぜ0にならないのか教えてください。
2018/03/09(金) 17:11:34.80ID:er4JdT2d0
>>329
a >> b で、bの値がaの型のビット数「以上」のときは未定義動作、
に該当するから、コンパイラのバグではない。…と思う。

本当は規格の引用をすべきなんだが、どなたか頼む。
333デフォルトの名無しさん (ワッチョイ 7361-0aB1)
垢版 |
2018/03/09(金) 17:12:19.58ID:AbBnYUJz0
コンパイラーは
gcc version 7.3.0 (Rev1, Built by MSYS2 project)
で試しました。
悪質なコンパイラーに騙されているのかもしれませんね。
2018/03/09(金) 17:25:01.13ID:AbBnYUJz0
ファイル1
#include<stdio.h>
#include<stdint.h>
uint64_t f(uint8_t a,uint64_t b){
printf("%llx\n", b>>(64-a));
return b>>64-a;}
void e(uint8_t a){ f(0,0x8318318318318318);}
void g(uint8_t a){ f(a,0x8318318318318318);}
ファイル2
#include<stdint.h>
uint64_t f(uint8_t a,uint64_t b);
void g(uint8_t a);
void e(uint8_t a);
int main(void) {
g(0);
e(0);
return 0;
}
この二つのファイルをコンパイルして実行してみてください。
よろしくお願いします。
2018/03/09(金) 17:27:15.48ID:K2/JY7Cc0
その昔、CPUのバグで16bitレジスタを32bitシフトすると0にならないとかいうのなかったっけ
2018/03/09(金) 17:45:47.23ID:AbBnYUJz0
これからは64ビットのシフト使ってるコードは全てバグの温床になるな。
2018/03/09(金) 18:10:27.57ID:Z9n7UPH0M
C11の6.5.7の3より。
If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.
2018/03/09(金) 20:12:23.00ID:er4JdT2d0
>>337 フォローありがとう。この部分ですわ。
6.5.7 Bitwise shift operators ビットシフト演算子 の項。

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

と言った感じかな。
promoted left operand の部分が「汎整数拡張後の左オペランド」で
合ってるのか自信ないけど。
2018/03/09(金) 21:17:55.13ID:ysNVe5/v0
64bit 符号なしを、64bit シフトするって、そもそも無意味だろ

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

意味があるのは、63bit まで
340デフォルトの名無しさん
垢版 |
2018/03/09(金) 22:22:53.87
>>339
0になってくれれば余計な分岐やら演算やらを省けるかもしれないだろ
2018/03/09(金) 22:57:22.97ID:dpc+cSNT0
0クリアする最適な方法なの?
2018/03/09(金) 23:23:40.83ID:ysNVe5/v0
1010 XOR
1010
----
0000

n は任意のビットで、n XOR n で、全ビット0にできる
343デフォルトの名無しさん
垢版 |
2018/03/09(金) 23:25:22.45
>>342
そんなん全ビット読まなきゃいけないじゃん
2018/03/09(金) 23:29:26.36ID:9IZd/e860
n and 030 とかで任意ビットのonはわからないか?
2018/03/09(金) 23:47:39.35ID:U4YZHGfl0
>0クリア
つ ゼロレジスタ
2018/03/10(土) 00:03:47.54ID:a2p+alti0
1 bit づつじわじわシフトするなら何とかなるんだけどな。
https://paiza.io/projects/D9KFwMa77ifp6AOgAaO2PQ
2018/03/10(土) 05:55:47.17ID:jel/5KgH0
定数リテラルにullって使ってなくてもだいじょうぶなんだっけ?
2018/03/10(土) 12:12:18.84ID:Z1L9sOVC0
>>343
xor は少サイクルなのが利点ですね。
2018/03/10(土) 13:08:59.94ID:qojMr6PP0
アセンブリコードの0にする方法はxorやのう
2018/03/10(土) 13:24:16.81ID:+HpaswK40
CPU依存すぎる
2018/03/10(土) 13:47:45.54ID:f+B2oLbA0
Z80時代の爺だろ、放置してやれ
2018/03/10(土) 14:18:47.85ID:J/EnQN8G0
パチンコ屋さん
2018/03/10(土) 15:25:43.76ID:ps/htySn0
今じゃ乗除演算さえワンサイクルの時代に何アホな話してんだ?
354デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/10(土) 16:20:41.72ID:HvD6qwC3a
アセンブラについてはどうしても自分でアセンブリ言語で書かねばならない事態に陥らない限り書くことはないだろうなあ。
2018/03/10(土) 16:50:09.76ID:+Ww908Qw0
>>354
そうそう、printf デバッグでは力不足でもう否が応でも gdb に行くのを逃げ回っているのと同じです
356デフォルトの名無しさん (ワッチョイ 0b9f-RK0z)
垢版 |
2018/03/10(土) 17:18:49.50ID:a2p+alti0
gdb は普通に使うなあ。
357デフォルトの名無しさん (アウウィフ FF1f-0aB1)
垢版 |
2018/03/10(土) 17:35:13.89ID:5pXC+BOTF
printfなめたらいかん
2018/03/10(土) 17:41:43.93ID:ps/htySn0
割り込みん中でprintf使って暴走してデバッグが出来なかった思い出。
2018/03/10(土) 18:10:52.64ID:a2p+alti0
俺はシグナルハンドラの中でログ出力しようとして FILE * 経由で fprintf() 等で出力したら
そのライブラリの中でデッドロックしてハマった。 kill -ABRT で core dump させて gdb
で core ファイルと共に読ませてようやっと停止箇所がわかった。
2018/03/10(土) 20:11:43.97ID:fNi+2/6HM
gdbマスターしてからprintデバッグバカにしてたけど
printデバッグ自動化してからprintデバッグ信者になった
無論レアケースデバッグはgdb使うけどね
2018/03/11(日) 01:20:23.17ID:ry5KQfC80
printf() をデバッグで使う時はバッファリングを考慮していないとハマる事がある。
それと stdout と stderr と両方に出る可能性がある場合にその順序が食い違う可能性もある。
シグナルハンドラ内やマルチスレッドプログラムで使ってうまく行かない事もある。

その辺を全て考慮するならいいだろうが、しかし、それなら初めからログファイルに出力される
ように作った方が良いような気もする。
2018/03/11(日) 02:00:44.19ID:22CnVBlaM
printデバッグなら専用モジュール作るべきだな
俺は時刻、関数名、コンテキストIDを付けて
標準出力かファイルにはかせてる
363デフォルトの名無しさん (ワッチョイ 8f23-0aB1)
垢版 |
2018/03/11(日) 09:19:44.59ID:zWe+i43K0
そこまでするならsyslog
2018/03/11(日) 10:20:33.73ID:szqHStkk0
>>361
setvbuf忘れなければ済む話だよパパ
365デフォルトの名無しさん (ワッチョイ 0b9f-uQtz)
垢版 |
2018/03/11(日) 14:10:54.85ID:ry5KQfC80
>>363
そだねー

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

この頃のライブラリは多分マルチスレッドでもちゃんと動くように内部でロック掛けている部分があると
思うんだけどね、例えばシグナルハンドラの中でそのロックを掛けている最中にまたシグナルが来て
同じシグナルハンドラに入ると同じロックを掛けようとしてデッドロックするなんてことが起こり得ると
思うんだが。(まあその程度のことでデッドロックしてしまうこと自体がバグかも知れんが。それ以前に
シグナルハンドラの中でprintf()は使うなって話でもあるか…)。
2018/03/11(日) 15:06:05.16ID:szqHStkk0
>>365
ロケールがCならprintfだってスレッドセーフだしぎりぎりシグナルセーフだよパパ
2018/03/11(日) 15:33:10.91ID:UYIqocxw0
世の中には完全なCライブラリを実装していないタイニーなマシン用のサブセットだってあるんだよ坊や。
368デフォルトの名無しさん (ワッチョイ 23b3-lJdD)
垢版 |
2018/03/11(日) 16:08:45.67ID:sEfAJdP70
それはCじゃないから、このスレで話し合っても無駄では。
2018/03/11(日) 16:12:01.01ID:UYIqocxw0
Cは言語仕様であって、ライブラリ仕様は別枠だろ?
2018/03/11(日) 16:46:35.93ID:iUqzSqql0
30年以上前だったかな、あるメーカーのプリンタファーム開発用Cコンパイラが配列要素上限が255だった
当時アスキーネットでこれを聞いたvoid氏が呆れていたようだ。
371デフォルトの名無しさん (ワッチョイ 23b3-lJdD)
垢版 |
2018/03/11(日) 17:10:10.38ID:sEfAJdP70
インストラクションに8ビットまでの即値を組み込めるなら、その制限によって(そのような最適化が必要なプロセッサにとって)強烈な最適化をかけられるから、アリやナシやと問われればアリのような感がある。
2018/03/11(日) 17:20:27.39ID:Dtt3qpb50
Cライクって言っときゃいいのにCと名乗ってしまうから
イチャモンつけたいヤツの標的になる
373デフォルトの名無しさん (ワッチョイ 23b3-lJdD)
垢版 |
2018/03/11(日) 17:33:57.41ID:sEfAJdP70
本場ドイツ直輸入ポークソーセージを買ったら魚肉ソーセージだったような感じですね。
つまり詐欺です。
2018/03/11(日) 17:36:14.99ID:szqHStkk0
>>369
それ言ったらバッファリングの話題もCの話にならないだろぉオヤジィ
2018/03/11(日) 17:37:59.08ID:iUqzSqql0
何が正当な教義かについて議論したければ、上級者スレでやってね
376デフォルトの名無しさん (ワッチョイ 23b3-lJdD)
垢版 |
2018/03/11(日) 18:04:00.35ID:sEfAJdP70
こういう掲示板で宗教対決を規制したら過疎化するんじゃないだろか。
377デフォルトの名無しさん
垢版 |
2018/03/11(日) 18:26:39.19
>>370
まるでUvaみたいな制限だな(藁
2018/03/11(日) 18:45:46.67ID:QedwXA9H0
>>366
マルチスレッド版のライブラリーがあるかと
行出力中にスレッドが切り替わらない
2018/03/11(日) 18:48:04.93ID:QedwXA9H0
>>374
なお初代K&Rにはライブラリーの仕様は含まれない。
WhiteSmithとかはprintfが実装されてない
2018/03/11(日) 20:24:48.92ID:1mhcZmSWa
>>372
セントロニクス
2018/03/11(日) 21:13:40.31ID:Dtt3qpb50
5Vシングルエンドがそのままコネクタに出てるアレか
アレを基板に直付けするアフォが多くて頭クラクラした
382デフォルトの名無しさん (ワッチョイ 6ac6-lLam)
垢版 |
2018/03/11(日) 23:26:14.78ID:3FTmPjnp0
for(i=0;i<10;i++)
scanf("%d",&num[i])

で入力した変数がiに入ってしまうことがあるのですがなぜですか?
2018/03/11(日) 23:59:04.31ID:Sn9rQkOCM
numのサイズが10ないとか。
2018/03/12(月) 00:02:45.79ID:9wDOvV2B0
ソース全部晒せ
2018/03/12(月) 07:51:36.03ID:6B2Hj+UH0
do whileはいらない子?
2018/03/12(月) 08:04:24.78ID:uoSNo/WDM
アルゴリズムによってはdo whileの方が素直なときがある。まれだが。マクロを本当の関数っぽく使うのにdo while (0)使うハックがある。まれだが。
コンパイラによってはdo whileの方が速いコード出す。まれだが。
2018/03/12(月) 08:36:16.07ID:SpziwmuNM
>>370
プリンタっつーてもピンキリだからなぁ
レシートプリンタとかならその程度で充分かもしれん
2018/03/12(月) 09:25:52.84ID:kO6Vn+sG0
>>385
んなこたーない
whileのほうが使用頻度は高いけど
本質的に後判定なロジックはそんなに珍しくもない
2018/03/12(月) 09:30:32.07ID:Cd8AY8RG0
do〜whileは、必ず一回は処理してくれるから便利。
2018/03/12(月) 09:31:53.62ID:kO6Vn+sG0
繰り返し対象処理が実行される条件がブレるから気をつけないといけないけどね
2018/03/12(月) 10:16:52.94ID:Igle62xq0
do{continue;}while(false); で無限ループになるのウケる。
2018/03/12(月) 10:19:34.77ID:kO6Vn+sG0
391 error: undeclared symbol 'false'
2018/03/12(月) 10:42:19.80ID:wLVR4ID4a
>>389
女に見習わせたいな
394デフォルトの名無しさん (ワッチョイ 8f23-0aB1)
垢版 |
2018/03/12(月) 12:03:54.32ID:A4+OWJSs0
こんな書き方たまにする

do{
・・・
条件
break;
・・・
条件
break;
・・・
条件
continue;
・・・
条件
break;
・・・
条件
continue;
・・・
}while(0);
2018/03/12(月) 12:10:22.44ID:rLGzoMUT0
>>387
一応汎用のレーザープリンターなんだ
30年って一寸行き過ぎだな
95が出てきた頃だから、20年前か
2018/03/12(月) 12:11:48.84ID:Igle62xq0
>>394
GOTOを怖がるな。
俺は反GOTO教は抜けた。
まぁ乱用しようとも思わんけど。

>>392
文脈で察してくれ。
boolはいったことだし。
2018/03/12(月) 15:52:19.83ID:bCYSOHOV0
B 判定 A B 判定 A B … みたいに
do { } while () のブロックの途中に飛び込んで開始するようなのが悩ましい

goto ENTER;
do {
 A();
ENTER:
 B();
} while(条件);
2018/03/12(月) 17:04:49.51ID:Ro63JAiYH
出口が複数は可だけどエントリーポイントが変なとこにあるのは読みにくいからやめたほうがいい。
この例の場合はB Aの無限ループにして、Bのあとの条件で脱出するのが定石。
2018/03/12(月) 17:15:21.51ID:bCYSOHOV0
for(;;) {
 B();
 if (条件) break;
 A();
};
こんな感じですか。
やっぱり頭から入っていくほうが読みやすいし…
2018/03/12(月) 17:24:28.52ID:rLGzoMUT0
処理内容がそうならそういうことなんだろうが、
見ていて気持ちが悪くなるロジックだな、すまん
2018/03/12(月) 17:31:42.39ID:kO6Vn+sG0
エントリーポイントが変なとこって、mainだって1行目にはまずならないしな
実装されることなく廃止になったキーワードにentryつーのがあって
そいつがおそらくは1行目に
entry main;
とか持ってこれるようにするつもりだったのかもな
402デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/12(月) 17:41:10.71ID:mlDQMbRTa
>>397
昔の BASIC を思い起こさせる goto の使い方だなw
2018/03/12(月) 17:58:00.69ID:DBOT0xK9M
gotoは禁止はしないが、異常系の終了処理にジャンプするパターンだけ許容だな。
404デフォルトの名無しさん (アウウィフ FF1f-0aB1)
垢版 |
2018/03/12(月) 18:04:50.67ID:FajbO2mAF
exceptionさえあれば
2018/03/12(月) 18:06:32.58ID:bCYSOHOV0
コンストラクター/デストラクターのような機構があれば
異常時の後始末は割と楽に書けるっすね
406デフォルトの名無しさん (アウウィフ FF1f-0aB1)
垢版 |
2018/03/12(月) 18:09:46.06ID:FajbO2mAF
atexit()はあるぞ
2018/03/12(月) 18:25:47.87ID:rLGzoMUT0
異常の場合は,例外処理をしてから続行したい
2018/03/12(月) 19:11:12.71ID:HQXq1VOq0
つ setjmp
2018/03/12(月) 19:32:23.64ID:6OIrRNruM
>>408
volatileをつけ忘れて最適化で暴走するなんてよくあること。
2018/03/12(月) 20:42:20.27ID:SpziwmuNM
>>395
1995年頃でLBPだと16bitから32bit CPUに移行する頃だから配列サイズが最大255なんて言うのはさすがに見たことないわ
ちなみにうちはSH-2+独自モニタからR3000+VxWorksへの移行期だった
コンパイラもチップベンダーかOSベンダーのものを使ってた
2018/03/12(月) 21:14:21.91ID:hz29p2j/p
gotoを後始末以外の使い方して変な所に飛ばしたりするから禁止って言われるんだよな。
2018/03/12(月) 22:09:38.43ID:kO6Vn+sG0
昔のBASICにはON ERROR GOTOとかON ERROR GOSUBつーのがあって
異常系から復帰できたんだよな、それがCやC++にはない
2018/03/12(月) 22:12:32.16ID:rLGzoMUT0
setjmp longjmp
2018/03/12(月) 22:16:55.21ID:kO6Vn+sG0
RESUME NEXTに相当する処理はsetjmp.hにはない
2018/03/12(月) 23:49:45.06ID:+NwoaeJY0
gfortranで言うところのfcheck=allを設定した時のように配列の範囲外アクセスを検知したいのですが、いい方法はありますか?
2018/03/13(火) 00:26:13.95ID:zisSqBer0
boundschecker 使えばよろし
2018/03/13(火) 00:43:16.47ID:LMrPxj1+0
Linuxなので代用を探していたらvalgrindに辿り着きました
ありがとうございます
2018/03/13(火) 03:11:31.37ID:a0aOTtHi0
大域ジャンプはダメだ。
2018/03/13(火) 07:50:52.88ID:H/7hRIr60
初期化

タイトル
...
GOTO 本編

GAME OVER
...
GOTO タイトル

ゲーム本編
...
GOTO GAME OVER
2018/03/13(火) 08:44:52.34ID:a0aOTtHi0
>>419
よくあるダメなゴトーさん。
421デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/13(火) 10:00:11.49ID:mZm9h8PZa
>>412
まあ、ないけど、エラーになったら自分でif文使って分岐すれば良いだけでは?
C言語は単に言語レベルでのそういう便利機能が少ないってだけで実現する方法は内部的な動作まで考えたら結局は同じにしかならんと思うよ、
2018/03/13(火) 10:29:21.12ID:FbdkMN9Up
C言語はマクロアセンブラから派生した感じなんで、言語体系はお世話にも良いとは言えないんだよな。
当時はマシン語で演算結果フラグで条件ジャンプや条件コールしてた煩わしさから開放されただけでも有り難かったんだ。
そんなチープな言語にオブジェクト指向だの例外処理だのとか求めて迷走したのがC++
ええい、いっそ作り直してしまえって出したのがJavaやC#
だからC言語使う時点で諦めれ。
2018/03/13(火) 11:04:12.06ID:92t/zLSk0
>>421
そのif文でゴチャゴチャしだしたら「例外処理」を名乗れない
2018/03/13(火) 11:54:23.49ID:a0aOTtHi0
基本的にウオーターフォールを守るのが大事やな。
そのうえでどこに飛びたいかって感じ。
425デフォルトの名無しさん
垢版 |
2018/03/13(火) 12:12:14.52
フォールウオーバー機構を言語レベルで用意すべき
2018/03/13(火) 12:16:24.04ID:a0aOTtHi0
https://www.google.co.jp/search?q=%E3%82%A6%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%80%80%E6%84%8F%E5%91%B3&;
ウオーバーってなんぞ?
2018/03/13(火) 12:26:22.54ID:CTGLDN6cM
漢字で書くと闘婆
428デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/13(火) 13:00:28.56ID:5qOlO1LIa
>>423
名乗らんでいいのでは?

Cが不便なら他の言語使えばいいじゃない。
2018/03/13(火) 13:12:03.18ID:92t/zLSk0
>>428
ああ、議論できないのね
いいよ話さなくて
2018/03/13(火) 13:20:12.96ID:lXm9DcKjM
SIGUSR1/2じゃ駄目なのか?
431デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/13(火) 15:58:05.78ID:LC30GjQRa
>>429
議論?何の?新言語の?
2018/03/13(火) 16:39:07.67ID:92t/zLSk0
>>431
いいよ、無理に話さなくて
2018/03/13(火) 19:35:09.64ID:WMMjj2eHM
聞く耳持たんらC
2018/03/13(火) 20:04:26.12ID:/ChP+Vc3M
突っ込まれて遁走だろ w
2018/03/14(水) 02:09:35.30ID:IiyiuIPr0
ここで幾ら議論してもC言語は変わらない。

Cから派生した言語を新たに作るというのであれば議論することには意味があるだろうが、そうでないならそれはただの愚痴だ。
2018/03/14(水) 06:44:38.33ID:4nqAllCK0
おまえさあCの例外処理が言語のビルトインとか思っているわけ?
Cは変わらないとか言っちゃってるけど、
その現状のCがわかってないのに変わったかどうか気付けるのか?
2018/03/14(水) 07:02:59.95ID:M7iHvccR0
一応errnoだったかっていう、失敗理由を示す変数がある事はある。忘れられてるけど。
C言語で唯一トラブルシューティングに使える変数。
2018/03/14(水) 08:03:51.30ID:ylQhqnt4M
>>436
> その現状のCがわかってないのに
お前だけだろ w

>>437
ライブラリレベルの話を入れるかどうかは悩ましいな
普通の言語なら入れなくてもいいと思うがC言語にはsetjmp/longjmpなんて言うとんでもないものもあるからなぁ
2018/03/14(水) 08:15:23.77ID:4nqAllCK0
errnoだってwww あれが例外処理なのか

setjmpがどうとんでもないのか具体的には言えないんだろうな
だから聞かない
2018/03/14(水) 08:25:02.15ID:M7iHvccR0
>>439
大域ジャンプするとエラー処理したところが戻ったりして変数グチャグチャになることがあるからな。
まぁ、C++の例外も大域ジャンプだし。個人的には使わないな。
古き良き-1やら_boolであきらめる方が精神的には良い。
んで、趣味位のケースなら正常系だけ書いておけば大体問題ない。
エラー系は大体ロジックエラーだからデバッグで落とす。
2018/03/14(水) 08:29:46.90ID:ylQhqnt4M
>>439
> setjmpがどうとんでもないのか具体的には言えないんだろうな
他の言語でライブラリレベルで実装してる例はないから
まともな頭があれば理解できるはず
2018/03/14(水) 08:31:33.24ID:6wuH32OAd
高級アセンブラの名前は伊達ではないよね。
2018/03/14(水) 08:32:17.72ID:M7iHvccR0
あれジャンプじゃなくて、スタックロールバックだからな。どっちかっていうとリセットの類。
他の言語でこれは実装できない。というかやりたくはないだろう。
2018/03/14(水) 08:35:45.72ID:M7iHvccR0
大域ジャンプ+動的メモリアローケート。あぁおそろしい。
なので、大域ジャンプはやめましょう。
2018/03/14(水) 08:37:30.11ID:ylQhqnt4M
>>440
> 大域ジャンプするとエラー処理したところが戻ったりして変数グチャグチャになることがあるからな。
それはお前の能力が足りないだけの話だろ w

> まぁ、C++の例外も大域ジャンプだし。
C++はデストラクタとかの処理も要るからライブラリレベルでは実現できない
そう言う処理を全てプログラマに押し付けられるC言語だからできるってことでもある
2018/03/14(水) 08:41:34.04ID:M7iHvccR0
>>445
あーすげー。この人、他人がいじった変数全部把握してるんだな。すげー。
メモリ確保したのなかったことになっても正常系に戻せるんだな。
超人か!!
2018/03/14(水) 08:45:22.60ID:M7iHvccR0
C++のクラス機構をライブラリで実装するときは、構文糖入れたりとか、イベントモデル入れたりとか。
エネルギーばかりかかって収穫がない。
2018/03/14(水) 09:25:24.96ID:ZphqLecba
>>436
Cには言語レベルでの例外処理はないのでは?何のことを指してそう言っているのか?
2018/03/14(水) 09:28:14.80ID:ooB4nY3v0
Cにだって例外処理はある。
でもそれって、CPUの例外割り込みの事だけどね。
あー結局言語仕様じゃ無いじゃんw
2018/03/14(水) 09:29:50.23ID:ZphqLecba
>>449
ほら。ないよな?
2018/03/14(水) 09:32:49.61ID:ZphqLecba
割り込みっていうならシグナルがあるがしかしOSの問題だよな?
てか標準じゃないか。それにシグナルのために特別な言語仕様が作られてもいない。
2018/03/14(水) 09:35:13.20ID:ooB4nY3v0
所詮Cは高級アセンブラだからなぁ
2018/03/14(水) 10:19:21.23ID:4nqAllCK0
>>441
現状のCの話じゃなかったのか?
なんで他の言語が出てくるんだ

俺はてっきりsetjmpの仕様がとんでもないと言っているのかと思ったが
実装方法がとんでもないと言っているのか?
あれか動作保証のないマイクロ診断命令でも使っていると言いたいの?
2018/03/14(水) 10:20:28.21ID:4nqAllCK0
>>448
言語を定義する規格票が定義しているライブラリのことだよ
まさか知らんのか?
2018/03/14(水) 11:44:11.11ID:jowRUKsS0
何やら雰囲気が悪くなってるように感じるけど、カレンダー絡みかな。
2018/03/14(水) 12:08:39.92ID:L/3+Hz1H0
やたら突っかかってくるやつを構ってやっているだけだが
457デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 12:22:56.52ID:e7inwI4na
>>454
知らんなあ。Cの例外処理ってなんなの?
2018/03/14(水) 12:24:13.25ID:y6ADsCAy0
ここは遊び場ではありません
2018/03/14(水) 12:52:15.53ID:L/3+Hz1H0
>>457
そうか、知らんのか
じゃあ話にならんな
460デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 12:53:42.74ID:e7inwI4na
>>459
何のことなのかぜひ書いてくれ。
2018/03/14(水) 12:53:55.90ID:L/3+Hz1H0
人の話の腰を折ることに専念せざるを得ない防戦一方なつまらんやつ
2018/03/14(水) 12:55:02.45ID:L/3+Hz1H0
>>460
おまえ、そこで3回まわってワンといえ
書いてやるかも知んねーからw
2018/03/14(水) 12:55:16.50ID:x85VLsABM
>>446
むしろそう言うのを把握せずにどうやってプログラム組んでるんだよ?
動けばラッキーってか? w
2018/03/14(水) 12:58:38.88ID:x85VLsABM
>>453
> 現状のCの話じゃなかったのか?
> なんで他の言語が出てくるんだ
どんだけ理解力がないんだよ...

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

> あれか動作保証のないマイクロ診断命令でも使っていると言いたいの?
背伸びしてマイクロ診断命令とか言い出すとか w
465デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 13:00:11.52ID:e7inwI4na
もしやこんなやつの事を言ってるのか?
http://d.hatena.ne.jp/htz/touch/20090216/1234774418
466デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 13:02:30.29ID:e7inwI4na
自作関数からのlongjmp()利用するなら似たようなものは作れるが、それは言語レベルで例外処理をサポートしている状態とは違う。
467デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 13:02:58.32ID:e7inwI4na
>>462
言ったぞ。早く書け。
468デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 13:04:49.57ID:e7inwI4na
あ、関係ないけどホーキング博士が死んだという速報が入った。
2018/03/14(水) 13:35:20.49ID:M7iHvccR0
>>463
大域ジャンプなんぞつかわんので。GOTOくらいは使うけど。
戻った変数と戻ってない変数把握するの無駄すぎる。
んで、どうやってって関数かくときにifで入力要件位書くだろ。無駄な引数減らしたりとか。
2018/03/14(水) 13:43:20.07ID:Ul+PcfeA0
HDLCの状態遷移を大域jump無しで書くのは大変だろうなぁ
2018/03/14(水) 13:48:42.43ID:M7iHvccR0
さぁ、未経験だからね。
2018/03/14(水) 14:09:18.81ID:J4jCJ0kF0
>>468
うん、確認した
2018/03/14(水) 14:51:40.09ID:L/3+Hz1H0
>>467
そんな約束してねえぞゲーハー
2018/03/14(水) 14:54:07.64ID:L/3+Hz1H0
>>469
gotoじゃなくGOTOね
Cに限らない一般論ということだな
しかしlongjmpやthrowなんか大域ジャンプだろ
おまえさんはそう思わないのか?
475デフォルトの名無しさん (アウウィフ FF1f-0aB1)
垢版 |
2018/03/14(水) 15:26:30.92ID:2cAisCwCF
>>452
それな
Cのソース書きながらアセンブラのソースが思い浮かぶ
476デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 17:04:58.74ID:buZ+p9lOa
>>473
早く書けよ。こっちゃあ昼からずっと回ってワンワン言いっぱなしなんだからよ。もう千回ぐらい回ったぞ。
2018/03/14(水) 17:08:34.94ID:L/3+Hz1H0
>>476
よかったな
ほら、もう1000回

# アホ
478デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 17:14:31.52ID:buZ+p9lOa
他の人でこいつの言うことわかってるやつ居るのか?
2018/03/14(水) 17:24:39.97ID:L/3+Hz1H0
犬に邪魔されて説明どころではない状態だからなあ
2018/03/14(水) 18:08:46.89ID:m9sKyebjH
情報持ってるふりして出し惜しみするのがマウンティングの基本
481デフォルトの名無しさん (アウウィフ FF1f-0aB1)
垢版 |
2018/03/14(水) 18:24:47.12ID:2cAisCwCF
朝日新聞ですねわかります
2018/03/14(水) 18:29:37.08ID:L/3+Hz1H0
煽れば出ると本気で思っているならやってみな
この程度の話、マジこの程度にも付いて来れないアホの泣き声は物笑いの種だぜ
2018/03/14(水) 18:30:37.68ID:uMO7yRavM
>>469
無駄じゃねーよ、把握しろ
把握しやすく設計するのも能力のうち
2018/03/14(水) 18:32:36.61ID:uMO7yRavM
>>480
持ってるふりすらできてないだが...
どうみてもいっぱいいっぱいやん w
485デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 18:41:41.61ID:buZ+p9lOa
ま、どうでもいいから>>436で書いたC言語の例外処理についてどういうものなのか書けよ。
2018/03/14(水) 18:52:07.48ID:L/3+Hz1H0
>>485
それよりあと1000回だぞ
急がないと日付が変わっちまうぞw
487デフォルトの名無しさん (アウアウカー Sa7b-joIP)
垢版 |
2018/03/14(水) 19:21:46.36ID:buZ+p9lOa
わかったわかった。もう書かなくていいよ。かわいそうなやつだな。合掌。
2018/03/14(水) 19:45:37.85ID:IogLKo4e6
ID:L/3+Hz1H0に構うな
2018/03/14(水) 21:53:59.94ID:L/3+Hz1H0
収穫ゼロで引き下がる、みじめなヤツw
2018/03/15(木) 06:38:35.49ID:z1/gBAj5d
Cでエクセルの指定シートだけテキスト化できます?
491デフォルトの名無しさん
垢版 |
2018/03/15(木) 07:11:47.68
>>490
できますん

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

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

Excelを扱う部分は他の言語で開発してCからはそれを呼び出すのが普通かな
2018/03/15(木) 07:16:10.04ID:BwZLx9bwM
>>490
できるけど結構面倒だよ
ところでなんでC縛りなの?
なんかの苦行とか?
2018/03/15(木) 07:53:33.32ID:/GlmcHqY0
Cにあっていると思う
バイナリを呼んでキャストして
キャスト後も分岐ルートが色々あって
構造体はほとんど可変長
細かいものを組み上げるのは、たぶん Cが最適
494デフォルトの名無しさん (ササクッテロロ Spe9-N79+)
垢版 |
2018/03/15(木) 09:54:54.80ID:W95zVRhkp
FIFO(名前付きパイプ)で、大量データを分割して送受信したいです。



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

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

こんなんでok?
2018/03/15(木) 10:35:33.07ID:v5sVsR9k0
・最初に飛び込んでくる段階で datalen が 分割サイズ(512) より小さい時の考慮
 (ループ中と同じ記述で良いのでは?)

・書けなかった時(w=0 だったとき) の脱出をケアする
ぐらいでしょうか
2018/03/15(木) 10:45:14.98ID:lf1N2aO70
SIGPIPEで死ぬぽ。
2018/03/15(木) 10:49:38.59ID:c+umNtGLp
マジックナンバー使うな。
2018/03/15(木) 11:01:51.80ID:OczprsBK0
>>496
シグナルは悪い文明! 粉砕する!
499デフォルトの名無しさん
垢版 |
2018/03/15(木) 12:00:46.26
>>494
実用的にするなら非同期送受信でいろいろケアしたほうがいいけど
学習用とか数人で使うテストツールとかならいいんじゃね?
500デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)
垢版 |
2018/03/15(木) 12:19:33.36ID:KGbgKLI3a
>>494
エラー処理が抜けてる。
501デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)
垢版 |
2018/03/15(木) 12:21:39.25ID:KGbgKLI3a
>>496
そうそう。しかしその辺はOSや接続先によって違うかも。
502デフォルトの名無しさん (ワッチョイ 25d4-N79+)
垢版 |
2018/03/15(木) 16:10:59.70ID:CR6uT/FI0
>>494
これの受信側read()のコードを求むm(__)m
503デフォルトの名無しさん (ワッチョイ ddd2-0FUd)
垢版 |
2018/03/15(木) 16:16:36.38ID:umqIWKjV0
【守銭奴】  株・FX・トレーダー  <キリストW再臨″>  史上初テレパシー演説  【救世主】
https://rosie.5ch.net/test/read.cgi/liveplus/1521080734/l50
2018/03/15(木) 17:42:18.79ID:v5sVsR9k0
プロトコルなんか無しに来たものを読みきるだけの話なら

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

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

buff に use バイトだけ収まってる
2018/03/15(木) 17:56:13.79ID:lf1N2aO70
>buff = realloc(buff, allocsz)

リークするからやめなよ。
2018/03/15(木) 18:05:35.40ID:c+umNtGLp
ヒープなんか使わずに配列にして自己管理せい。
507デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)
垢版 |
2018/03/15(木) 18:12:47.89ID:yyzFA25Ma
ヒープに配列用のメモリを確保しているわけで・・・
2018/03/15(木) 18:18:50.14ID:xYxZI4zx0
>>505
ん?realloc() はリークするのか?
2018/03/15(木) 18:24:18.46ID:mTrAuuczd
>>508
割り当てに失敗したらリークするよ。
2018/03/15(木) 18:34:07.27ID:xYxZI4zx0
>>509
確認した
buff = realloc(buff, allocsz) という書き方は、たしかに realloc() に失敗すると buff が null で上書きされてしまうのでまずいね
2018/03/15(木) 18:43:54.61ID:T5+tR1ew0
戻りを別の変数で受けて確認してから代入
2018/03/15(木) 18:51:29.92ID:mTrAuuczd
前、ANSI準拠のreallocは、mallocとfreeの代わりになるって話をしたよな。
だから、最初のmallocは、NULLに対するreallocで置き換えできるんだよ。
2018/03/15(木) 18:52:49.68ID:mTrAuuczd
それから、この場合はintよりもsize_tを使った方がいい。
514デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)
垢版 |
2018/03/15(木) 20:39:48.98ID:yyzFA25Ma
>>512
最初だけ、な。
515デフォルトの名無しさん (アウアウカー Sa09-agSD)
垢版 |
2018/03/15(木) 23:54:08.20ID:NmT4VXxza
素朴な疑問なんですが、Cでメンバ関数を関数ポインタで定義して、そのメンバ関数から引数なしにメンバ変数を参照することってできませんか?
516デフォルトの名無しさん (ワッチョイ e19f-hKdO)
垢版 |
2018/03/16(金) 00:14:09.63ID:LkWvbaD00
>>515
メンバ関数ってなんですか?
2018/03/16(金) 01:02:32.36ID:w3tL3lE3M
>>516
C++でいうところのメンバ関数を構造体の関数ポインタのメンバで実装したいという意味だろ。読解しろ。
>>515
むり。C++で見かけ上引数がなくても内部で引数で渡してる。
2018/03/16(金) 01:37:32.81ID:GsmhGHn70
>>515
https://mevius.5ch.net/test/read.cgi/tech/1434079972/39
メンバ関数 h() を返す メンバ関数 g() を定義
メンバ関数へのポインタ f を定義
メンバ関数へのポインタ f にメンバ関数 g() の返り値を代入
ここでメンバ関数へのポインタ f にはメンバ関数 h() が格納されている
->* 演算子を使用してメンバ関数へのポインタ f が指すメンバ関数 h() を実行、 h() ではメンバ変数 C::a を出力する
2018/03/16(金) 02:08:17.17ID:w3tL3lE3M
>>518
スレタイ見ろ
520デフォルトの名無しさん (ワッチョイ 4fb3-LmTb)
垢版 |
2018/03/16(金) 04:14:48.79ID:3pmuZEr10
ポインタ構造体変数をポインタ変数で扱いたい時って
&p(ポインタ変数構造体変数)-> member(メンバ名)
みたいにわざわざ一回通常変数に直してからアドレスになおさないかんの?
2018/03/16(金) 05:57:40.20ID:PrpOQ5WH0
(&p)->memberなんてまずやらん
p.memberで同じことができる
522デフォルトの名無しさん (ワッチョイ 4fb3-LmTb)
垢版 |
2018/03/16(金) 06:50:12.92ID:3pmuZEr10
>>521
それやったらコンパイラにそんな構造体変数ないぞって言われた
2018/03/16(金) 08:05:49.18ID:w3tL3lE3M
>>522
質問するときは変数の宣言も使う文脈も省略せずに書け
2018/03/16(金) 08:16:43.56ID:6+mGA4RRM
>>522
&p->membar
(&p)->membar
2018/03/16(金) 10:27:00.36ID:DfshN/+jp
型教えないと何やっても無理だろ。
あと。下手に型変換させると、奇数バイトからワード処理とかさせてしまい、石によっては例外処理が走るか暴走するよな。
2018/03/16(金) 11:29:31.94ID:07ayGtU0a
cのコンパイラ作るのにアセンブラの知識は必要?
2018/03/16(金) 11:38:22.80ID:ObjPIdw20
今なら、LLVMがあるからコード生成はそちらに任せるという
選択肢があるね。
2018/03/16(金) 11:59:50.08ID:GsmhGHn70
>>526
コンパイルというくらいだから、最後に機械語に落とし込むのにアセンブラの知識は必要になるのではないか?
2018/03/16(金) 12:01:10.57ID:rupS10t30
C++ to C コンパイラとか 生成物が機械語で無いのもあるんじゃね?

(昔そういうの欲しかった)
530デフォルトの名無しさん (アウアウカー Sa09-agSD)
垢版 |
2018/03/16(金) 12:19:28.27ID:56A/2jiga
>>517
Cには無理なんですね
ありがとうございます
2018/03/16(金) 12:33:16.00ID:GsmhGHn70
>>530
>>515 でメンバ関数という言葉を使うのだから C++ を仮定している、というのならば C++ では >>518 で可能
C で可能かどうかを問題にしているのであれば、>>515 のメンバ関数という言葉が自己矛盾
2018/03/16(金) 12:43:32.01ID:rupS10t30
C言語の範囲では 構造体のメンバ中に関数のポインタをもつまで
C++言語のメンバ関数の機構(暗に this ポインタが渡ってくる) のを
C言語でやりたけりゃ自前で引数に渡すしかない&その関数はポインタを引数で受けなきゃいけない
533デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)
垢版 |
2018/03/16(金) 12:47:14.28ID:0ILmeguTa
>>529
C++の初期のコンパイラはそういうやつだった。つまり、Cへのコンバータだった。
2018/03/16(金) 13:59:12.95ID:DfshN/+jp
ああ、各ファイルの先頭に構造体の領域宣言とか関数にいちいち構造体のポインタが追加されるんだよな。
535デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)
垢版 |
2018/03/16(金) 14:00:33.86ID:ITdJ1YV3a
そういや昔々のX68000のBASICにもCへのコンバータがあったな。
2018/03/16(金) 14:26:36.05ID:DfshN/+jp
俺は、6502アセンブラコードをCに変えるコンバータ作ったけどな。
2018/03/16(金) 15:25:35.34ID:relEB8IL0
アセンブリをprintfにパースするのって大変なのかな。
538デフォルトの名無しさん (アウアウカー Sa09-agSD)
垢版 |
2018/03/16(金) 15:57:57.02ID:ScqC3AYEa
>>531
ではどういう言葉なら齟齬なく伝わりましたか?
539デフォルトの名無しさん (アウアウカー Sad3-Y9Jj)
垢版 |
2018/03/16(金) 16:00:12.76ID:HNnsk+Eya
>>538
「関数へのポインタ」では?
それが構造体のメンバとしてあるわけだし。
2018/03/16(金) 16:12:40.83ID:GsmhGHn70
>>538
コード断片で示すのもよい、誰かがコードを補完してくれるだろう
541デフォルトの名無しさん (エムゾネ FF2f-0FUd)
垢版 |
2018/03/16(金) 16:25:31.83ID:3ma6aQHvF
アスペとの会話ってつかれるよな
2018/03/16(金) 16:57:51.61ID:PrpOQ5WH0
Cスレで「メンバ関数」だぜ?
それをアスペとか、どんだけボキャ貧なんだよ
543デフォルトの名無しさん (エムゾネ FF2f-0FUd)
垢版 |
2018/03/16(金) 16:59:08.32ID:3ma6aQHvF
>> 542
おまえがアスペか
544デフォルトの名無しさん (アウアウカー Sa09-agSD)
垢版 |
2018/03/16(金) 20:29:17.66ID:56A/2jiga
>>539
> Cでメンバ関数を関数ポインタで定義して
一応そのつもりで書いたんだけどなあ

アスペ基準に合わせようとした俺が悪かったのか
2018/03/16(金) 21:09:53.74ID:GsmhGHn70
>>544
・関数ポインタとは別に「メンバ関数」というテクニカルタームが C++ にあった
・C/C++ の区別がついていない人の質問も、ここではよくみかける

という背景があって小さな誤解が発生したまでのこと、気にするでない、苦しゅうないぞ
2018/03/16(金) 21:13:51.61ID:nemrSVupM
>>526
どうやってコード生成部分を作るつもりなんだよ...
2018/03/16(金) 21:59:39.71ID:PPQOkRTja
マシン語があれば充分のんじょのいこの
548デフォルトの名無しさん
垢版 |
2018/03/16(金) 22:33:58.96
Cコンパイラがマシン語を出力しなきゃいけないって誰が決めたの?🙄
2018/03/16(金) 22:51:53.37ID:SxfrRBUw0
ラノベ出力してくれるコンパイラってステキ
2018/03/16(金) 22:53:03.55ID:d0lIgzUw0
誰も決めてないしマシン語じゃなくてアセンブラのソース出すコンパイラはいくらでもあるし
2018/03/16(金) 23:46:17.13ID:ObjPIdw20
VHDL出してもいいよね〜
552デフォルトの名無しさん
垢版 |
2018/03/17(土) 00:28:10.69
シェルスクリプトとまでは言わないからPerlスクリプトを出力して欲しい
2018/03/17(土) 03:07:05.34ID:ZFtG2t0c0
C++の非仮想関数 == Cの普通の関数
C++の仮想関数 == structの項(vtbl)の項
554デフォルトの名無しさん (アウアウエー Sa93-0FUd)
垢版 |
2018/03/17(土) 04:35:29.26ID:YYJgzE2Qa
>>553
違うね
2018/03/17(土) 07:17:45.03ID:qzfhHg+K0
>>553
上の方の関数。普通の関数pointerで保持出来るの?
2018/03/17(土) 07:35:06.72ID:zYYcg2u/0
C++のextern "C"関数 == Cの関数
Cに普通じゃない関数ってあるんだっけ
557デフォルトの名無しさん
垢版 |
2018/03/17(土) 07:51:22.83
>>555
そんなの当たり前じゃん
まさかできないと思った?
2018/03/17(土) 08:58:53.90ID:qzfhHg+K0
>>557
先生、非仮想なメンバー関数をcの構文では保持出来ません。
例をご教示願います
559デフォルトの名無しさん
垢版 |
2018/03/17(土) 09:00:39.42
>>558
「上の方の関数」すなわち「Cの普通の関数」を
「普通の関数pointerで保持出来るの?」
→Cの普通の関数は、普通の関数ポインタで保持できます

質問文に忠実に答えただけだが、何か問題でも?
2018/03/17(土) 13:08:05.54ID:8xjJdoU40
Cにゃメンバーって言語レベルの概念は無いから、そういうのはコーディング時に人様がメンバーのつもりになる書き方を明示的にやらないとならないんだよな。
2018/03/17(土) 13:47:23.11ID:8tKqJ0BR0
namespace のことを脇においとけば
非仮想関数って FILE 構造体と その関数だべ
2018/03/17(土) 13:51:13.91ID:V9AqDEvW0
LLVMはまずパースレイヤーが中間言語出力して中間言語を解釈するレイヤーが各種コードに吐き分けるということができる。
3段階のコード最適化ができるはずだったが、ちょっと迷走してる。
2018/03/17(土) 16:56:54.32ID:x+XAbvy+0
>>557
struct A
{
void func() {} //C++の非仮想関数
};
void (*ptr)(); //普通の関数pointer
ptr = &A::func; //まさかできると思った?
2018/03/17(土) 18:20:57.82ID:qqOQsVrX0
>>555
できませんね
https://ideone.com/5sW1lw
2018/03/17(土) 18:25:10.24ID:6umCop+Md
クラス内部の関数をstaticにすると、、、
2018/03/17(土) 18:26:02.67ID:6umCop+Md
普通の関数みたいに参照できる。
2018/03/17(土) 20:05:40.42ID:x+XAbvy+0
ここはCスレということをお忘れなく
2018/03/18(日) 08:12:11.88ID:5MZOkfmV0
https://ideone.com/gSWZOR
上のコードを見てください。
sprintfを続けて使うと文字が一つも出力されません
なぜですか?
569デフォルトの名無しさん (ワッチョイ 7761-7BQk)
垢版 |
2018/03/18(日) 08:14:12.57ID:5MZOkfmV0
ちょっと間違えました。
上の投稿は無視してください
2018/03/21(水) 22:30:20.44ID:Pk5+CKOYa
ニキ
配列で array[i] と i[array] て同じナンスカ?
後者の違和感すげーあるんスけどこういう風に書くことのメリットってかどっちが普通なんでしょうか
2018/03/21(水) 22:33:57.97ID:MsjTjvgF0
ポインターはINTに変換できる事もある。
んで、arrayはhogeっていうアドレス値を持ってる。
iはhageていう数字を持ってる。
生の数字でhoge+hage=i+arrayである。
まぁ、後者の書き方は普通しない。
2018/03/21(水) 22:34:54.75ID:DQv7yGEy0
アセンブラではオフセット[レジスタ]が普通
どっちが普通なんてくだらねえことだ
2018/03/21(水) 22:36:13.14ID:D2465Z9CM
offsetofマクロの実装を見て見なされ
オフセット値の算出にポインタ使っているでしょ
2018/03/22(木) 00:04:45.10ID:dLiR/Xt3M
a[b] は *(a+b) のシンタックスシュガー
2018/03/22(木) 00:19:52.50ID:2FEQ/Wa30
>>435
そうともいえない

一見目的のない議論が、将来の偉材を今育てているのかもしれない
2018/03/22(木) 00:23:55.20ID:2FEQ/Wa30
>>441
知らないのか?
setjmp/longjmp は、かつては例外(exception) の標準的な実装方法だったんだよ
OS に構造化例外機能がなかったときは sjlj が主流だったんだ
2018/03/22(木) 04:56:30.90ID:0SzB6c710
>>576
お前のご託はどうでもいいから
> 他の言語でライブラリレベルで実装してる例
をだしてみろよ
578デフォルトの名無しさん (アウウィフ FFc7-OLeD)
垢版 |
2018/03/22(木) 09:40:57.08ID:Q2/ylW7bF
BDS-Cとかあったな
2018/03/22(木) 10:22:59.95ID:lT3wziJ7p
>>570みたいなのは、キャストしないと使えねーだし。
580デフォルトの名無しさん (ワッチョイ 339f-zkh5)
垢版 |
2018/03/22(木) 13:44:55.99ID:suw09sJq0
>>579
え?使えるよ。単に *(i + array) になるだけだし。
2018/03/22(木) 13:56:04.06ID:2FEQ/Wa30
>>577
mingw/gcc-3 あたりまでは SEH ではなく sjlj だったと記憶している
ググってみるとちらほら出てくる
2018/03/22(木) 14:36:34.98ID:tPQcb8ora
SEHって何かと思ったらMS独自のやつか
2018/03/22(木) 19:43:32.85ID:qO2s+USWM
>>581
他の言語って書いてあるのに
話そらそうと必死だな w
2018/03/22(木) 20:58:32.18ID:2FEQ/Wa30
>>583
C と C++ は違う言語だろう?(棒読み)
2018/03/22(木) 21:06:38.53ID:qO2s+USWM
>>584
そんなものまで持ち出さないと自我が壊れちゃうのか? w
2018/03/24(土) 19:49:48.79ID:wXlHUBLAa
ニキやっぱFEぐらいのC過去問なら余裕の満点すか?
2018/03/24(土) 22:33:50.23ID:glVyz9hR0
>>573
>オフセット値の算出にポインタ使っているでしょ
そうか?
offsetofの結果は整定数式になる必要があるが、
ポインタ演算を使った式が整定数になる保証がないので別の手段を使っている場合がある。
2018/03/24(土) 22:37:51.52ID:M0MLze13M
>>587
具体的に
589デフォルトの名無しさん (ワッチョイ 339f-zkh5)
垢版 |
2018/03/25(日) 00:05:52.92ID:r2Id4T4+0
>>586
例えばどんなの?
2018/03/25(日) 07:25:18.09ID:S7OmeNGW0
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)
2018/03/25(日) 15:04:40.75ID:9t80sXyiM
>>587
>ポインタ演算を使った式が整定数になる保証がないので別の手段を
ポインタ演算の結果が浮動小数点とか変数になる例早よう出しなされ
2018/03/25(日) 15:25:31.63ID:wNhLkN4j0
メモリーの仕切り壁に落書きするポインタ
9と3/4番線ホームから出発する列車を指し示すポインタ
あれば便利かも知れないが(何がだ)
2018/03/25(日) 17:42:21.62ID:S7OmeNGW0
鉄道に例えるならポイント(線路の分岐)を制御するデコーダに与える信号がCのポインタだ
594デフォルトの名無しさん (アウウィフ FFc7-OLeD)
垢版 |
2018/03/25(日) 18:06:41.94ID:qleen6XJF
それじゃ型が考慮されてない
2018/03/25(日) 18:24:31.28ID:EKcNWVxa0
>>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.
2018/03/25(日) 18:28:29.51ID:S7OmeNGW0
汎整数型定数をポインタにキャストまたは暗黙に変換した式は定数式(たとえば空ポインタ定数は定数式)
その定数式を整数にキャストし直した式が定数式でなくなる根拠はない
597デフォルトの名無しさん
垢版 |
2018/03/25(日) 18:29:11.25
>>595
先生!
>>587で 「ポインタ演算を使った式が整定数になる保証がないので別の手段を使っている場合がある。」
って言い切ってるんだから、その「場合」とやらを僕も知りたいです!
2018/03/25(日) 18:53:41.81ID:EKcNWVxa0
>>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.
2018/03/25(日) 19:02:02.77ID:z318xA/90
(配列等で)連続が保障されてるときには要素数が求まるようにはなってるけど
連続性のないポインタの差分は鼻から悪魔だったような
規格? みてない
2018/03/25(日) 19:05:21.84ID:S7OmeNGW0
>>598
俺は根拠がないと言ったんだが
それをすっ飛ばして整定数式ではないと言われてもねえ
2018/03/26(月) 07:31:09.27ID:Sl5sXtlN0
で、587は逃げたのか
2018/03/26(月) 09:52:06.25ID:5fqWa8qC0
今日からC言語を始めたのでよろしくです
2018/03/26(月) 10:39:34.46ID:9cQp/9Bmp
ご愁傷様
2018/03/26(月) 11:35:27.48ID:0ihjlnG/0
a[b*c];
のようにしてもassemblyコードがアドレッシングモードじゃなくて
掛け算してしまうんですけどどうしたらアドレッシングモードで計算するように
なりますか?
2018/03/26(月) 11:54:06.58ID:dvRuSlEv0
>>604
b と c とを使って何をしたいのでしょうか?
2018/03/26(月) 12:03:06.83ID:EmWkiz+YM
>>604
何がしたいのかよくわからないけど、エスパーすると
Cソースで変数のセクションを指定して、リンカでそのセクションの配置を
期待するアドレスに配置すればいいんじゃないかな。
2018/03/26(月) 12:09:23.11ID:0ihjlnG/0
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は掛け算をアドレッシングモードでしているので
処理速度の差が生まれてしまいます。
2018/03/26(月) 12:12:26.75ID:0ihjlnG/0
自己解決しました。
2018/03/26(月) 12:12:50.68ID:EmWkiz+YM
struct aにキャストしてから計算すればいいという話ではなくて?
2018/03/26(月) 12:18:06.83ID:0ihjlnG/0
nかsは定数じゃないと駄目みたいでした。
2018/03/26(月) 12:31:41.16ID:k+G5ovIGM
sがなんだかわからないけど

void *h(int n, int s){
return ((struct a *)v+n*s);
}

じゃだめなん?
s=1ならi()と同じだと思うけど。
2018/03/26(月) 12:37:07.82ID:0ihjlnG/0
struct a *は8バイトなので8を入れればよいのです。
2018/03/26(月) 12:40:49.01ID:v3bCx+j3M
ブロックサイズみたいなイメージかな。
だったらsizeof(struct a)にしたほうがよいかと。
614デフォルトの名無しさん (アウアウカー Sac3-t4/V)
垢版 |
2018/03/26(月) 13:35:11.46ID:ioIbXl47a
>>612
それは違う環境に持っていってコンパイルしたら破綻するかも知れない。
やはりsizeof使うかそのまんまポインタ計算させた方が良いのでは?
2018/03/26(月) 14:37:40.54ID:g7RAb+fM0
最適化されたらおんなじじゃね?
2018/03/26(月) 14:44:36.91ID:42MV7MT1d
struct a*のサイズは32-bit 環境だと4だよな。64ビットだと8バイト。
2018/03/26(月) 14:47:59.15ID:42MV7MT1d
ポインタを操作するなら、size_tとかptrdiff_t使った方がいいな。
2018/03/26(月) 15:00:59.23ID:+d/fyZgca
>>616
ここでは構造体の実体の配列だからsizeof(struct a)で大丈夫。
int1つのサイズは典型的には4byteだけど、IP64だのあまり見ない
データモデルでは8byteのこともあるから、構造体のサイズを使うときは
sizeofがよい(MAY)、ではなくてsizeofにすべき(ほぼMUSTのSHOULD)。
2018/03/26(月) 17:51:14.16ID:wby0cWXW0
>>598
おまえさんが言いたいのは、これのことか?
https://ideone.com/NITIUP
2018/03/26(月) 17:52:53.38ID:5fqWa8qC0
本買うならどれがいい?
本より優れたサイトがあるならそれでもいいぞ
2018/03/26(月) 19:16:37.53ID:b1dSvJWqM
>>620
きつねさんとおぼえる clang
きつねさんとおぼえる clang おかわり
2018/03/27(火) 07:05:39.20ID:VOv2iUaR0
struct a{
bool a:1;
uint32_t b:31;
uint16_t c;
};

struct a{
uint32_t b;
uint16_t c;
bool a;
};

上の構造体が12バイツでしたが8バイツの理由がわかりません、上を8バイツにしたいです。
2018/03/27(火) 07:14:25.16ID:6oSpwfuc0
C言語のboolって何バイト?
C++だとINTと等価なことがそれなりにあるんだけど。
624デフォルトの名無しさん
垢版 |
2018/03/27(火) 07:32:57.91
>>622
よく分からないんだけど、2つ構造体を書いてるのは何を意図してるの?
2018/03/27(火) 07:57:42.10ID:tnecWY6M0
>>622
俺の環境ではどっちのsizeofの値も8バイツを返したから環境依存だろう。
#pragma か __attribute__ で詰め込めるかも知れんけど、
ビットフィールドを狙って使える指定方法があるかどうか。
詰めたら詰めたで6バイツや7バイツになっちゃう危険もあるし。

>>623
<stdbool.h> にどう書いてあるかだろうな。
これも試したら sizeof(bool) に1を返した。
<stdbool.h> の実体を思しきファイルを覗いたら

#define _Bool signed char
#define bool _Bool

の連鎖になってた。typedefでないのが少々意外。
#ifdef で定義済か未定義かを判定できるようにするためだろうか。
2018/03/27(火) 08:47:18.29ID:/RdC4ccn0
>622
uint32_t b; がバイト境界にひっかかったせいじゃね?
2018/03/27(火) 08:57:59.42ID:9ekvYNlc0
コレナンデ境界
2018/03/27(火) 09:51:51.20ID:GW1/xmrB0
アライメント
2018/03/27(火) 10:02:58.62ID:i2YWXGc+0
alignment
Емельяненко

なんで日本人は「ん」を飛ばすかねえ
2018/03/27(火) 10:04:40.74ID:/RdC4ccn0
間抜けな回答してるな>オレ

        ||
        ||
      ∧||∧   
     ( / ⌒ヽ
      | |   |
      ∪ / ノ
       | ||
       ∪∪

      -━━-
2018/03/27(火) 10:37:30.96ID:UpIjn8oG0
>629

>なんで日本人は「ん」を飛ばすかねえ

「全て」の日本人が「ン」を飛ばすわけではありません。

「或る」日本人が「ン」を飛ばすだけです。

ところで、ロシア語の

Емельяненко(エメリャネンコ)

とはどういう意味ですか。手元の「ロ日辞典」をひいても
でていないので
 
2018/03/27(火) 11:17:02.05ID:VOv2iUaR0
struct a{
bool x:1;
uint32_t y:31;
};
しらべたらこれの大きさが8バイツでした
sizeof(struct a)とやったらそうなったのでアラインメントのもんだいではありません。
どうしても4バイツにしたいです
2018/03/27(火) 11:20:50.14ID:949beg24p
型を揃えるか、ブラグマ指定する、
2018/03/27(火) 11:22:01.11ID:6oSpwfuc0
もしかして変数を分解しようとしてる?
Unionってしってるかー?
2018/03/27(火) 11:24:10.52ID:949beg24p
構造体宣言に
__attribute__((packed))
を挟む
2018/03/27(火) 11:26:05.22ID:6oSpwfuc0
C++なら、無名うにおんとかつかえて楽なんだけど、Cは一々名前がつくので面倒。
2018/03/27(火) 11:26:08.96ID:949beg24p
両方uint32_tにすりゃいいだろ。
638デフォルトの名無しさん (ワッチョイ 5b61-3KaU)
垢版 |
2018/03/27(火) 11:26:51.67ID:VOv2iUaR0
struct a{
uint32_t a:1;
uint32_t y:31;
};
こうやったらできました
ビットフィールドを勘違いしていたのが原因みたいです。
2018/03/27(火) 11:27:20.90ID:6oSpwfuc0
あら、そっちか。
2018/03/27(火) 11:36:24.22ID:VOv2iUaR0
struct a{
union{
bool a:1;
struct{
uint32_t x:1;
uint32_t y:31;
};
};
};
つまりこうしたらよいのですね。
勉強になりました。ありがとうございます。
641デフォルトの名無しさん
垢版 |
2018/03/27(火) 12:00:48.00
>>640
これ、bool aとuint32_t xが同じ値であることがどの環境下でも保証されてるの?
教えてエロい人
642デフォルトの名無しさん (アウアウカー Sac3-t4/V)
垢版 |
2018/03/27(火) 12:36:27.71ID:NeN1yqDWa
>>622
ビットフィールドって同じ型が並んでないとまとめてくれないのでは?

なので、

bool a:1;
uint32_t b:31;

ではなくて

uint32_t a:1;
uint32_t b:31;

にしたらできないか?
643デフォルトの名無しさん (アウアウカー Sac3-t4/V)
垢版 |
2018/03/27(火) 12:39:07.90ID:NeN1yqDWa
既に答えが出て解決していた

        ||
        ||
      ∧||∧   
     ( / ⌒ヽ
      | |   |
      ∪ / ノ
       | ||
       ∪∪

      -━━-
2018/03/27(火) 12:44:29.48ID:i2YWXGc+0
>>631
姓だよ、とある有名人の
国内ではエメリヤエンコということになっている
2018/03/27(火) 13:11:29.05ID:VOv2iUaR0
https://ideone.com/GfSSSt
上のコードみてください。
なぜか上の構造体を使って初期化すると値がただしくなりません。
なぜですか?
2018/03/27(火) 13:53:29.94ID:KACb5w790
>>645
どこが正しくないのか説明してもらわないとたぶん誰も分からない
2018/03/27(火) 15:15:12.36ID:VOv2iUaR0
https://ideone.com/WeAoO6
なにものかにコードが書き換えられたみたいです
正しくは上のコードを見てください。
2018/03/27(火) 15:32:49.24ID:eCLpRZm+d
unionにビットフィールドは使えないっしょ。
2018/03/27(火) 15:42:37.68ID:jWaORT7c0
>>647
struct a a={.y=1, .a=true};
ここを
struct a a={.a=true, .y=1,};
こう書き換えると動作が変わる。
何故変わるか考えてみよう。
2018/03/27(火) 15:45:46.56ID:jMKP3TFv0
struct になってない単変数でのビットフィールドって
結局支持された型の空間をめいっぱい使って書いてるんでないの
2018/03/27(火) 16:45:45.41ID:VOv2iUaR0
>>648
直しました
>>649
考えてもわかりませんでした
2018/03/27(火) 17:22:21.42ID:tnecWY6M0
>>637-638 >>642
ビットフィールドの詰め込み方だけど、
「同じ型の並びならまとめる、異なる型同士はまとめない」、
「型に関係なくまとめる」、(他にもパターンあるかも…)、
どれになるかは環境依存だからアテにしてると移植性の問題にハマるよ。

ビットフィールドは内部的な配置を気にしない場合だけ使うのが鉄則。
>>622 の流れからすると、ビットフィールドを含む構造体は
sizeof が返すバイト数も気にしちゃいけないね。
653デフォルトの名無しさん
垢版 |
2018/03/27(火) 17:46:09.15
>>647
unionの中にもう一つstruct
uint32_t b0:1; 〜 uint32_t b31:1;
を入れてみて、b0〜b31をオール0、その次はオール1にして
aやyに代入するたびにb0〜b31がどう変化するかを確かめればいいと思うよ。
2018/03/27(火) 18:48:56.23ID:lphBpvplM
gotoは要らない子?
655デフォルトの名無しさん (アウアウカー Sac3-t4/V)
垢版 |
2018/03/27(火) 19:18:17.87ID:NeN1yqDWa
>>652
コンパイラによっては型に関係なく並べるのもあるのか。知らなかった。
2018/03/28(水) 09:16:12.84ID:UsIzsSLh0
unionで共用関係作っても、詰め込み順が統一されてる保証は無いからなぁ。
んなトリッキーな処理は、移植ん時死ねるぞ。
2018/03/28(水) 09:21:05.87ID:hD+ZgK6z0
ビットフィールドの順番がコンパイラによって違うのには参った
2018/03/28(水) 09:27:44.69ID:txGSPNwpa
>>657
エンディアンの違いで逆順になるのは昔からあるな。
コンパイルオプションでなんとかなるといいんだけどな。
2018/03/28(水) 15:08:36.90ID:NO5LUaew0
いやあ、そんなドジ踏んだことないし
踏んだやつも見かけないなあ
unionなんか使うときはそういう危険性には
真っ向から対峙しているのでうっかり考え落とす
なんてことは起こりえない

ポインタをキャストするときのほうが危ないぞ
unionよりも遙かに使用頻度が高くて油断しがち
2018/03/28(水) 16:15:36.83ID:zOM5QtYn0
>>659
たしかに
2018/03/28(水) 20:45:19.82ID:inZxrYqzp
普段からアライメント気にしない石使ってると死ぬるw
662デフォルトの名無しさん (アウアウエー Sa23-HAdz)
垢版 |
2018/03/29(木) 00:01:16.65ID:ySkkjEPJa
野積み
2018/03/29(木) 00:09:03.12ID:X8gSQriyM
SIG11
664デフォルトの名無しさん (ワッチョイ 219f-kUw7)
垢版 |
2018/03/29(木) 00:30:03.68ID:HYrXjV+u0
>>654
出来の悪い子ほど可愛いものさ
2018/03/29(木) 02:58:45.40ID:Ng8O1HeK0
GOTOはその場所より基本上流に流しちゃいけない。
それだけ守ってればいいと思う。
666デフォルトの名無しさん
垢版 |
2018/03/29(木) 03:06:08.42
if文とかfor文の中に飛ばすのもダメだろ

関数末尾以外に飛ばすのは基本アカンと思う
667デフォルトの名無しさん (ワッチョイ d180-3UCh)
垢版 |
2018/03/29(木) 07:24:44.79ID:+dX3Weor0
gotoとswitchの組み合わせはよくやる。
668デフォルトの名無しさん (ワッチョイ 219f-kUw7)
垢版 |
2018/03/29(木) 22:57:50.45ID:HYrXjV+u0
>>667
switch と goto と聞いて、はっもしやこんなこともできるのでは、と思ってやってみたら、できてしまったよ。どうしよう。

#include <stdio.h>

int main()
{
 int i;

 for (i = 0; i < 10; i++) {
  if (i == 5)
   goto hoge;
  switch (i) {
   case 1:
    puts("いち");
    break;
hoge:
   puts("ご");
   break;
  }
 }

 return 0;
}
2018/03/30(金) 13:01:35.10ID:fkO+Wt7Ma
情報処理用にC頑張り始めたンスけど、初心者本は2冊くらい終えて、簡単なプログラムならあるていど作れるようにもなったんスけど、FEの過去問には全く歯がたたないっすw
2018/03/30(金) 13:03:50.38ID:fkO+Wt7Ma
初見の歯抜けプログラムみて選択肢与えられてもなんだかさっぱり読み切れん…
中級本の内容の方がまだ簡単なんスけどニキこれなんなんすか
2018/03/30(金) 13:04:58.91ID:n1WKWzHR0
Duff's deviceっていうスイッチの中にループがあるのもある
672デフォルトの名無しさん (ワッチョイ 5923-HAdz)
垢版 |
2018/03/30(金) 16:19:34.10ID:zQBQo8b30
>>668
おめ
はげめ
673デフォルトの名無しさん (ワッチョイ 4123-xai/)
垢版 |
2018/03/30(金) 16:22:11.93ID:bDuRGN0f0
>>668
goto default;
674デフォルトの名無しさん (ワッチョイ d35d-2oNG)
垢版 |
2018/03/30(金) 16:55:37.88ID:InC0asnz0
あれにはそういう名前があったのか。ありがとう。
2018/03/30(金) 17:55:35.60ID:6y8tfNRe0
同じく
名前は知らんかった
2018/03/30(金) 19:36:36.57ID:FHOFausT0
値の入れ替え処理ってどう描けばいいんや
2018/03/30(金) 19:38:47.12ID:9udtptfNd
>>676
int tmp = a;
a = b;
b = tmp;
もしくは
std::swap(a, b);
2018/03/30(金) 19:42:57.58ID:TqB3XhjJM
a = a ^ b;
b = a ^ b;
a = a ^ b;
2018/03/30(金) 19:46:21.82ID:FHOFausT0
>>677
mainから分離させると

void Swap()
{
std::swap(a,b);
}

こうなるってこと??
2018/03/30(金) 19:47:24.27ID:9udtptfNd
a ^= b;
b ^= a;
a ^= b;
2018/03/30(金) 19:49:14.07ID:sxHgkaP90
>>678
b の実体が a だと a = 0 になってしまう、とは頻繁に指摘されるところ
2018/03/30(金) 19:49:30.92ID:9udtptfNd
void myswap(int *pa, int *pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
683デフォルトの名無しさん (アウアウカー Sadd-rlcN)
垢版 |
2018/03/30(金) 20:19:58.73ID:x2Z4e+RCa
>>677
それC++だよね。
2018/03/30(金) 20:29:07.56ID:zSEpPQDd0
ワザとだと思います
2018/03/30(金) 20:32:46.73ID:3ziE5qsO0
値の入れ替えってどういう局面で使うの?
2018/03/30(金) 20:35:46.51ID:9udtptfNd
>>685
ソートとか、順番を変えるときとか、データの入れ替えなど。
2018/03/30(金) 20:37:07.43ID:N/erQ4tDM
ソート
他では見かけない
2018/03/30(金) 20:42:10.63ID:9udtptfNd
音楽のシャッフルなんかもswap使っている。
2018/03/30(金) 20:49:54.40ID:3ziE5qsO0
ああ、int aとかじゃなくて配列要素に使うのね
納得ありがとう��
2018/03/30(金) 20:53:18.14ID:9udtptfNd
配列要素やポインタにも使える。この入れ替えアルゴリズムを抽象化するとC++のstd::swapになる。
2018/03/30(金) 23:15:31.22ID:sWH8jgUv0
goto LABEL0;
{
  int i = 1; /* 初期化 */
  int j;
  j = 1; /* 代入 */
LABEL0:
  printf("%d %d\n", i, j);
}
2018/03/31(土) 01:54:40.82ID:OnKsCXxga
Mapみたいな連想配列使いたいんだが何使えばええんや
693デフォルトの名無しさん (アウアウエー Sa23-HAdz)
垢版 |
2018/03/31(土) 03:57:34.23ID:2Z4gCLvWa
switchのラベルって違うswitch(){}の中なら重複してても使えるやん?
それで goto HOGE; したらどっちに飛ぶ?
694デフォルトの名無しさん (アウアウエー Sa23-HAdz)
垢版 |
2018/03/31(土) 03:58:50.47ID:2Z4gCLvWa
>>681
ならねーよΩ
2018/03/31(土) 07:10:32.62ID:1xZcLHDp0
>>694
>>678 のアルゴリズムには重大な欠陥がある、という点は頻繁に指摘されることですよ、知らないの?
https://ideone.com/uYFQRK
696デフォルトの名無しさん
垢版 |
2018/03/31(土) 07:17:07.25
if (a != b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
2018/03/31(土) 07:19:42.34ID:1xZcLHDp0
>>696
それは対策になっていない
698デフォルトの名無しさん
垢版 |
2018/03/31(土) 08:13:17.33
>>697
なんで?
2018/03/31(土) 08:15:52.05ID:NJrC8qbaM
>>695
ポインタ使って無いアルゴリズムをポインタ付きに移植して
欠陥とはこれ如何に。
只の移植失敗だろ。池沼か
2018/03/31(土) 08:22:07.33ID:1xZcLHDp0
>>699
xor スワップがどこまで有効か、どうなると不適になるかをはっきりさせておかないと、嵌る、>>678 にはその指摘がない
C なんだからポインタの話は不可欠だ、それを指摘したのが >>681
2018/03/31(土) 08:47:25.82ID:EbDGZ0yc0
wikiより

void xorSwap(int *x, int *y)
{
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
2018/03/31(土) 08:59:46.96ID:15qJIIAA0
bの実体がaなんてことが参照のないCで起こりうるのか?
#define b aなんてアホなことぬかすなよ
2018/03/31(土) 09:06:42.53ID:8va89mAu0
ヒューマンエラーは果てしないのじゃー。
2018/03/31(土) 09:12:11.67ID:OaeapR1O0
>>700
ごたくはいいから
a ^= b;
b ^= a;
a ^= b;
のコードでaとbの実体が同じになる例をあげろよ
もちろんC言語の範疇でな
2018/03/31(土) 09:13:01.96ID:1xZcLHDp0
>>702
その #define マクロでうっかり、xor スワップを書いてしまう、とかは、可能性としてあり得りますね
あと、C++ テンプレートで書いてしまったり、とかね
https://ideone.com/NEeCNr
2018/03/31(土) 09:13:25.89ID:1xZcLHDp0
>>704
>>705
2018/03/31(土) 09:57:17.92ID:V7rzy3dc0
マクロで xor の入れ替えを書く
配列の操作で同じ要素の入れ替えも、都合上そのまま交換する方向で記述する
(配列を逆順に入れ替える時、要素数が奇数だと発生
2018/03/31(土) 10:03:16.74ID:OaeapR1O0
>>705
> あと、C++ テンプレートで書いてしまったり、とかね
スレタイ100回音読してこい
2018/03/31(土) 10:08:47.90ID:1xZcLHDp0
>>708
今どんな気持ち?どんな気持ち?AA略
2018/03/31(土) 10:17:56.15ID:EbDGZ0yc0
マウント合戦うぜぇ。
2018/03/31(土) 10:24:01.94ID:1xZcLHDp0
>>710
まあ、こういうのでは考えが足りずに負けることもあるし
>>709 は権利ですよ
マウント合戦、勝てば飯がうまいですなあ
2018/03/31(土) 10:29:40.14ID:OaeapR1O0
名前欄ぐらい見とけよ w
2018/03/31(土) 10:32:21.69ID:15qJIIAA0
>>709
そのまま返す
2018/03/31(土) 10:34:30.68ID:NJrC8qbaM
678のメール欄もなw
2018/03/31(土) 10:40:28.44ID:OaeapR1O0
>>714
いや、さすがあれはメアド欄なんて見なくてもネタってわかるだろ w
2018/03/31(土) 10:43:37.64ID:15qJIIAA0
>>705
templateにする必要ないのに無理しちゃって
void aho(int& a, int& b)
{
if(&a == &b) throw system_error{error_code{1xZcLHDp0_category(), 709}, R"(
 ハァ・・・   ハァ・・・   ハァ・・・
             : ∧     ∧ :
            : / ヽ    / ヽ :
        : /   >__/∴ ヽ :
        : /   ;;# ,∴∵; ヽ ∴\ :   
      : / -==、   '  、==-∴∵丶 :     き、きょうはこれくらいで勘弁してやるニダ…
    : / ""   _┃_ ""  * ∵∴\ :
     : \ #;∴  l/ニニ| ∵ / ∴∵/ :
       : ヽ∵//;;.;`ー‐' # ∴#∵ノ :
         >;;;: _   _ ;, _ ;_<
       : / # ;∴    ∴ #  \ :
)"};
}
2018/03/31(土) 10:44:13.72ID:1xZcLHDp0
>>678 メール欄
あれ、まあ?!‥‥‥自分<今どんな気持ち?どんな気持ち?

まあ鎬を削るのであれば、こっちが楽しいのではありまする
https://mevius.5ch.net/test/read.cgi/tech/1514772904/
718デフォルトの名無しさん (アウウィフ FF45-HAdz)
垢版 |
2018/03/31(土) 11:07:01.32ID:c97ae/y4F
>>695
それ xor を使ってることによる欠陥じゃなくて
同じポインタを渡してることが欠陥だろ
719デフォルトの名無しさん (ワッチョイ 219f-kUw7)
垢版 |
2018/03/31(土) 16:34:53.19ID:4s7VNOk80
>>695
18行目がこうなっているわけだが
myswap(&a, &a);
これでは参考にならんよな。
a, b を同じ値にしてから &a, &b で呼び出さないと。
まあでも myswap() 側で調べて同じなら何もしないように作っとけばいいだけではあるが。
2018/03/31(土) 17:23:06.22ID:EbDGZ0yc0
つまりswap関数に必ず同じ変数orポインタアドレスを渡さないよう確認する人と
渡しても大丈夫な仕様にする人とが同じチームに居るとこうなると。
721デフォルトの名無しさん (アウウィフ FF45-HAdz)
垢版 |
2018/03/31(土) 17:38:31.63ID:c97ae/y4F
速度の問題あるから関数側でいちいち判定コード書くのは避けたいところ
2018/03/31(土) 17:53:31.86ID:OaeapR1O0
そのネタいつまで続けるの?
723デフォルトの名無しさん (ワッチョイ dbe7-0vFc)
垢版 |
2018/03/31(土) 18:24:11.53ID:wolthb3Z0
ちょっと聞きたいんだけど
char c = '5';
c -= '0';
int a = c*16;
こうゆうやり方ありなの?
2018/03/31(土) 18:27:06.54ID:gYRRCVdX0
ある
725デフォルトの名無しさん (アウウィフ FF45-HAdz)
垢版 |
2018/03/31(土) 18:27:10.52ID:c97ae/y4F
ありじゃね
unsigned char じゃいかんとか
unsigned char の方がいいとか
どうせ int になるんだしとか
ebcdic は?とか
2018/03/31(土) 18:49:12.37ID:1xZcLHDp0
>>718
xor スワップは、xor: ^ が
a^(a^b) == b
b^(a^b) == a
で、つまるところ、a, b, a^b の三種類の値のうち一種類が欠けても、残りの二つから欠けた一つを再生できる(RAID5と同じ)ところに着目しているわけで、
xor や同様に exclusive-nor だからできること

ちゃんと二種類の値をずっとキープできておればスワップは成功するが、
そうでない場合は失敗する

上記のことを考えると@ xor/xnor であることと、A現れるオブジェクトが別であることを保証することの両方が必要だと思うよ

>>719
まあ値が等しいときは@オブジェクトが同じ可能性があるAそもそもスワップする必要がない
から値が同じかどうかのチェックをかませば OK ではあるね、それは同意するよ
2018/03/31(土) 20:38:17.63ID:xg3JkNB30
これなら安全じゃろ。

void xorSwap(int * restrict x, int * restrict y)
{  *x ^= *y;
 *y ^= *x;
 *x ^= *y;
}

無責任極まりないやり口だけどな。
2018/03/31(土) 20:42:41.15ID:xg3JkNB30
改行乱れちゃった、てへ。
Cはフリーフォーマットだから…。
2018/03/31(土) 20:45:59.73ID:p4zumO6q0
小さな処理なんだからマクロ化かインライン展開させようよ。
730デフォルトの名無しさん (ワッチョイ d180-3UCh)
垢版 |
2018/03/31(土) 20:48:52.36ID:D1vbg0pQ0
自己解決しました。
std::swapでいけました。
731デフォルトの名無しさん (アウアウカー Sadd-rlcN)
垢版 |
2018/03/31(土) 22:01:45.45ID:qrmwmyS1a
C++だったのか
732デフォルトの名無しさん
垢版 |
2018/03/31(土) 23:33:07.89
CもC++も似たようなもんじゃろ
平気平気
2018/04/01(日) 07:51:13.57ID:lL1ejtJI0
>>727
安全じゃない
restrictはコンパイラに対してx != yを前提とする最適化を許可するだけで
constのように違反を摘発する機能はない
int *a, *b;
scanf("%p%p", &a, &b); //実行してみなきゃわからんものを
xorSwap(a, b); //翻訳時に摘発できるわけねえだろ
2018/04/01(日) 08:04:57.85ID:WPbk7cUz0
「そういう仕様だから呼ぶ側は正しく使えよ」ってことだろ
2018/04/01(日) 09:55:10.10ID:9jhZxGTr0
「トラブルの原因になるものは絶対に使ってはいけない団 登場!!
scanfソード!!GOTO砲発射!!!」
2018/04/01(日) 09:59:07.54ID:gIH0xNQX0
ネタにまじれ...
2018/04/01(日) 10:19:28.40ID:vuzriXcqd
>>733
これほんとくそ
せめてFortran のfcheckみたいな実行時診断機能をコンパイラにつければ良いのに
2018/04/01(日) 10:26:27.50ID:lL1ejtJI0
hell fuck no!!
絶対いらん
739デフォルトの名無しさん (エムゾネ FFb3-HAdz)
垢版 |
2018/04/01(日) 10:28:45.90ID:GlQ4MmqmF
>>735
C使うなって話になるわな
740デフォルトの名無しさん
垢版 |
2018/04/01(日) 10:52:33.52
>>737
つ assert
741デフォルトの名無しさん (ワッチョイ 5923-xai/)
垢版 |
2018/04/01(日) 14:22:10.86ID:QnlJ7EAH0
指導者は、ある程度育った選手に対して解決策を提示しない。
選手が自ら考えるように導く。
考える力に重点を置く。
選手が考えた解決策に、(少しでも)可能性がある場合、次のように対応する。

1.状況を整理する

2.挑戦してもらう

指導者の解決策を、押しつける・誘導するのは愚の骨頂。
選手の思考力の成長を阻害する。
言葉の上だけ、コーチング技法を使用する指導者は不要。
意識・無意識にかかわらず、非言語で指導者自身の方向に誘導するようであれば、指導者は迷惑な存在。
選手は指導者の気持ちを敏感に読み取り、指導者の思う解決策に乗っていく。
指導者が無自覚に自分の気持ち・感情を表出しているのであれば、指導者は害毒でしかない。
(但し、指導者としての方向を持っていなければダメ。)
742デフォルトの名無しさん (ワッチョイ 5923-xai/)
垢版 |
2018/04/01(日) 14:30:49.47ID:QnlJ7EAH0
*“オレは知っている。選手は判っていない。”と思い込んでいる。
→「私が中心」(選手は不在)
→選手の変化が見えない。

*“あれもこれも伝えたい”と思っている。
→指導者の自己の存在証明をしたいだけ。
→選手の依存過多を喜んでいる。
→指導者の中身の無さを補償している。
→自分の目標と選手の目標がズレていることに気がつかない。
→成長のゴール設定が不明確。あるいは勝つことだけに目標を設定している。
(勝負までに何をやりきったらよいのか/何を発揮したら勝利か/勝った後どうするか、指導者ならば明確にもっておきたい。)
→優先順序が整理できていない。
→現状の把握すらできなくなっている。

*“言わないと相手のためにならない。”と信じている。
→根本的に選手を信頼していない。
→“指導”という名の自己満足。

*“今、言わないといけない。”という焦り
→指導計画の無さが露呈しただけ。
→日頃の怠慢のツケ。
(直ちに言わないければいけないことはあるが、そう頻発しない。)

*“自分の経験なら、具体的に伝えることができる”という自分の過去へのこだわり
→指導者自身の学習がストップしている。
→偏狭さの表出
→選手より、常に自分が上。
→自分のコピー以外のモデルがない。
→指導者自身の目標が低い。(悪い意味で、すぐに満足する。)
→自分の小ささに築かない哀れさ

解決策を提示する悪癖からの脱却は、選手を信頼することがキー。選手を信頼できるかどうかは、選手の問題ではなく、指導者自身の課題。
743デフォルトの名無しさん (ワッチョイ 5923-xai/)
垢版 |
2018/04/01(日) 14:31:46.69ID:QnlJ7EAH0
選手がある程度育っているにもかかわらず、解決策ばかりを提示してしまうとしたら……

指導者のサービス精神が、少々裏目に出ただけ。
やり方を、知らなかっただけ。
視線が、近い所に留まり過ぎただけ。

選手の考えと主体性に賭ければ良い。
「質問するだけ」「聞くだけ」で十分。他愛ない会話で済むかもしれない。

指導者としてのやり方を、ちょっと広げるだけ。

選手と一緒に成長すればよい。
2018/04/01(日) 15:09:50.39ID:EJgAiXSoa
長い3行で
2018/04/01(日) 20:22:49.32ID:FPe02iov0
c疲れる高級言語が良いよぉ
2018/04/01(日) 22:01:04.55ID:Xs8rW8os0
破門
2018/04/01(日) 22:02:31.16ID:kjSWJmola
C++よりは65536倍マシ
2018/04/02(月) 02:42:44.32ID:335Cb1sP0
C++の方が全然マシ。
C++で要求されるのは記憶力だが、Cはマジで実力が試される。
749デフォルトの名無しさん (アウアウエー Sa23-HAdz)
垢版 |
2018/04/02(月) 04:26:42.33ID:3ewhMOuha
>>747
ほんそれ

>>748
C++はごちゃごちゃしすぎ
Objective-Cの方が良い
2018/04/02(月) 09:23:05.49ID:tz45bHyl0
そんな君達に、C#
751デフォルトの名無しさん (アウアウカー Sadd-rlcN)
垢版 |
2018/04/02(月) 11:32:18.94ID:IY8Jb2oda
C#は何かとっても嫌な予感がするのでパス
2018/04/02(月) 11:37:34.04ID:GUMdRf0S0
組込みならverilog
753デフォルトの名無しさん (ワッチョイ 89a2-HAdz)
垢版 |
2018/04/02(月) 14:47:00.17ID:r6uHUG7/0
C#はないわ
2018/04/02(月) 15:09:03.97ID:+y0jgVYha
C, C# はアリ
C++みたいな汚い言語はナシ
2018/04/02(月) 15:11:32.65ID:hvd81u+Da
Cライクな言語なら何でもこいだわ
(知らないのは新たに勉強せざるを得ないが)

1人で書くのは大抵C++
2018/04/02(月) 16:32:47.98ID:gGbBmtO80
C、C#、Goが好き
2018/04/02(月) 17:06:51.28ID:E1iWIfmB0
C++17かなり良くなってきたね
C++98での苦行が嘘のよう
2018/04/02(月) 17:07:57.92ID:NgLCsptVp
c++はテンプレート辺りから怪しくなって来た。
2018/04/02(月) 17:35:10.19ID:Hj+Kq4pv0
オールアセンブラで組んでた人が楽になるための言語。
2018/04/02(月) 17:46:48.43ID:E1iWIfmB0
STLを初めて見た頃は違和感ありありだったけど
それはテンプレートを使うからでも、見た目が悪いからでもなく、中途半端だったから
C++11から以後、そのへんの補完工事が始まったのがありがたい
2018/04/02(月) 17:52:55.07ID:NgLCsptVp
結局テンプレートって、型をオブジェクト型に統一してしまえばいいだけで、あんまり意味無いよな。
2018/04/02(月) 18:00:26.75ID:E1iWIfmB0
Smalltalk風の継承モデルねえ
正直、俺も昔は盲信したことがあって今は恥じている
テンプレートならコンパイラがやってくれることを
自前でdynamic_castなんかやだよ
nested_exceptionとかは仕方ないけどね
763デフォルトの名無しさん (アウアウカー Sadd-rlcN)
垢版 |
2018/04/02(月) 19:47:22.47ID:yiGPtloFa
>>761
Javaなんかは内部でそうやって実現してるな。
2018/04/02(月) 20:33:40.82ID:EffuLSkeM
よそでやれ
765デフォルトの名無しさん
垢版 |
2018/04/02(月) 22:15:26.67
>>761
そこはVariant型やろ
2018/04/02(月) 22:26:42.69ID:pVqQLih90
printfの出力をマルチスレッドで行うことはできないのでしょうか

素人的には
スレッド1 printf("abcde");
スレッド2 printf("12345");

出力 a1b23c4de5

となることを考えたのですが、WinAPIのCreateThreadやC++のThreadでも、CPU使用率はシングルスレッドのときと変わらず、出力もこのようにはなりませんでした

Windows VS2017
2018/04/02(月) 22:29:05.76ID:APYGmZJZd
>>766
排他制御されていないCRTを探す方が難しい。
768デフォルトの名無しさん (ワッチョイ c161-2OKV)
垢版 |
2018/04/02(月) 23:11:46.09ID:ifLgvYYR0
はじめまして。
大学でプログラミング関係の授業を受けるのですが、それの復習、応用などをrpgツクールmvですることは可能でしょうか?

ちょこっと調べた感じプログラミング要素もあるらしいのですが、c言語はあんまり使わないとかなんとかという記事も見られました。

どうせなら楽しく勉強したいので、ゲームを作りながら学習できないもんですかね...。
2018/04/02(月) 23:22:32.32ID:k8TtPNR/d
>>768
プログラミングを授業で受けるなら、ゲーム制作はツクールMVよりUnityのがいいと思うけど授業内容は進むに連れてむしろツクールMVやUnityのようなのの中身についてになるから復習がてらにはしにくい
モチベ維持にはとても良いと思います
2018/04/02(月) 23:33:36.58ID:pVqQLih90
>>767
ありがとうございます
2018/04/02(月) 23:41:50.21ID:335Cb1sP0
バリアント型は何ビットなん?って話になるのがC++。
2018/04/03(火) 04:15:40.51ID:j/8PevsK0
>>766
目的はどっち??

文字単位で混ぜたい?
高速化したい?
2018/04/03(火) 08:36:15.92ID:cWIVDHVHa
O_DSYNCって使ったことある?
774デフォルトの名無しさん (アウアウカー Sadd-rlcN)
垢版 |
2018/04/03(火) 09:03:18.53ID:Lqpq4yV4a
ない
2018/04/03(火) 17:34:38.59ID:IRh8xu7sd
ないな
2018/04/03(火) 20:54:03.05ID:TORpZXhc0
ないっす
JFS用?
2018/04/04(水) 00:52:55.41ID:Ssb/YhXn0
同期I/Oだそうだ
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/open.2.html
778デフォルトの名無しさん (アウアウエー Sa23-HAdz)
垢版 |
2018/04/04(水) 02:32:43.57ID:h2UR4/YMa
でっていう
2018/04/04(水) 11:23:02.06ID:yTnGZmgQp
同期ってのは、処理が終わるまで帰って来ないって話だ。
下手すっと何秒も帰って来ないから、そこら中が固まる。
2018/04/04(水) 15:35:44.60ID:kI4IT8Vg0
同期というより直列だね
2018/04/04(水) 21:14:25.41ID:rBWooG9b0
動悸I/O
2018/04/04(水) 21:17:17.94ID:iV3ol7kd0
同期/非同期 ブロッキング/ノンブロッキング
783デフォルトの名無しさん
垢版 |
2018/04/04(水) 22:06:43.40
同期の絆
2018/04/04(水) 22:10:42.29ID:tDZB1fULM
貴様と俺とは同期のファイル
2018/04/05(木) 08:17:37.54ID:zuAyx/JN0
数値計算手法の一つである陰解法って陽解法とどう違うんだろう?まったく理解が進まん
陰解法での次ステップの状態を計算するには陽解法と違って次ステップでの値が含まれてる関係で行列の方程式?を解かなければならないらしいけど、その方程式で導く値がどう答えに結びついていくのかがわからない
(最終的にはC言語のプログラムに落とし込みたい。陽解法のプログラムはもう作ってあるんで多少なりとも流用できると楽なんだけどそう簡単にはいかんよね?)
2018/04/05(木) 12:42:25.18ID:O2KVno4c0
平たく言うと
100秒後の状態を得るのに途中の一つずつを100個全部求めなきゃいけないのが陽解法
10秒ごとの計算を10回、でいいのが陰解法

陰解法はかんたんに未来を得られる分、行列計算が面倒になる
787デフォルトの名無しさん (ワッチョイ 6d61-7DGm)
垢版 |
2018/04/05(木) 23:51:02.65ID:Un4TbCjZ0
これなんですけど、printfのとこの"%2c"で、
" %2c"
" %2c "
など空白を入れることで配列が変わってくるのですが、前に空白と後ろに空白のときの規則性がわかりません。教えて欲しいです。

https://i.imgur.com/QI86not.jpg
2018/04/06(金) 00:10:45.42ID:alNyslUNM
もっと具体的に
2018/04/06(金) 05:54:14.00ID:dKA/BnpB0
>>787
質問にある“配列”てのは、画面に出力される結果のことかな?
表示される文字やその順番は同じだけど、文字の間の空白の数が違う、と。

プログラミング界隈では“配列”って言葉は特定の意味を持った専門用語だし、
問題のプログラムはその意味での配列を使ってないから軽く混乱を招くかと。
2018/04/07(土) 07:48:11.30ID:mjL64jtF0
配置とかか?自分の試した結果で理解しろよ
2018/04/07(土) 13:51:14.96ID:Bd1xKzd/0
表示系の2バイト文字の扱い云々な気がする。
2018/04/07(土) 15:06:53.28ID:bMqQKRLP0
>>787
%2c の部分は右詰めで幅2文字の指定になるが c なので常に1文字の指定になり
引数の int 型数値は unsigned char に変換されて出力される。つまり %2c の部分
だけでスペース1文字と引数で与えた1文字が出力される。(もちろん端末によっては
引数の値によって1文字の扱いにならないかも知れないが、その辺は説明が長く
なるので省略)。

後はその前後にスペースを付け加えて出すかだけの問題。そのプログラムには
改行がないので全て繋がって出力される。(1回も改行を出力しないままプログラムが
終わるので実行環境によっては出力の後に続けてシェルのプロンプトが出るかも
知れない)。
793デフォルトの名無しさん (ワッチョイ 2d23-6Vn5)
垢版 |
2018/04/07(土) 15:19:36.81ID:vVe4gpjb0
判りにくい日本語だな
判るものもかえって判らなくなるくらいひどい
2018/04/07(土) 16:08:23.10ID:bMqQKRLP0
じゃあ分かり易く書き換えてくれ。
2018/04/07(土) 19:07:44.77ID:jn0jIz6fd
まず、%2cは必ず「ブランク*」(*は任意の1文字)になる。
その上で整形用のブランクはprintfを分けて、
ブランク以外の文字とかで試してみろ。
2018/04/07(土) 21:25:17.61ID:I35+hkP6a
>>745
アセンブラからきたわいCの楽さに歓喜
797デフォルトの名無しさん
垢版 |
2018/04/07(土) 21:49:40.43
Visual BasicとかPerlとかから入った自分としては、
Cのほうが簡単に書ける場面もあれば
VBSやVBAがいい場面もあればPerlがいい場面もあって
要はどの言語でも楽しく書ければそれでええやん
2018/04/08(日) 06:56:45.64ID:oETTfDn00
ワイはbash + sed + cの三点セットや
2018/04/09(月) 19:49:06.28ID:bmGQy2qQ0
>>787
こんなの試してみたら分かったりしない?(\nは改行)
printf("%c\n",'a');
printf("%1c\n",'a');
printf("%2c\n",'a');
printf("%3c\n",'a');
printf("%4c\n",'a');
printf("%5c\n",'a');
2018/04/09(月) 20:21:36.79ID:qxDYyi6TH
一切出てこない質問者の相手はいらんだろ
801デフォルトの名無しさん (ブーイモ MMe7-64l2)
垢版 |
2018/04/15(日) 15:16:14.29ID:iG9vZW44M
上の写真を見る限りjが増えたタイミングでprintfで改行コード入れてるっぽいけどそれならiのforが終わったタイミングで改行コード入れれば動くんじゃないですか?
なぜiが8までしか回さないのかわからないですが…
802デフォルトの名無しさん (ワッチョイ 93ab-ycE0)
垢版 |
2018/04/15(日) 15:38:09.01ID:MyboI2lC0
しょーもない質問ですいません

vs2017で勉強してるど素人なんですが
コードをミスして修正しようとすると文字が上書きされて
文字を挿入できないん時があるんですが、
なぜでしょうか?
803デフォルトの名無しさん
垢版 |
2018/04/15(日) 15:41:00.10
>>802
https://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5%E3%82%AD%E3%83%BC
2018/04/15(日) 15:42:04.62ID:CIuag2/D0
>>802
こっちで聞けよ

Visual Studio 2017 Part5
http://mevius.5ch.net/test/read.cgi/tech/1520336504/
2018/04/15(日) 15:50:05.64ID:ASLFteC6a
上書きモードに誤爆したろ
2018/04/15(日) 15:54:21.86ID:0gUBaoqj0
>>801
すまんが、どこに改行コードがあるのか、iが8までとは何の事か、
俺にはさっぱり読み取れねぇ
お前とは見えてる世界が違うようだ
807デフォルトの名無しさん
垢版 |
2018/04/15(日) 16:17:29.71
>>806
この程度読み取れないようじゃエスパーに向いてないよ

> どこに改行コードがあるのか
予想回答「int c=‘ ‘;」って改行コードですよね?
iが増えるたびに改行コードをprintしたいんですよね?

> iが8までとは何の事か
予想回答:すみません、jの間違いです!
2018/04/15(日) 16:20:53.00ID:LLURRdNlM
改行は'¥n'
' 'はスペース
2018/04/15(日) 16:30:24.50ID:bKUHpU4ed
>>806
大丈夫
おれもさっぱりわからん
2018/04/15(日) 19:02:55.57ID:+NxoeMlk0
C言語でのステートマシンの設計や、上手なコーディングについて
体系的に学べるお勧めの書籍やサイト教えて下さい。
2018/04/15(日) 19:08:40.56ID:+NxoeMlk0
連投で申し訳ないけど
この辺の技術ってC++勉強した方が身に付くのかな?
2018/04/15(日) 19:10:47.07ID:7zIgNBcs0
Cはライブラリが貧弱でほとんど自作しないといけない。
C++はその辺多少マシ。Boostとかあるし。
2018/04/15(日) 19:14:55.01ID:7zIgNBcs0
至極の名言教えてやるぜ。受け売りだけどな。
コードを効率的にしたり、最強の最適化だったりするそれが一番効くのは書かないことだ。
書くと何らかの負荷になる、コードもグチャグチャになる。
必要なことだけ書いて後は流れに任せるのが上達の道。
2018/04/15(日) 19:47:03.66ID:aZbHy3F9d
C++って言うほどライブラリ充実してるか?
2018/04/15(日) 19:59:11.25ID:+NxoeMlk0
うーん・・・人によって考え方が違うから正解なんてないし
2chのこのレスだけでは具体的な提示とか難しいよね

本当に必要な処理だけ書いてたら関数長くなって
見通し悪くなったりメンテし辛くなったりしない?
2018/04/15(日) 20:03:21.51ID:IgQGrpHk0
>>810
ない。
>>811
関係ない。

君は本質的な「プログラミングの腕前」を上達させる為に、体系的に学べる物を探しているんだろ?
ならそれは言語には全く関係ないことは分かるだろ。

そして、そんな物は今はない。なぜならプログラミングは今もまだ発展途上だから。
そもそも歴史が浅い。プログラミングには100年ほどの歴史しかないし、
プログラミング作法が学問として成立してからは50年ほどしか経ってない。
だから現在でも試行錯誤中なんだよ。
それは今更C#/C++/Javaがラムダを採用したことからも分かるだろ。
ラムダ自体はLispの昔からあった。
そしてこれらの言語はそれを知っていて不採用としたわけだが、
今更の方向転換=間違いを認めた、ということなんだよ。
まだそれくらいあやふやなものだって事。

勿論各自が「オレオレ流スーパーハッカー道」を上梓することは出来るのだけど、
実際そういう奴はいないようだ。

とはいえ、結果的に全ての言語が似たり寄ったりになってきているから、
これは成熟してきていることを意味する。
となると、今後は体系化されていくだろうし、そういうサイトや本が現れてきてもおかしくない。
今は>>813みたいな、一言集みたいなのしかないね。
https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/
2018/04/15(日) 20:18:14.92ID:CIuag2/D0
>>814
C に比べたら...
って話だろ
2018/04/15(日) 20:22:19.20ID:vjxfJMST0
>>816
C++/C#/Java のラムダ式ってラムダ式じゃないと表現できない「何か」を表現する、というよりは、シンタックスシュガーとしてのラムダ式であることが不満です
2018/04/15(日) 20:26:36.28ID:IgQGrpHk0
>>818
> ラムダ式じゃないと表現できない「何か」
とは何?
俺の理解では、これは存在しない。ラムダ無しでもチューリング完全だったろ。
2018/04/15(日) 20:31:05.37ID:vjxfJMST0
>>819
Y コンビネーターとか、どうですか?
2018/04/15(日) 20:33:38.79ID:8Bp5iafSd
>>818
ラムダ式じゃないと表現できない何かって何さ
定義した所の環境を使った第一級オブジェクトなプロシージャではだめなのか?
2018/04/15(日) 20:35:56.05ID:IgQGrpHk0
>>820
すまんが俺はLisp使いではないから、それについては知らない。
ただ、それが本当に役に立つものなら、C++は数年後に採用するだろうね。
2018/04/15(日) 21:29:24.63ID:7zIgNBcs0
>>815
一応言っておくと関数分割も必要なら必要なこととして処理されるべき。
ちなみに関数分割したほうが限度はあるけどキャッシュに乗って早くなる。
2018/04/15(日) 23:30:02.09ID:sXJBpbWg0
この板でチューリング完全て言葉をみるとは思わなかった
2018/04/15(日) 23:59:29.91ID:L6Qt+I9Ha
だいたい、どう抽象化するのがええのかって話でチューリング完全は関係ないからねえ。
前提としてはそうでないとあかんかも知れんけど。
2018/04/16(月) 00:40:26.76ID:qQ0bjYjD0
抽象化については「オブジェクト指向」で今のところ決着してるだろ。
これを否定する見解や言語は無いと思うが。
2018/04/16(月) 04:32:33.72ID:94linQhp0
コンビネータでも実装するか?
2018/04/16(月) 23:38:04.25ID:qQ0bjYjD0
>>820
>>827
お前ら知ってるのならそのメリットを(出来れば具体的に)書いてみてくれないか?
一応Wiki読んだが、
> 明示的に再帰を書かずに再帰を実現する為に用いる事ができる。
> なお、一般にそういった言語では普通に再帰が使えるので、
> プログラミングにおいてはパズル的なテクニック以上の意味は無い。
> https://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8B%95%E7%82%B9%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF
なら、いらねえし、採用されることはないと思うが。
2018/04/17(火) 00:06:31.67ID:gWiyCqxa0
>>828
その wikipedia の解説はちょっと本質からはずれている気がする
「明示的な識別子を含まないで再帰関数が記述できる」くらいか

ラムダ表現を採用している、というのなら不動点コンビネータくらいは記述できないといけないのではないか?
いいかえれば不動点コンビネータを表現できないラムダ表現は「何か大事な部分が欠けている」

ラムダ表現は理論的なモデル(計算可能性を論じるなど)として考案されたもので、実用とか効率とかからは遠く離れている
ラムダ表現を売りにする言語(lisp とか)ならともかく、C#/C++/Java のような実用・効率を求める言語で単に「ラムダ表現ができる」「簡潔だ」くらいの理由で採用されるのは、無目的に言語仕様を拡張しているという理由で個人的には不満

さらにはラムダ表現を老害フィルタがわりに使う者もいたりするが、そういうのには賛同しがたい
2018/04/17(火) 01:21:31.43ID:RhwG6Rqia
javascriptだとアリって気がするよな。
なぜかは知らんが。まあlisp感あるからか。
2018/04/17(火) 08:33:39.92ID:dXM64r3I0
javascriptにはなぜかオブジェクト指向が無いからな
コンビネータはC++には早晩実装されそうな気がする
2018/04/17(火) 09:37:19.33ID:tZLDyJo/0
C++やJavaはクラスベースのオブジェクト指向言語
JavaScriptはプロトタイプベースのオブジェクト指向言語
2018/04/17(火) 23:42:23.84ID:Yk52Q7IR0
>>829
今の仕様で不動点コンビネータが記述できるのかどうかは俺には分からないが、
焦点はその先で、「記述できたら何がうれしいのだ?」なのだと思うよ。
実用言語で重視されるのは当然「実用性」であって、「学術性」ではない。

逆に、実用性皆無なら、当該部分が削除された状態で採用されるべきだ。
例えばC#は意図的にインラインアセンブラを禁止している。
ヘルスバーグのインタビューがググッても出てこないのだが、心は、
「C#のコードならメンテできます」の為の必要知識量を抑えること、だった。
これは長期的に要員確保の難易度を下げ、結果的にメンテ性を上げる。
これも実用言語では重要だよ。
アメリカでPythonを使うのも、Python自体が良い言語だと思っている奴は皆無で、
「Pythonならみんな読めるし書けるから」だからね。
そのコードが10年以上使われることが分かっているのなら、
10年後に要員確保できない可能性がある言語を選択するのは間違いだし。

Cは、(時代的に無理ではあったが)何でもありの状態で、
文法は極めて簡単だが問題は中で何をやっているかで、読んでみなければ分からない。
「Cのコードならメンテできます」とか、簡単に言うのは無理だろ。
C#はイミフなコード構成(大体はCでも警告が出るもの)も禁止されており、
一応、エンジニアが「C#ならメンテできます」と言えることを目指している。
(上手く行っているとは言い難い部分もあるが)
酷い話だが、Javaは10年間全く進歩しないことによってこれを達成してしまっているし。

だから、話を戻すと、
実用言語においては実用性のある機能は取り入れるべきだが、
実用性がない機能は捨てられるべきなんだよ。
(大は小を兼ねる、多めに採用しとけ、ではない。同様に無駄に構文糖が多いのも問題)
今回ラムダが矮小化されて取り込まれているということなら、
取り込まれた部分は必要だと、切り捨てられた部分は不要だと判断されただけ。
勿論今後覆る可能性もあるけどね。
2018/04/17(火) 23:55:44.13ID:zXGef27d0
そういうのは自宅の壁に
2018/04/18(水) 00:05:44.11ID:0XfxQo2f0
>>833
>取り込まれた部分は必要だと、切り捨てられた部分は不要だと判断されただけ。
受動的な態度であればそうなるが、あえて私の感覚を述べるとすれば、

ラムダ式を C++/C#/Java(特にC++)に取り込む価値があったのか?
という点、C++ のラムダ式は operator()() で実現できるし、operator()() のシンタックスシュガーと考えてよい

シンタックスシュガーを全否定するわけではない
「ラムダ式」という偉大な名前に反して、実際にできることは一般的な「ラムダ式」のカバーする領域よりも狭くなっているのを「不満」と感じているだけなのかもしれない
2018/04/18(水) 01:03:16.68ID:fAoQEHU80
>>835
> C++ のラムダ式は operator()() で実現できるし、operator()() のシンタックスシュガーと考えてよい
一応それが禿がラムダをC++に採用するのに反対している理由だったと聞いたが、
結果的には折れたんだろ。
昨今は「出来ること」よりも「ソースコードの見やすさ」が重視されているし、妥当だと思うが。
比較すると、

1. そもそも operator()()(ファンクタ)では関数に見えない。これが最大のガン。
2. C/C++は階層記述能力が無く、関数内関数が出来ない。このため、
 局所的に関数ポインタを使いたいだけの場合でも上位階層に関数を記述するしかなく、
 結果的にその関数は他からも見える(使える)状態になってしまう。
 匿名関数であれば、そこでしか使っていない事を文法的に保証できる。
3. ファンクタだとインスタンス変数は必ずコピーすることになる。
 ラムダだとおそらく直接掴める場合もあり、この場合はケチれる。
 (ただしこれは実装による)

だから関数内関数(クロージャ付き、最低限その階層の変数は見えるもの=GCC拡張の仕様でいい)があれば、
1,2,3とも達成できるし、要らなかったかな、とも思う。
というか、C/C++とも、関数内関数(階層)は無しで押し切るつもりかよー、とは思う。
ラムダよりこっちの方が必要な気がするのだが。
837デフォルトの名無しさん (スップ Sd1f-CG16)
垢版 |
2018/04/18(水) 02:30:28.15ID:vVNlUpo0d
Cとシェルスクリプトだけで生きていきたいんですが食べていけますか?
またそういった分野らOSSコミッター以外でありますでしょうか?
2018/04/18(水) 02:40:14.81ID:whM0Cl8U0
あるとするなら組込系かな
回路図とアセンブラは出来るの?
839デフォルトの名無しさん (スップ Sd1f-CG16)
垢版 |
2018/04/18(水) 03:38:30.78ID:5PSc4Ve9d
>>838
ありがとうございます
840デフォルトの名無しさん
垢版 |
2018/04/18(水) 06:50:02.81
今どき組み込み系もPythonできなきゃやっていけない時代よ
2018/04/18(水) 06:58:40.17ID:JUjvxXNW0
組み込みは圧倒的にC言語が多い
842デフォルトの名無しさん
垢版 |
2018/04/18(水) 07:26:37.24
>>841
ツール類は一昔前ならPerl/Ruby/TTL(TeraTerm)/VBA、今はPythonが必須だよ
2018/04/18(水) 07:55:12.06ID:JUjvxXNW0
ツール類ってなんだよ

組み込みの話をしてるの
機器内部のファームウェア
844デフォルトの名無しさん
垢版 |
2018/04/18(水) 08:03:28.70
>>843
組み込み系開発者がCソースだけいじってればいいと思ってんのか
2018/04/18(水) 08:06:09.63ID:JUjvxXNW0
大部分の組み込みだとYES
他の言語など使わない
2018/04/18(水) 08:07:13.14ID:JUjvxXNW0
C言語以外が必要なのは大規模な物だけ
2018/04/18(水) 08:15:48.27ID:Acg84ZKa0
>>837
そういうことはプログラム板ではなくプログラマ板で聞いてこい
2018/04/18(水) 08:30:18.84ID:8g/N/Bw3a
>>844
いい。
2018/04/18(水) 08:59:26.18ID:whM0Cl8U0
最悪、シーケンサ(PC)でラダー図とアセンブラ触ってりゃ
行けるでしょ。
MELSEC-iQ-RとかはC言語で書く(OSはVxWorks)

ま所詮は他人の人生である
2018/04/18(水) 09:49:03.96ID:bX/oR0u10
Cでさえオーバースペックでアセンブラという場合まである
2018/04/18(水) 09:57:01.68ID:8LhMtFC1d
アセンブラでさえオーバースペックでバイナリエディタという場合まである
2018/04/18(水) 10:32:00.37ID:MgMoBevw0
>>851
参考までにアセンブラがオーバースペックなマイコン(SoC)って何処の製品か教えて
2018/04/18(水) 10:40:41.42ID:0P72JrSeM
あるとすればIMSAIとかだろうけど、流石にネタだろ
854デフォルトの名無しさん (アウアウカー Sa47-p2KG)
垢版 |
2018/04/18(水) 11:16:51.20ID:gg2GabAwa
プログラムを動かすボードが貧弱でも開発は豪華なPCでやるんだから最低でもアセンブラ使えるようにはするだろう。
作ったばかりのCPUで他のCPUとの互換性が全くなくアセンブラもまだない、なんていう特殊な状況でない限りは。
2018/04/18(水) 11:45:29.90ID:8g/N/Bw3a
マウンティング頑張れ
2018/04/18(水) 12:36:20.65ID:8LhMtFC1d
ごめんなさい
ネタです
857デフォルトの名無しさん (アウアウカー Sa47-p2KG)
垢版 |
2018/04/18(水) 12:57:38.66ID:gg2GabAwa
mount /dev/sda
2018/04/18(水) 23:26:56.70ID:1I0zrtwW0
組込み屋だけど会社によって状況違うんだなとしみじみ
2018/04/18(水) 23:58:14.05ID:BI6oaZDa0
この頃は組み込みって言っても Linux が動いちゃうような小さいボードあるしな。
SDメモリに平気で何Gもデータ入れちゃったりもできるし。なんとういか、時代は変わったよな。
昔は2KBと4KBのROMに詰め込むためにビット単位で削っていたもんな。
2018/04/19(木) 00:35:24.22ID:q2wFspbLM
組み込みって昔から小っちゃいのから馬鹿デッカいものまであるから一括りにするのが間違い
2018/04/19(木) 05:33:01.08ID:IwtdBTTY0
なんかネタレスで返されてるな
とあるLEDアレイの案件では並列に重きを置き
CPUあたりの処理能力は思いっきり低い
なんてのがあったんだが
862デフォルトの名無しさん (アウアウカー Sa43-9Dln)
垢版 |
2018/04/19(木) 12:39:01.79ID:oHD1faOFa
あまりに面倒ならハードウェアで回路追加して解決
2018/04/19(木) 22:41:42.50ID:Uac+F3+Td
あんまりそれすると、またハード屋に小言言われるぞ。
864デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/19(木) 23:07:31.74ID:p3OUOmjs0
int a[] = {0,1,2,3};
char b =0;
scanf("%d",&b);

printf("%d",a[b]);
知恵袋でこんな質問があって俺も不思議に思って持ってきたんだけど
色んな数字入れても0になるとか書かれてたんだけどこれどうなってるの?
2018/04/19(木) 23:17:20.36ID:/9NYPZwG0
>>864
自分で試してみた?
866デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/19(木) 23:21:55.11ID:p3OUOmjs0
>>865
100入れてみたら3が返ってきたw
2018/04/19(木) 23:22:54.38ID:b+0fRBYw0
>>864
>色んな数字入れても0になるとか
ならない
https://ideone.com/Itq7px
2018/04/19(木) 23:23:39.27ID:XF7JHHHf0
エンディアンによるような気もするがー

%d は int の大きさを持った器のポインタを要求してるのに
char の大きさの器を渡してるから どうなろうがしったこっちゃない鼻から悪魔系の動作
869デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/19(木) 23:29:53.26ID:p3OUOmjs0
これがエラーにならず動いてしまうという悪魔のCの動作か
2018/04/19(木) 23:30:32.30ID:/9NYPZwG0
char b[4] = {0};
scanf("%d",&b[0]);
printf("%d %d %d %d\n",b[0],b[1],b[2],b[3]);

これをVCとGCCで試してみた
結果は配列先頭要素に代入され、残りは0のままだった
2018/04/19(木) 23:31:48.87ID:x2EYL8xQ0
>>867
bの型がcharなのが肝なんだからそこは間違えるなよ
2018/04/19(木) 23:33:18.23ID:XF7JHHHf0
>>870
入力で負の値を渡すと…
2018/04/19(木) 23:33:42.76ID:lwH23MPfa
intだからな
2018/04/19(木) 23:36:41.07ID:/9NYPZwG0
なるほど、入力値が小さいときは、
後ろの配列が変わってないかのように見えるだけって事か
2018/04/19(木) 23:38:11.10ID:b+0fRBYw0
>>868
char 配列の大きさを表す変数が int であっても、あるいはそうでなくても、それは関係ないのでは?
2018/04/19(木) 23:38:53.72ID:XF7JHHHf0
>>874
そそ 0でフィルしてるから問題ないようにみえるけど、
0 以外でフィルしてやると副作用おこしてるのがわかるよ
2018/04/19(木) 23:39:18.81ID:b+0fRBYw0
>>871
あ!
2018/04/19(木) 23:40:18.78ID:XF7JHHHf0
>>875
printf ではなく scanf のフォーマットでの %d 指定に char 変数のポインタを渡してる話よ?
2018/04/19(木) 23:46:08.02ID:b+0fRBYw0
>>878
やっと気が付いた…
>>877
2018/04/20(金) 00:50:00.05ID:G/kLZxdya
警告って出ないもん?
2018/04/20(金) 01:57:12.33ID:wjKqEKEv0
関数の引数はスタックサイズに丸められるよ
2018/04/20(金) 02:04:42.67ID:G/kLZxdya
ポインタだしなあ
2018/04/20(金) 06:13:59.91ID:EDYH6GYd0
>>880
GCC だと -Wall を指定すれば警告が出るね。

書式 %d に対して *char の引数 [-Wformat]
配列の添字が char 型 [-Wchar-subscripts]
2018/04/20(金) 06:51:33.68ID:9tWrHk9l0
>>881
この1行にアホが詰まってる
会話の内容も実際の動作も用語もわかってないっていう
2018/04/20(金) 07:58:37.73ID:eEDtLY6e0
アホな点をいくつ見つけられるかで
各自のアホ度を測定できるな
2018/04/20(金) 09:31:45.52ID:OLFb+zqBd
それがデバッグと言われる行為だろ?
2018/04/20(金) 10:21:13.71ID:xd9k5+f1M
脳がwormhole だらけなんでしょ
888デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/20(金) 14:21:22.42ID:33OB1hDw0
char *line;
scanf("%s", &line);//dogが入る
if(line=="dog")
{
printf("dogですよ");
}
これってなんでdogと合わないん?
2018/04/20(金) 14:26:31.37ID:UQRLXIIQ0
>>888
scanf で受けとる変数をchar型の配列にしましょう
2018/04/20(金) 14:30:58.92ID:OLFb+zqBd
>>888
line=="dog" という式は strcmp関数にしましょう
2018/04/20(金) 14:31:04.87ID:JZAZQDTS0
文字列の比較は == ではなく、strcmp 等の比較関数をつかいましょう
2018/04/20(金) 15:15:01.27ID:uy6ZTS8Ap
アドレスの一致を比較してるからじゃね?
2018/04/20(金) 15:17:13.71ID:RdXrGqPUd
C言語はプロ向きの言語
「とりあえず動かしてみる」
とかいう用途には向かない
入門書とかできちんと勉強しよう
2018/04/20(金) 15:20:02.90ID:JZAZQDTS0
>char *line;
>scanf("%s", &line);
この2行に色々な罠や誤りが仕込まれてるな。
Cで躓くであろう、ポインタと配列、文字と文字列周辺


(セキュリティや入力のオーバーランは考慮せず簡便なので書くと)
char line[256];
scanf("%s", line);
895デフォルトの名無しさん (アウアウカー Sa43-9Dln)
垢版 |
2018/04/20(金) 17:03:59.70ID:OzeM0EoQa
>>888
どこから突っ込んでいいかわからない。
今は出先でスマホから見てるので書くのが面倒だが、多分明日までには他の人が沢山ツッコミを入れている事だろう。
2018/04/20(金) 17:21:20.04ID:PF4NyNv9d
>>894
char line[64];
size_t len;
fgets(line, sizeof(line), stdin);
len = strlen(line);
if (len && line[len - 1] == '\n') line[len - 1] = 0;
if(strcmp(line, "dog") == 0)
{
printf("dogですよ\n");
}
2018/04/20(金) 17:28:09.55ID:PF4NyNv9d
char line[64];
fgets(line, sizeof(line), stdin);
strtok(line, "\n");
if(strcmp(line, "dog") == 0)
{
printf("dogですよ\n");
}
2018/04/20(金) 18:00:02.24ID:eEDtLY6e0
char line[256];
scanf("%255s", line);

scanfを使えないアホが
scanfをdisるのを見る度に
嘲笑するのも勿体ない気分になる
899デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/20(金) 18:02:13.70ID:rQE2Qud50
これでもし入力条件が不明の長さで受け取らなきゃ行けなかったらどうすればいい?
2018/04/20(金) 18:08:34.85ID:RP9oZBhW0
>>898
それ 256 という定数を変えるとき、いちいちレテラルの中を手書きで直すんですか?
いけてないですね…
2018/04/20(金) 18:10:03.88ID:wjKqEKEv0
*ぐらい使えよ
2018/04/20(金) 18:10:57.05ID:PF4NyNv9d
std::getline
一文字ずつ読み込む
903デフォルトの名無しさん (アウアウカー Sa43-9Dln)
垢版 |
2018/04/20(金) 18:40:42.36ID:dyY1ZlsFa
gccならgetline()
2018/04/20(金) 18:44:42.17ID:PF4NyNv9d
入力バッファにちょっとゴミが混じるだけでscanfは使えなくなる。
そんな役立たずは、業務では使うべきではない。使うなら、fgetsとsscanfの方がいい。
我が国のコンピューター教育は残念ながら、業務では役に立たない言語を教えている。
2018/04/20(金) 19:13:13.94ID:2JMfU3z40
むしろ余程プアな環境でない限り、業務でC言語は使うべきではない
2018/04/20(金) 19:54:49.61ID:RP9oZBhW0
>>905
かわりに何を使えばいいですか?
907デフォルトの名無しさん
垢版 |
2018/04/20(金) 19:55:43.39
>>906
Python
2018/04/20(金) 20:49:36.44ID:9tWrHk9l0
業務でこそC言語
2018/04/20(金) 20:55:22.00ID:18ECoYTh0
COBOLかVB
2018/04/20(金) 21:04:02.42ID:qDS4Ifrca
>>905
心配しなくても使われる所は限られてるよ。
OSそのものとかデバイスドライバとかな。
それも減りつつあるんじゃないかな。
まあしかし過去の資産がありすぎて捨てられないって感じか。
うまいこと互換性を保ちつつ次の段階へ行ければいいんだろうけどね。
2018/04/20(金) 21:08:14.53ID:9tWrHk9l0
MCUはほとんどがC言語
たまにC++
たまにアセンブラ
2018/04/20(金) 22:17:00.80ID:DDZisBasM
>>899
その受け取ったデータをどう使うかによる
913デフォルトの名無しさん (ワッチョイ b39f-9jjH)
垢版 |
2018/04/21(土) 00:13:25.41ID:Oxipuy330
>>901
scanf() の * は・・・
2018/04/21(土) 03:47:37.05ID:Ynju1Yzg
hallo warld
2018/04/21(土) 03:55:01.78ID:nJ9/ilUK0
>>914
ばかに見えるから止めた方がいいと思うよ
2018/04/21(土) 06:07:34.81ID:pETeS31u0
こちらでどうぞ
https://mevius.5ch.net/test/read.cgi/tech/1427572389/
2018/04/21(土) 06:24:19.45ID:pETeS31u0
>>904
898の例でゴミが問題になるのか?
2018/04/21(土) 15:05:42.05ID:WYiI1Hbl0
入力された文字列(例えば10文字程度)を、
数字だけ*に変えるプログラムを作りたいと思ってるんですが、
どうもうまく行きません
どなたか簡単なコード書いてくれませんか
919デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:31:16.54
>>918
数字は半角の「*」でいいの?
それとも全角の「*」?
それによって処理の複雑さが変わる
920デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:32:52.02
ああ、あと入力された文字列にはマルチバイト文字が含まれるのか、1バイト文字なのかも明確にしとかないとな
2018/04/21(土) 15:33:17.96ID:VeVDn114a
>>918
お前さんが書いたコードをあげれば誰か添削くらいはしてくれるかもよ
2018/04/21(土) 15:33:18.46ID:WYiI1Hbl0
>>919
すいません、半角でお願いします
923デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:45:37.64
入力部分には>>897を使わせてもらった

#include <stdio.h>
#include <string.h>

void mask_num(char *s)
{
char *c;
for (c = &s[0]; *c != '¥0'; c++)
{
if (*c > '0' && *c < '9') *c = '*';
}
}

int main()
{
char line[64];
fgets(line, sizeof(line), stdin);
strtok(line, "¥n");
mask_num(line);
printf("%s¥n", line);
return 0;
}
2018/04/21(土) 15:47:16.12ID:FmyBtpFH0
プログラムのコードの話してるのに全角は無いわ。
データの話ならむしろ文字コードとかまで考えなきゃならんがな。
925デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:49:15.15
>>923
>if (*c > '0' && *c < '9') *c = '*';

if (*c >= '0' && *c <= '9') *c = '*';

だった
926デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:51:21.42
>>918
を見て「*」を「*」に勝手に読みかえるようじゃ
受け入れ試験時で不具合が見つかって大幅手戻りが発生するぞ
2018/04/21(土) 16:07:01.70ID:a/Xqi2VF0
void mask_num(char *s)
{
 while (*s) {
  if (isdigit(*s)) *s = '*';
  s++;
 }
}
2018/04/21(土) 16:17:22.90ID:Oxipuy330
入力して変換して出力するだけでいいならこうかな。

#include <stdio.h>
#include <ctype.h>

int main()
{
 int c;

 while ((c = getchar()) != EOF)
  if (isdigit(c))
   putchar('*');
  else
   putchar(c);

 return 0;
}
2018/04/21(土) 17:23:05.22ID:2bKzbSLP0
>>926
しかしながら「数字を*に変えるプログラム組んどきましたよ」と言って
本当にASCIIの '*' でなくマルチバイトの "*" に変える処理だったら
発注側から「普通全角はないだろ、お前さん常識ないのか?」と
発言者にとって都合の良い「普通」「常識」の波状攻撃を受けるハメに。

その意味で >>919>>920 の態度は正しい。
世の中には自分のミスを認めたくない人もいるけどな。
2018/04/21(土) 18:01:42.48ID:bgp2zzOH0
今回の発注者は>>918だから注意喚起として * じゃないの?
って確認するのは正しいけど全角半角言うならむしろ数字と言うのが半角だけでいいのかを確認した方がいいかと
下手すると 壱萬弐仟参佰四拾伍 が変換されてないじゃないかとか言われるかも知れんし
2018/04/21(土) 18:05:08.78ID:uE8GRdCpd
>>924
プログラムのコードの話なんてどこに書いてある?
2018/04/22(日) 03:46:05.48ID:jlGSrB9uM
>>930
Unicode正規化も確認しないとな
2018/04/22(日) 06:45:30.49ID:5hVlVxZz0
すいません遅れました
添削おねがいします

#include <stdio.h>
void num_star(char *p)
{
while (*p)
if(*p >= '0' && *p <= '9')
*p++ = '*';
}
int main(void)
{
char ch[10];
printf("文字列を入力せよ\n");
scanf("&s",ch);
num_star(ch);
printf("%s\n", ch);

return 0;
}
2018/04/22(日) 06:59:36.50ID:cFbiqY2T0
>>933
scanfに"&s"は間違い"%9s"だ
if(*p >= '0' && *p <= '9')は標準関数でif(isdigit(*p))とできるのに勿体ない
p++はifの条件が偽のときに実行されなくなっている
935デフォルトの名無しさん (ワッチョイ b39f-+Fe+)
垢版 |
2018/04/22(日) 13:47:43.90ID:J/MYnpG10
数字以外の文字だけ入力されたら無限ループになって終わらないね。
2018/04/22(日) 13:59:28.07ID:1MVwzpIAd
>>934
関数コールは遅いしサイズも増える
標準ライブラリを全てリンクしてるかわからない

わざわざC言語を使う場面ていうのは
そういうことも多少は心配した方が良いこともある
2018/04/22(日) 14:04:21.13ID:bjDlbJPk0
>>936
>標準ライブラリを全てリンクしてるかわからない
必要なものをリンクすればいいし、必要なものをリンクするように出来ているのでは?
2018/04/22(日) 14:13:43.70ID:1MVwzpIAd
リンクしない選択をすることもあるのだよ
色々な理由で

特にわざわざC言語を使うような環境では
2018/04/22(日) 14:18:09.76ID:1MVwzpIAd
なにが「勿体ない」だか
2018/04/22(日) 14:38:15.31ID:cFbiqY2T0
>>936
> 標準ライブラリを全てリンクしてるかわからない
リンク? インプリメントの間違いだろ
何をリンクして何をリンクしないのかは
組み込みでは厳密に指定し結果も確認する

isdigitにはマクロバージョンもある
おそらくお前さんはそんなん知らんと言うだろうな

総じて、現物のコンパイラを細かくいじるということをせずに
上っ面だけ使って満足している手合いか
2018/04/22(日) 14:40:37.67ID:RLohAeVua
strip
2018/04/22(日) 14:46:38.59ID:RDdUHzj0a
>>936
そういう話は最低限の基本ができてから教えれば十分なことで、始めたばかりの初心者にあれこれ言ってかえって混乱させるのは良くないかと。
943デフォルトの名無しさん
垢版 |
2018/04/22(日) 15:27:22.65
>>940
isdigitの指す文字が’0’〜’9’だけとも限らないからな(事実上は問題にならないとしても)
2018/04/22(日) 15:45:55.57ID:RLohAeVua
digitの定義はlocaleに依存するので制御可能。
基本的にはisdigitが妥当だろうね。
自前でテーブル定義してもよい。大小で判断するのは危険だね。
2018/04/22(日) 16:35:36.81ID:H/AU6k7y0
>>944
> 大小で判断するのは危険だね。
危険だと思う理由は?
'0'〜'9' が連続してることは規格で保証されてる
2018/04/22(日) 17:32:41.34ID:cFbiqY2T0
>>945
その規格とやらの文書番号は?
つまり何の規格かと
2018/04/22(日) 17:59:29.92ID:rTRuhMGrM
>>946
X 3010:2003 (ISO/IEC 9899:1999)
5.2.1文字集合
ソース基本文字集合及び実行基本文字集合の双方において,10 進数字に関する上の並びにおいて,0 の右側に並んでいる各文字の値は,一つ左側にある文字の値に比べ 1 だけ大きくなければならない。
2018/04/22(日) 18:31:37.06ID:cFbiqY2T0
>>947
あれ本当だ
ということはCの翻訳環境でも実行環境でも
採用を禁じられる文字集合規格がありうるってことか
なんか出過ぎた決めごとだな
2018/04/22(日) 18:58:05.22ID:H/AU6k7y0
>>948
> 採用を禁じられる文字集合規格
そんなもの見たことない
2018/04/22(日) 19:16:00.91ID:bjDlbJPk0
>>949
「0 の右側に並んでいる各文字の値は,一つ左側にある文字の値に比べ 1 だけ大きく」なっていない文字集合は思いつけませんね…
ftp%3A//ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00037.pdf
2018/04/22(日) 19:35:50.81ID:cFbiqY2T0
>>949
いや俺も見たことないけどさ
それはASCII系が絶対的とでも言うほどの多数派で
遙かに遅れたEBCDICもそうなっているからだろ
科学的にそう規定すべき合理性あるか?
2018/04/22(日) 19:36:32.85ID:YjWQK7FP0
[[['[] ]]] { {] ]][ '[][][] [][] [][][]  [] '[] []
2018/04/22(日) 20:06:54.82ID:H/AU6k7y0
>>951
自分の回りにないならあるものを前提にするのはあたりまえ
そもそも連続してないことにメリットがあるとは思えないし
2018/04/22(日) 20:06:57.91ID:TH0cxcHD0
>>951
BCD計算が出来なくなるからCOBOLが動かなくなるわな
CPUの時点で排除しているのは6502系ぐらいじゃね?
955デフォルトの名無しさん (ワッチョイ 1ad2-JOUt)
垢版 |
2018/04/22(日) 20:20:55.56ID:d95yXvpO0
再帰関数を使って次の問題の会を出すプログラム書いたんですけど、なんかミスばっかでダメなので、だれかどういうプログラム書けばいいのか教えてもらえませんか?

九つの椅子が
○○○
○○○
○○○
のように並んでおり、はじめに数字の書いた札を持った何人かが座っているとする


○○5
○9○
12○

さらに他にも何人か数字の書いた札を持った人がいて、その人たちが空いてる席に順番に座って行くとする
全員座った後、それぞれの点数を数えるとする、ただし点数は前後左右の人が持ってる札の数字を足し算する


○○5
○9○
12○
で 3さん→4さん→7さん とすわり
○75
493
12○
となった、9の点数は7+4+3+2

この時、それぞれが自分の点数を常に最大になるように座ったら最終的にはどういう配置になるでしょう?ただし
・それぞれは座る順番を知っている
・その次に座る人達がどこに座るかまで考慮に入れて考える
・自分以外の点数は気にしない
・誰もいないところは0
・次の人が何箇所か座る候補があり絞れない時は常に予想図の最小値をとって考えるとする、つまり極端にリスクを恐れる
956デフォルトの名無しさん (ワッチョイ 1ad2-JOUt)
垢版 |
2018/04/22(日) 20:22:39.58ID:d95yXvpO0
質問てここでいいですか?
2018/04/22(日) 20:32:24.58ID:H/AU6k7y0
>>954
この2行にアホが詰まってる
会話の内容も実際の動作も用語もわかってないっていう
958デフォルトの名無しさん (ワッチョイ b351-GfG9)
垢版 |
2018/04/22(日) 20:58:30.62ID:kdP+cJ/x0
>>955
面白そうなテーマだから、お題スレに投げてみるのがいいのではないかと誘導

プログラミングのお題スレ Part10
http://mevius.2ch.net/test/read.cgi/tech/1514772904/
2018/04/22(日) 21:11:08.54ID:1MVwzpIAd
>>942
いやだから、
>>934の真ん中がいらないっていう話
2018/04/22(日) 21:17:34.90ID:1MVwzpIAd
>>940
どこからつっこんでいいのやら
2018/04/22(日) 21:18:50.30ID:1MVwzpIAd
>>957
どこかで見たセリフ
2018/04/22(日) 21:19:12.17ID:T8nVVEKh0
形式
#include <ctype.h>

int isalnum(int c);
int isalpha(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);

機能説明

上記にリストされている関数はすべて ctype.h 内で宣言されており、指定されている整数値をテストします。
c で適切な整数値は、unsigned char または EOF として表現可能なものです。

デフォルトで、これらの関数は ctype.h がインクルード されている場合はマクロとして定義されます。
パフォーマンスを良くするために、関数形式よりマクロ形式を使うのが適切です。
2018/04/22(日) 21:26:12.24ID:20oer2uOa
>>962
そういえばそれって locale 考慮すると言っときながら unsigned char でしか
判定してくれないというなんとも言えない仕様だよな。マルチバイトの判定が
できない。まあそんな拡張したら面倒な感じはするのでそのままでもいいが。
2018/04/22(日) 21:28:15.82ID:cFbiqY2T0
ですます調ということは、JISソースではないな
965デフォルトの名無しさん
垢版 |
2018/04/22(日) 21:29:41.48
>>963
つ iswdigit
2018/04/22(日) 21:31:58.01ID:cFbiqY2T0
C99以後はinlineがあるんだがID:1MVwzpIAdはC89前提?それともK&Rかね
967デフォルトの名無しさん (スププ Sdba-JOUt)
垢版 |
2018/04/22(日) 21:33:04.20ID:1srXW/Rwd
>>958
ありがとうございます、そっち行きます
2018/04/22(日) 21:33:34.88ID:1MVwzpIAd
前提など不要
2018/04/22(日) 21:34:00.82ID:cFbiqY2T0
>>953
数字が連続していないことにメリットがあるとは思えない
という思考回路では
英字が連続していないことにメリットがあるとは思えるのか?
具体的にどんな?
2018/04/22(日) 21:34:42.49ID:1MVwzpIAd
どんな環境かわからないんだからどんな環境でも動くコードが良い
2018/04/22(日) 21:36:00.62ID:cFbiqY2T0
レスが長文化してるやつは効いてる効いてるwだが
逆もまた真なり
情報量が非常に乏しいレスしかしなくなったやつw
2018/04/22(日) 21:42:55.38ID:1MVwzpIAd
ねえねえ
なにが「勿体ない」の?
2018/04/22(日) 22:18:10.29ID:H/AU6k7y0
>>969
> 英字が連続していないことにメリットがあるとは思えるのか?
おそらくEBCDICのことを言ってるんだろうけどあれはパンチカードフォーマットから変換しやすくするような体系になってるだけの話
2018/04/22(日) 22:19:34.67ID:TH0cxcHD0
>>961
何ら有益な情報を書けない。只の荒らしでしょ。
2018/04/22(日) 22:35:44.05ID:OBDOSUSoa
今更で悪いけど、文字はまず集合として扱うのが筋だからさ。
大小比較したいなら、一度数値に直せばいいじゃんと思うよ。これについては規格上の正しさという話ではなくて、抽象的な意味にこだわらないと保守性下がるというのが実感としてあるから言うとるのよ。
2018/04/22(日) 22:36:07.06ID:bjDlbJPk0
「こういう仕様になっているのはこういう理由だからだ」という設問
あるいは「もしこういう仕様だったらこういう問題があっただろう」という反実仮想的設問には意味があると思っているから、そういう話で盛り上がる今はありがたいと思っています
2018/04/22(日) 22:40:48.03ID:T8nVVEKh0
>>964
https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.bpxbd00/isalnum.htm
2018/04/22(日) 22:43:35.78ID:bBx4tH0Hd
>>974
元はおれの文
1行でアホが詰まってると、本気で感心した時に書いた
2018/04/22(日) 23:07:06.08ID:TH0cxcHD0
>>978
最近のBOTは優秀になったのね。CNTKか何かか?
2018/04/22(日) 23:08:02.95ID:H/AU6k7y0
>>974
関係ないことを堂々と書く奴に言われてもな w
981デフォルトの名無しさん (ワッチョイ b39f-9jjH)
垢版 |
2018/04/22(日) 23:55:50.76ID:J/MYnpG10
数字なのに1足されてないというと、Unicodeでの漢数字かな。
982デフォルトの名無しさん (ワッチョイ 5923-cUH7)
垢版 |
2018/04/27(金) 11:38:54.60ID:OGjTaEqd0
うむ
2018/04/28(土) 21:59:14.79ID:4vnB69wL0
[[[ ][ ]]]\[[]] [[[]]]],[[[ [][] ]
984デフォルトの名無しさん (ワッチョイ 5961-ZnuE)
垢版 |
2018/04/29(日) 17:07:26.07ID:X9PCZykj0
O(n)のin-placeなセレクティングネットワーク
O(n)のin-placeなマージアルゴリズム
O(n)のin-placeなマージングネットワーク
O(n log n)の(実用的な)ソーティングネットワーク
は存在しますか?
ここらへんがあると並列ソートがかなり捗るんだけど。
2018/04/29(日) 20:34:40.36ID:My7UiDyw0
[[[ []]]]*[[ [][] ][] } } {} [[[
986デフォルトの名無しさん (ブーイモ MMb3-ZnuE)
垢版 |
2018/04/29(日) 20:42:41.53ID:0iHuAZG8M
こんにちは

c言語で質問です
写真の通りのプログラミングを書きたいのですができません
*などで四角形は作れるのでそれを応用するのだと思うのですが、2段目以降を違うのにするやり方がわかりません

どなたかお願いします。
https://i.imgur.com/09EKR0n.jpg
2018/04/29(日) 20:45:11.87ID:PLWQQmF3d
>>986
数学で数列は習ったかい? 一般式で表してそれを二重のforループにするだけだ。
2018/04/29(日) 21:16:42.92ID:gpEFuXsMa
二重ループよりも二個関数作った方が将来のためになるかもな
2018/04/29(日) 22:14:07.36ID:PLWQQmF3d
数列を極めるには、差分法が役に立つが、今ではかなりマイナーな数学分野になっている。
2018/04/29(日) 22:20:26.21ID:PLWQQmF3d
差分法は、微分法の兄弟みたいなもので、差分法の極限をとると微分法になる。
2018/04/29(日) 22:21:28.34ID:20g7tnTI0
>>989
漸化式がマイナーだって?
2018/04/29(日) 22:27:28.61ID:PLWQQmF3d
差分法は、研究分野としてはマイナー。差分方程式は地球上ではもうだれも研究していないのではないか。
2018/04/30(月) 01:05:41.13ID:Knbm+hrA0
https://ja.wikipedia.org/wiki/%E5%B7%AE%E5%88%86%E6%B3%95
994デフォルトの名無しさん
垢版 |
2018/04/30(月) 01:30:28.58
別に小難しい数学の知識とかいらなくね?

a = 6, b = 4だとして、

ary = malloc(sizeof(int) * a * b);
for (i = 0; i < a; i++) {
 for (j = 0; j < b; j++) {
  v1 = (i == 0 || j == 0) ? 0 : ary[i - 1][j - 1];
  v2 = (i == 0) ? 0 : ary[i - 1][j];
  v3 = (j == 0) ? 0 : ary[i][j - 1];
  ary[i][j] = v1 + v2 + v3;
 }
}
2018/04/30(月) 01:58:30.12ID:njDF1dun0
いやいや、教科書的にはこうでしょ
for (i = 1; i <= b; i++) {
 for (j = 1; j <= a; j++) {
  v = j;
  for (k = 1; k < i; k++) {
   v = v * j;
  }
  printf("%d, ", v);
 }
 puts("");
}
996デフォルトの名無しさん
垢版 |
2018/04/30(月) 02:09:48.77
>>994はなんか勘違いしてたw
b<=2までしか合わんかったわw
997デフォルトの名無しさん (ワッチョイ 219f-luqG)
垢版 |
2018/04/30(月) 02:31:14.12ID:XX4FB8lc0
>>986
2番目の値だけ抜き出すと 2, 4, 8, 16 となっているので、一つ前の値を2倍にしている。
3番目の値だけ抜き出すと 3, 9, 27, 81 なのでひとつ前の値を3倍にしている。
4, 5, 6 番目も同様。

ということは、a の入力の個数だけ要素を入れられる配列を作っておいて、その各要素に
1 〜 a の値を一つづつ入れておいて、その後 b の回数だけループしながら出力して
掛け算してを繰り返せばいい。プログラムにするとこうなる。

https://paiza.io/projects/EIvP4vpEHRgWnXFlka5Vjg
2018/04/30(月) 02:48:27.09ID:XX4FB8lc0
配列でひとつ前の値を保持したくない場合はpow()使って計算するという方法もある。
https://paiza.io/projects/_L8doEZwIG6g0imlZM_Fug
pow()使いたくない場合はループして掛け算を自分でやる。
2018/04/30(月) 02:58:01.24ID:Xjg4h3Qz0
別に小難しい数学の知識はいらんけど>>994が頭悪いのを晒したのはイタかったな
普通なら恥ずかし過ぎてもうこのスレ覗くこと出来ないレベル
2018/04/30(月) 03:04:53.67ID:Knbm+hrA0
別に小難しい数学の知識はいらんし質問の趣旨からも逸れるが>>992が頭悪いのを晒したかった
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 69日 4時間 50分 55秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

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