トップページ⇒tech
1001コメント334KB

C言語なら俺に聞け(入門編)Part 126

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2014/05/25(日) 22:55:50.62ID:/Ed46QJw
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 125
http://peace.2ch.net/test/read.cgi/tech/1392482954/
★過去スレ
ttp://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 167代目
http://peace.2ch.net/test/read.cgi/tech/1392388003/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
ttp://codepad.org/
ttp://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
【重要】
当たり前の事ですが、2chではコピペ荒らしは禁止されています。
0002デフォルトの名無しさん2014/05/25(日) 22:57:16.66ID:/Ed46QJw
重要】
hogeは禁止です。使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
また、hogeはNGワードに追加しておくことが強く推奨されています。
0003デフォルトの名無しさん2014/05/26(月) 18:05:37.73ID:YsUmIhXY
hage
ahe
0004デフォルトの名無しさん2014/05/26(月) 21:04:25.48ID:R8HPcv0T
hogeってなに?
0005デフォルトの名無しさん2014/05/27(火) 07:49:33.26ID:25AWZBJ0
>>4
ttp://kmaebashi.com/programmer/hoge.html
0006デフォルトの名無しさん2014/05/27(火) 08:50:16.95ID:YWGAjtPi
foo, bar, bazをつかいます
0007デフォルトの名無しさん2014/05/30(金) 04:03:06.54ID:p0YChy7B
超初心者の質問で申し訳ありません。
1^m+2^m+3^m+......+n^mを求めたいんですがこれのどの部分に問題がありますか?
ご教授お願いします。
http://codepad.org/ZibSLvWH
0008デフォルトの名無しさん2014/05/30(金) 04:56:24.72ID:WXm2AdA0
xがどう変化してるか、printfで確認されてみては
0009デフォルトの名無しさん2014/05/30(金) 10:16:54.08ID:UPOkRfwS
>>7
内側のforでx = 1ってなってるけど、これはいいの?
0010デフォルトの名無しさん2014/05/30(金) 14:12:54.72ID:+E8tZH7v
インプットがないのにアウトプットが出ているという恐ろしい罠かも知れない
0011デフォルトの名無しさん2014/05/31(土) 00:20:25.14ID:HKQbq1rD
>>7
内側のforの前にmを別変数にとっておいて
forの前にmを入力値に戻してやらんといかんのじゃないか?
1回ループしたらm=0になるだろ
0012デフォルトの名無しさん2014/06/02(月) 21:42:42.25ID:2NHI//JA
プログラマーってB型が多いのは何で?
前から気になってたが…
0013デフォルトの名無しさん2014/06/02(月) 21:51:08.26ID:IemvHvtF
俺の知り合いにはA型しかいないが?
0014デフォルトの名無しさん2014/06/02(月) 22:02:23.52ID:bFWGwTOa
前の職場ではAが多かったかな
今の職場ではBが多いな…確かに…
0015デフォルトの名無しさん2014/06/02(月) 22:09:47.96ID:qsUKgSzK
血液型とか知らんがな。
若い女の子でもいたら、飲み会で「なんとさんA型でしょ」とか血液型トークになるのかもしれんけど。
0016デフォルトの名無しさん2014/06/03(火) 07:14:27.61ID:Ku9rqS7B
Windowsアプリ開発ではB型が多くて、
Webとかサーバー系の開発とか運用系はAB型が多かったな。
0017デフォルトの名無しさん2014/06/03(火) 19:48:39.10ID:o0OF6Fvt
>>16
人口の1割しかいないAB型が目に付くほど多かったとは、かなり危険な兆候だな。
大地震が来るね。
0018デフォルトの名無しさん2014/06/03(火) 20:42:10.61ID:aAH3rc4O
ここまで出てこないO型は勝ち組だな
0019デフォルトの名無しさん2014/06/03(火) 20:48:28.31ID:mqosVpdp
組み合わせ的に消滅へ向かうはずのO型血液がいまだに残って民族によっちゃ最大多数を占めてるのはどんなパラメータに拠るんだろう?
0020デフォルトの名無しさん2014/06/04(水) 02:45:25.03ID:YxALpo7B
O型の人はOOじゃないと出てこないけど
O型の遺伝子持ってる人はO型だけじゃないからな
0021デフォルトの名無しさん2014/06/04(水) 12:16:45.62ID:QBS2GcPO
printf系統の関数を先ずは極めましょう
0022デフォルトの名無しさん2014/06/04(水) 13:25:05.57ID:n8+wV5AW
aoのaとboのbでも産まれるからな
0023デフォルトの名無しさん2014/06/04(水) 17:02:43.25ID:Np1uZP8H
アナログコンピューターって何ですか?
素子が電子じゃないって事でしょうか?
Cのような精密な命令を処理するプログラムはちゃんと実行されるのでしょうか?
0024デフォルトの名無しさん2014/06/04(水) 20:50:09.54ID:Np1uZP8H
分からないね
0025デフォルトの名無しさん2014/06/04(水) 21:14:54.52ID:sDObxoUm
計算尺みたいなもんだ
計算尺みたことある?
ヘンミの計算尺
0026デフォルトの名無しさん2014/06/04(水) 21:25:49.90ID:9B7TFMcJ
>>23
オペアンプ
0027デフォルトの名無しさん2014/06/04(水) 21:28:40.21ID:sDObxoUm
利点は「対象のシステムよりも高速に動作することが多いため、シミュレーションは実時間以上に高速」
基本は、オペアンプの負帰還

できる数学的な操作は、総和、逆元、冪乗、対数、積分 (主に時間軸で)、微分(同様に時間軸で)、乗算と除算
───────
オペアンプ(増幅器。アナログICが販売されている)
オペアンプは、増幅率が非常に高くして設計されており、負帰還(ネガティブフィードバック, NF)をかけて利用する。
正帰還をかけたら発振する。

負帰還をかける部分にポテンショメータ、積分器などを配置する。
ポテンショメータ(端子が3つある可変抵抗器。両端に2つ。可動接触端子が1つ)
積分器(抵抗およびコンデンサ)
アナログ計算機(analog/analogue computer - Wikipedia
0028デフォルトの名無しさん2014/06/04(水) 21:31:59.84ID:sDObxoUm
>>23
命令もプログラムもありません
0029デフォルトの名無しさん2014/06/04(水) 23:54:56.41ID:5cufTYgB
http://codepad.org/3twUVcdw
単語を読み込んで、文字数と一緒に表示するプログラム

これを応用した課題を作らなければいけないのですが、そもそものこのプログラムがうまく動きません
とりあえず参考書通りに一字違わず書いたと思うのですが
エラーはないけれど、実行しても何も表示されない…
教員は参考書通りでできるというのですがどこが間違っているのか教えてください
0030デフォルトの名無しさん2014/06/04(水) 23:58:57.94ID:Y7lYZNRm
PutNamTabがおかしい。ここのtabって何よ。
0031デフォルトの名無しさん2014/06/05(木) 01:24:36.69ID:ziZk185w
NamTabの配列の空白部分(次の単語の頭文字地点)から
読み取った文字数len分だけそれぞれのtabにそれぞれのstrを与えているのだと思います…
多分私も大分理解足りないと思うので自信ないですが…
0032デフォルトの名無しさん2014/06/05(木) 08:44:37.01ID:oXM6DYRn
ボルテージフォロワとか言葉だけをそのまま使ったら中二病臭いよねw
0033デフォルトの名無しさん2014/06/05(木) 09:02:23.96ID:/748C5a2
>>29
コンパイルしてみたけど正常に動いた
表示される内容も問題なし
0034デフォルトの名無しさん2014/06/05(木) 09:05:25.60ID:/748C5a2
>>30
そのtabはAvailの位置を覚えるだけの一時変数
0035デフォルトの名無しさん2014/06/05(木) 12:19:30.84ID:CbdkWkFK
なんかダメプログラムの典型みたいだなぁ。
プロトタイプ宣言はしていないし、意味不明のグローバル変数は多用しているし。
putchar()のループなんて、printf()で"%.*s"を使えば事が足りる話だし。
0036デフォルトの名無しさん2014/06/05(木) 17:32:46.53ID:m9Ubt7TR
>>35
.*て何ですか?
0037デフォルトの名無しさん2014/06/05(木) 18:14:49.28ID:pwRKe8RC
>>29
何も表示されないのは正しく終了してないからじゃないの
UNIXならCtrl+C、WindowsならCtrl+Zを押して(EOFを入力して)
19行目のwhileループから抜けなきゃいけない

--ここから俺の質問
scanfってなんで改行だけだと反応しないんだろう?
29のプログラムだと改行のみでwhileループ抜けそうだと思ってしまったが抜けなかった
「そういう仕様です」なのかもしれんが、意図や利点があるとか何かあれば誰か詳しい人教えてください
0038デフォルトの名無しさん2014/06/05(木) 18:16:27.66ID:pwRKe8RC
肝心なとこ間違えた
誤:>UNIXならCtrl+C、WindowsならCtrl+Zを押して(EOFを入力して)
正:>UNIXならCtrl+D、WindowsならCtrl+Zを押して(EOFを入力して)
0039デフォルトの名無しさん2014/06/05(木) 18:25:46.97ID:m9Ubt7TR
%[^�n]sで空行入った気が
0040デフォルトの名無しさん2014/06/05(木) 18:47:41.55ID:CbdkWkFK
>>36
最大桁数の動的指定。printf("[%.*s]\n", 5, "abcdefghijklmn")とでもしてみる宜し。

>>37
改行文字はscanf()系の「空白文字」に含まれるので、"%d"や"%s"に対しては
先行する空白文字と見做されて入力待ちのままになってしまう。
>39が指摘するように、"%[]"のような文字セット指定なら、入力済みと見做せる。
0041デフォルトの名無しさん2014/06/05(木) 18:57:07.81ID:pwRKe8RC
>>40
なるほど、先頭のスペースを無視するのと同じなんですね
そして文字セット指定だと先頭のスペース無視がなくなると
よくわかりました、ありがとうございます
0042デフォルトの名無しさん2014/06/05(木) 19:17:15.14ID:ziZk185w
29です、色々ありがとうございます
scanfとscanf_sを間違えていたからのようでした…

ここから、読み込んだ単語を文字数の少ないものから順に並べ直して表示したいのですが
http://codepad.org/xcfujlY0
PrtNamAllの中身のtab=NamTabはどう書き換えればいいのでしょうか
表示する単語の開始位置がバラバラなので、次の単語にうつるたび設定するためにforにいれたのですが
tabに代入するNamTabを、その時のD[i]に対応したSymposから開始させればいいと思うのですが書き方がわかりません…
0043デフォルトの名無しさん2014/06/05(木) 19:43:36.46ID:Be1rTO1w
>>42
そこは、tab = Sympos[D[i]]; が正解のはず。
1行上のlenと対応しているはず
但し他のところがおかしいので、これだけでは
期待通りに動かないと思う(未確認だけど)
0044デフォルトの名無しさん2014/06/05(木) 19:49:40.86ID:TQjTzfj7
>>27
計算機としてのアナログ計算はそう多くないのだけれど、
微分、積分、乗算の3つは大量に使われてんだよね。
特に電波関連では乗算が大活躍してるとかなんとか。
//初っ端から虚数まみれなので数学苦手だと辛い…

最近の電波関連は乗算で周波数落としてデジタルサンプリングしたら後はDSPで捌いたりするから、
Cに類する言語でアナログ乗算された入力を処理することはままあるんじゃね?(スレチ回避の言い訳)
0045デフォルトの名無しさん2014/06/05(木) 22:25:25.93ID:RlDRjfNa
>>44
ハイブリッド自動車の制御とか連続量の演算は大量にあるよ
さすがにアナログだとメンテとかが大変なので、デジタルコンピュータを大量に使ってシミュレーションしてる
詳しくは hils とかでググって
0046デフォルトの名無しさん2014/06/06(金) 00:50:20.84ID:DhW11ZOH
>>45
それはアナログ制御とかの話で、「計算機としてのアナログ計算」する話とは違うと思うんだけど…
コンパレータやA/D変換使ってデジタル処理に持ち込んじゃうのが大半でしょ、そいつら。
0047デフォルトの名無しさん2014/06/06(金) 07:36:39.04ID:1f1OIxtf
>>46
アナログ制御が必要だからアナログ計算が必要と言う話
実現はデジタルでやってると言うのも書いてるけど?
0048デフォルトの名無しさん2014/06/06(金) 18:47:03.68ID:DhW11ZOH
>>47
デジタルに計算してたらアナログ計算じゃねーだろ。
アナログ回路をデジタル計算で制御してるだけだ。
Wikipediaでも読んどけ
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%8A%E3%83%AD%E3%82%B0%E8%A8%88%E7%AE%97%E6%A9%9F

数値計算的な意味合いのアナログ計算は今でもRFミキサなどで利用されている。
0049デフォルトの名無しさん2014/06/06(金) 19:32:38.99ID:slyOrLRP
>>48
> デジタルに計算してたらアナログ計算じゃねーだろ。

アナログ計算?
オレオレ用語で話されてもさっぱりわからんわ (w
0050デフォルトの名無しさん2014/06/06(金) 22:06:41.57ID:ZJbKt6sN
マジでアナログコンピュータ知らないお子ちゃまだったか。
0051デフォルトの名無しさん2014/06/06(金) 22:45:45.88ID:1f1OIxtf
ひょっとしてアナログコンピュータで計算することをアナログ計算って言ってるのか? (w
0052デフォルトの名無しさん2014/06/07(土) 06:36:54.72ID:0xjhQXXq
>>50
だったんだろうね。
苦し紛れな51のレスも、アナログ計算機って単語も知らず、
何に対するレスなのかも読めてなかった告白になってるし。
勘違いや無知は素直に認めて、沈黙か訂正を選ばないと人生つらいだろうに…
こんな話題で粘っても無意味だし何も得られないって早く気づくよう祈っとこう。
0053デフォルトの名無しさん2014/06/07(土) 10:13:58.22ID:xkbQeKRh
>>52
> 苦し紛れな51のレスも、アナログ計算機って単語も知らず、

アナログ計算 ≠ アナログ計算機

ごちゃごちゃ言う前に「アナログ計算」とやらを説明しなよ
0054デフォルトの名無しさん2014/06/07(土) 10:49:26.32ID:tmNvwrUz
単純にアナログ計算する機械をアナログ計算機っていうんじゃないの
○○機ってそういうことでしょ
0055デフォルトの名無しさん2014/06/07(土) 10:52:19.70ID:D6sqOe5Q
アナログ計算するんじゃなくて、計算方式としてアナログな手法を使う、が近い。
0056デフォルトの名無しさん2014/06/07(土) 12:07:38.86ID:NZ8ShEm/
>>54
それアナログ計算の説明になってないぞ

>>55
まあ普通はその解釈ぐらいしかできないよな
0057デフォルトの名無しさん2014/06/07(土) 12:10:08.80ID:tmNvwrUz
なんで説明を求めてるの?
0058デフォルトの名無しさん2014/06/07(土) 12:58:30.30ID:xkbQeKRh
オレオレ用語で話したいならどうぞ
0059デフォルトの名無しさん2014/06/07(土) 22:51:47.13ID:Zdd8B3TW
プログラミングの話と関係無いけど、プログラム開発するときって
基本的にチームのメンバーとネットワークで繋がってるの?
現場経験無いからそこらへん分からない、来月から派遣でプログラマー
の予定です、職場によって違うかもしれないけど要領とか教えて下さい
0060デフォルトの名無しさん2014/06/07(土) 22:58:40.53ID:D6sqOe5Q
色んな職場があるでFAだけど、今時ネットワークで繋がってない所はないけど、
プログラム開発に、どのようにネットワークを活用しているかは個々に違う。
それこそ只単にネットワークで繋がってるだけな所から、全てのリソースを共有
管理している所まで多様だよ。
0061デフォルトの名無しさん2014/06/07(土) 23:02:41.32ID:jBtwYmah
現場の種類によっては、派遣用の端末だけネットワークに繋がらなかったりもするね。
挙句にUSBメモリも使用禁止だったりして疎外感MAX状態だったり。

つーか、マ板でやれw
0062デフォルトの名無しさん2014/06/07(土) 23:06:09.63ID:Zdd8B3TW
>>60
コード書き終わった後は、USBメモリでプロジェクトマネージャーに渡す
所もあれば、メールに添付して送ったり、仕事の提出方法も様々なんですか?

>>61
派遣用だけネットワーク繋がらないってそれ困るでしょw
ネットで検索できないってことですかw
0063デフォルトの名無しさん2014/06/07(土) 23:07:20.49ID:Zdd8B3TW
USBメモリも使用禁止の理由が分からない…
まぁ色々事情があるのでしょうが
0064デフォルトの名無しさん2014/06/07(土) 23:15:27.00ID:jBtwYmah
>>62
派遣はネットワーク環境を自分で用意するんだよ。
社内のLANなんかに接続させてたまるもんか、って思想。
USBメモリも社内システムのお墨付きがないと接続できない。
なので、テザリングでメールで飛ばしてPMに確認して貰う。

だから、マ板でやれってw
0065デフォルトの名無しさん2014/06/07(土) 23:17:40.03ID:iNx9GCgC
USBメモリ使用禁止の理由が分からんとか。
社内LANから隔離されてるのが納得できないとか。

そうゆうプログラマーが派遣されてきたら、即チェンジする。
事故が怖いもん (ノ∀`)
0066デフォルトの名無しさん2014/06/07(土) 23:22:32.64ID:Zdd8B3TW
>>64
テザリングとwifiと無線LANの違いが分からないですw
>>65
USBメモリだとデータが消えるからそんな媒体から開いたファイル上で
プログラムをするなって事でしょうか?
0067デフォルトの名無しさん2014/06/07(土) 23:30:05.35ID:3OK1Y7g1
ぜんぜん関係ないけどUSBメモリを使うときは、会社から借りて使うことになってたけど
俺の隣の席のひとが、貸し出されたUSBメモリを自分のPCに刺したらその瞬間に、ウイル
スが検出されて、それを報告したら始末書を書くはめに。

どう考えても、その人の前に使った人が感染させて黙って返却したものなのに。
貸し出しは記録されてるから追跡可能なのに、真面目に報告した人の責任になるっていう。
0068デフォルトの名無しさん2014/06/07(土) 23:34:21.39ID:3R8CEA88
USBメモリーのルートにautorun.infという名のフォルダを作れ
0069デフォルトの名無しさん2014/06/07(土) 23:36:32.27ID:Zdd8B3TW
というかUSBメモリを貸し出す理由が分からない
バックアップ用って事なんでしょうか…

デスクトップとメディアに同時に保存する方法なんてありましたっけ?
メモ帳使ってるけど出来た試しが無い
0070デフォルトの名無しさん2014/06/08(日) 00:00:11.62ID:G2ObKARS
>>66
もし開発者に悪意があれば(※あるいは悪意が無くても何らかの手違いがあれば)
情報漏洩や、ウィルス混入や、社内システムの障害などを起こすことが可能だから。
そうゆう事故を未然に防ぐためのルールや環境つくりってことよ。

例えば派遣先の会社内で、顧客から預かった機密情報の漏洩事件があったとして。
あなたが無断でUSBメモリを持ち込んでいたり、無断で社内LANに接続していたら、
たとえ無実であったとしても犯人扱いされちゃうから、やめとけってことよ (ノ∀`)
0071デフォルトの名無しさん2014/06/08(日) 01:25:14.54ID:bPXdPQUw
禁止によって業務効率が落ちた挙句、FD等の効率の悪い抜け穴が利用される、みたいなことになると本末転倒だよなぁ…
0072デフォルトの名無しさん2014/06/08(日) 02:01:05.21ID:BaSYhye4
これからは情報漏洩の疑いをかけられないように派遣先に脳と衣服を置いていかないと…
0073デフォルトの名無しさん2014/06/08(日) 02:33:53.17ID:GJPS8Zp3
>>69
それ会社で聞くなよ
速攻でクビだぞ
下手するとおまえさんを派遣している会社ごと出入り禁止になる
0074デフォルトの名無しさん2014/06/08(日) 10:02:51.00ID:b9obj5lE
貸出にしている意味が無いな。
我社もUSBメモリをどげんかせんとあかん。とトップダウンで落ちてきた指示でアホな情シスが作った制度。

始末書に顛末を書いた後に、こんな阿呆なルールを作った給料泥棒が悪いとでも書いておけ。
0075デフォルトの名無しさん2014/06/08(日) 13:46:10.25ID:OVTpY++G
USBメモリは私の勤める会社の場合は会社から支給のパスワードロック付きのもの限定。
受託の客先の一社は社内システムでロックしたファイルしか読めない。
派遣先の一社は原則使用禁止。

まぁ、>69の勤める会社が早めに気がついて試用期間中に切れることを祈っておくよ。
0076デフォルトの名無しさん2014/06/08(日) 17:50:40.82ID:Us9YMN5t
2年間独学で勉強して、言語ばかり詳しくなっていくだけ
どうやったら先に進める?
0077デフォルトの名無しさん2014/06/08(日) 18:21:06.77ID:54SWPmuK
 
 【 付きうごき者 】
 
彼等の室内での心理状態、行動様態、気分の抑揚などは常に隣人の生活様態に左右、依拠され、
それら隣人の生活様態を自らの諸行動,諸動作の契機として、
あるいはまたスケジュール表か時計かのごとくに借用しながらの生活を送る。

付きうごきの感知は 自己の動作のあと1、2秒遅れて床から伝わってくる「ピクッ」とするわずかな振動から確認することができる。
 
  = 付きうごきの3型 =
・通常の場合
・付きうごきに対して注意喚起を促した後に逆恨みからその行為をより一層徹底、強力化してやり返してくるもの  〔付きかえし〕
・注意喚起時に他の部屋の別の引きこもり者が自分のことを指摘されたのだと思い込みやり返してくるケース  〔勘違い型付きかえし〕
 (パチンコ屋などで「警察だ!」と叫べば身に覚えのある何人かがギョッとして逃げ出そうとすることと同様に)
 http://rfi.a.la9.jp/hn203/k203/k.png
 http://rfi.a.la9.jp/hn203/k203/k203_1.png
 http://rfi.a.la9.jp/hn203/k203/k203_2.png
・ウィークリーマンションなどに入っている引きこもり者どうしが、あるいは他の普通の客も巻き込みながら付き返しの応酬となっているケース  〔やみくも型付きかえし〕
 
寝起きする住居であるから被害者はこれを避けることはできず、不愉快と時間、人生の浪費を強いられざるを得ない。
0078デフォルトの名無しさん2014/06/08(日) 18:49:57.95ID:OVTpY++G
>>76
先があるっていつから思ってた?
0079デフォルトの名無しさん2014/06/08(日) 20:22:32.06ID:aiXBLNQq
>>75
初心者にアドバイスくらいしてくれても
いいだろ、USB何故使うかなんて分からないし…

>>73
一応、それもアドバイスということで受け取っておきますが
これだけはしちゃダメなんてこと唐突に言われても分からないし…

プログラマーって一々説明するのがかっこ悪いみたいな風潮あるよな
プログラマーの派遣が経験者優遇で特殊な派遣ってのもあるけど何か
凄い閉鎖的だなぁ…
0080デフォルトの名無しさん2014/06/08(日) 20:25:31.24ID:aiXBLNQq
>>67
あなた全然悪くないよね、何だろう?こう、派遣に対して当たりがきつい
のかなプログラマ業界って…、何か億劫になるよ…
いい人もいるんだろうけど、パソコンばっかりやってて卑屈になる人も多い
のかも、このスレの人は勿論親切ですけどね^^
0081デフォルトの名無しさん2014/06/08(日) 20:27:32.66ID:jl/Y1Vem
>>76
恵比寿さんですか?
0082デフォルトの名無しさん2014/06/08(日) 20:28:38.51ID:yjVDP8Tp
C言語が一から学べるサイト教えてケロ
0083デフォルトの名無しさん2014/06/08(日) 23:01:39.01ID:OVTpY++G
>>82
google.com

>>79
読解力もない人だったのか。
ネットワークで直接接続されていない環境でファイルのやり取りする手段として、普通真っ先に思いつくのはUSBメモリだろ。
仕方ない、流れを説明しておこうか。

・ファイルのやり取りをしたい。
↓
・普通に考えればネットワーク共有すれば済む。
↓
・外部の人間にLANは使わせない。
↓
・だからと言ってUSBメモリは>75の理由で使えないことが多い。
↓
・外部の人間は自前で用意したインターネット接続手段を使ってメールでやり取りしろ。

って、書いておいてなんだけど、さんざん鼬害だと指摘されているのに居座るような体質だと、
派遣先で思いやられるってのが正直な感想だよ。
0084デフォルトの名無しさん2014/06/08(日) 23:18:16.37ID:bkCTLeYU
>>83
一連のやりとりをみていると、なんだかねえ
客の顔画優先で、まっとうな提案が通らない世界なんだね

>>69
無線LANでも提案してみたら?
0085デフォルトの名無しさん2014/06/09(月) 04:00:22.69ID:+aXF6mrh
>>79
かっこ悪いからじゃなくて、篩を兼ねた効率化で簡単な説明は省略してるんじゃない?
プログラマに限らず、簡単な事も説明しないとダメな奴は使いようが無いとかよくある。
使われ方を想定しないで書かれたプログラムとか、使えないプログラムと大差ないわ。
特に、リスクに対する想像が欠けてるプログラムだと使えないだけでなく害を振りまく。
ルール策定者が説明を求められて説明できないようなルールは糞だが、
説明するまでもなく分かって欲しいルールを片っ端から聞く奴も大概だ。
0086デフォルトの名無しさん2014/06/09(月) 07:16:11.54ID:quK33S+U
>>85
>説明するまでもなく分かって欲しいルール

たぶん、それを聞くと、お偉いさんの能力が顕わになり顔を潰すことになる、とかという類の「ルール」だろう?
ときどきやっちまう‥今でも冷や飯ぐらいだ‥異分野だけれどもね、どこも一緒だねえ

それにしてもそんなルール、本当に「ルール」なのだろうか?
0087デフォルトの名無しさん2014/06/09(月) 10:56:45.86ID:uTgA5MBX
>ルール策定者が説明を求められて説明できないようなルールは糞
って言ってるじゃん
0088デフォルトの名無しさん2014/06/09(月) 12:23:24.77ID:Q8TzlagX
悪法もまた法なり

ところで管理職の資質に関する定期的な検査の義務付けはまだなの?
0089デフォルトの名無しさん2014/06/09(月) 13:51:08.49ID:S7gX0NSa
>>83
ありがとう、ようやくわかった
それにしても派遣はインターネット外部のつかえとか何か
胸糞悪いね、何でそうやって差別されるんだろう…
食堂が派遣と正社員と別なら分かるけど、業務に関する事なのに
自分で無線端末用意しろとか何か当たりがきつい気がする
0090デフォルトの名無しさん2014/06/09(月) 13:54:49.53ID:S7gX0NSa
「言わないと分からない事を説明させる社員は使えない」
と「これを説明しないとリスクにかかわるからちゃんと説明する」
って矛盾してないかな、社員は派遣には特に説明する義務があると
思うんだけど、外部委託ってのは会社に責任があるからね
もちろん派遣も言われた事を完璧にやる責任があるけれど
あー怖いわプログラマ業界、優しい人が多いといいんだが
0091デフォルトの名無しさん2014/06/09(月) 14:14:45.81ID:w3W81CeW
とりあえず、
「自分は周りからはとてつもない馬鹿に見えている」
という認識を持ったほうがいいと思うよ。
0092デフォルトの名無しさん2014/06/09(月) 14:25:42.31ID:toxrNxwD
#include <stdio.h>

itn main (void)
{
char str1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char str2[30];
char *p1 = str1.*p2 = str2;

while (*p1 != '\0'){
p1++;
}
while (p1 > str1){

*p2 = *p1;

}
*p2 = '\0';
printf("str1 = %s\n", str1);
printf("str2 = %s\n", str2);

return 0;
}
0093デフォルトの名無しさん2014/06/09(月) 14:39:40.52ID:WYLHhV4p
>>89
派遣を差別しているんじゃなくて、自社の資源を守っているだけだってば。
派遣受け入れ企業によっては、ISO27001取っている企業からの派遣は社内資源を使える。
そういうお墨付きがなければ、責任の所在がはっきりしなくなることが問題なんだよ。
つーか、あんたの所属している会社はセキュリティ教育やってないんか?

>>92
二番目のwhileループが無条件に回り続けるぞ。
0094デフォルトの名無しさん2014/06/09(月) 16:00:18.04ID:10ZsRbUm
>>83
あほう。業務の一環としてファイルをやり取りする職種に関して派遣を
受け入れるんだから、その方法は用意されてるに決まってるだろ。

>>93
業務遂行の為に必要な手段を用意するのは受け入れ側企業の責任だ。
0095デフォルトの名無しさん2014/06/09(月) 18:05:56.71ID:+aXF6mrh
>>94
「目と手でコピペできるからネットワークもUSBメモリも要らないよね♪」
IT音痴で非合理上等な馬鹿はこの位は言いかねないって忘れちゃダメだ。
説得するより縁切るほうが幸せなんて話はいっぱい転がってるだろう。
0096デフォルトの名無しさん2014/06/09(月) 18:06:18.47ID:p1/qsVcj
最近はプログラマーを名乗っていても、ほとんど初心者というケースが多いよねえ。
ガチ有能な神レベルのプログラマーの絶対数は、今も昔も変わらんと思うけど。

有能と評価されないと、いい仕事が来ないし、取れないし。
有能な先輩はなかなか引退しない一方で、有能な後輩はどんどん入ってくるし。
これからプログラマーの仕事をしていきたいと思う若い人のほとんどは
この業界で生き残れないだろうなあ(ノ∀`)
0097デフォルトの名無しさん2014/06/09(月) 18:19:36.98ID:elouJnkO
であるならば派遣なんて雇わず直接雇用でいいのでは…
都合よく雇って、必要なくなったら切るってプログラマ業界は何か陰湿だなぁ
プログラマは派遣が多いって聞くし皆もそうだろうけど、上司に反抗したりす
ることあるんですか?
0098デフォルトの名無しさん2014/06/09(月) 18:21:23.38ID:KkJSpVoD
人間の仕事を奪うようなものを作っているから仕方ないw
0099デフォルトの名無しさん2014/06/09(月) 18:22:29.42ID:elouJnkO
>>98
とことん効率化だもんね、というかプログラマ業界っていい人いるのかな
0100デフォルトの名無しさん2014/06/09(月) 18:24:23.17ID:w3W81CeW
いつまでこのスレ荒らすの?
0101デフォルトの名無しさん2014/06/09(月) 18:25:08.81ID:elouJnkO
>>100
すまん話題変えて下さい
0102デフォルトの名無しさん2014/06/10(火) 01:22:15.85ID:hw1Ah46f
ぬるぽ
0103デフォルトの名無しさん2014/06/10(火) 02:36:18.24ID:VWf0ifMQ
げげげ
0104デフォルトの名無しさん2014/06/10(火) 03:40:20.59ID:Ilc7zK85
 
\\
\\\
\  ∧_∧
   ( ´・ω・)
   G   と) ガッ >>102
    ヽ⌒)、 \人∧__∧
      ̄ (_) >`д´)')
         ∨つ   /
0105デフォルトの名無しさん2014/06/10(火) 18:52:49.56ID:DkrpkAeK
システムエンジニアって偉そうなイメージあるけどプログラマーを
こき使う光景はあるの?
0106デフォルトの名無しさん2014/06/10(火) 19:13:43.00ID:nALxwbXP
いい加減プログラマー板へいけよ
0107デフォルトの名無しさん2014/06/10(火) 20:30:28.22ID:FNjvwEHU
なばかり園児ニアでしょ、中身は
0108デフォルトの名無しさん2014/06/21(土) 11:32:50.79ID:w6/U3+mb
言語については、ある程度わかってきたんだけど
次に進むにはどうすればいい?
0109デフォルトの名無しさん2014/06/21(土) 11:52:34.13ID:edI8EdJM
>>108
具体的に何か作る。
0110デフォルトの名無しさん2014/06/25(水) 10:52:51.25ID:VoOhbGnI
if((fp = fopen("test", "r")) ==0)
if(!(fp = fopen("test", "r")))

どっちも、オープンに失敗した時の処理なんだけど
! がついた場合、わかりづらいんだけど
どう、日本語に変換すればいい?
0111デフォルトの名無しさん2014/06/25(水) 11:02:49.63ID:HvVAb7Cz
>>110
どっちも間違いです。
空ポインタは0ではないですし、偽でもありません。
0112デフォルトの名無しさん2014/06/25(水) 12:50:41.65ID:YLjaljGa
>>111
リテラル 0 はヌルポインタをコード中に表現する唯一の方法だお。
ヌルポインタがアドレス 0 を指しているかどうかは環境依存だけどね。
0113デフォルトの名無しさん2014/06/25(水) 13:01:42.50ID:KznGqNfn
>>110
どっちも「fopenに失敗したら」ぐらいかな
!は直後にスペース入れれば、それほど分かりにくくはなくなる
0114デフォルトの名無しさん2014/06/25(水) 13:17:51.10ID:0tJulZC3
fopenはNULLを返すから、その環境のNULLと比較しないとダメなんじゃないの?w
0115デフォルトの名無しさん2014/06/25(水) 13:18:41.25ID:GQuGFHte
if(
 !(fp = fopen("test", "r"))
)
0116デフォルトの名無しさん2014/06/25(水) 13:22:31.72ID:uXTcysvc
>>112
それはC89以降限定の話。
C言語って言われたら普通はK&amp;Rを基準にすべきではないかな?
0117デフォルトの名無しさん2014/06/25(水) 13:33:28.08ID:KznGqNfn
>>114
0はNULLだよ
0118デフォルトの名無しさん2014/06/25(水) 13:53:44.07ID:+tO4zwzZ
>>116
おまえは関数プロトタイプ禁止な
0119デフォルトの名無しさん2014/06/25(水) 14:07:22.16ID:gOHbwnP9
>>116
スレ違い
0120デフォルトの名無しさん2014/06/25(水) 14:08:15.46ID:HvVAb7Cz
>>112
そういやそうだった。NULLは(void *)0であることが規定されてたね。
0121デフォルトの名無しさん2014/06/25(水) 14:16:10.04ID:9Qs+mHCL
NULL は 0 か、それとも(void*)0 か?

で激論になった思い出
0122デフォルトの名無しさん2014/06/25(水) 14:26:13.00ID:C2C/m4/J
〜 スレ違いとまで言われて 2014 夏 〜
0123デフォルトの名無しさん2014/06/25(水) 16:13:21.65ID:EItPnDF/
何いってんの?
0124デフォルトの名無しさん2014/06/25(水) 16:32:50.02ID:0tJulZC3
>>117
ヘッダファイルの#define NULLを-1に書き換えて環境すべてをビルドしてあって、
#define NULL -1のヘッダが提供されていても?w
0125デフォルトの名無しさん2014/06/25(水) 16:45:13.60ID:TXFFLWLf
マクロのNULLとは言ってない件
0126デフォルトの名無しさん2014/06/25(水) 16:45:56.55ID:gOHbwnP9
>>124
スレ違い
0127デフォルトの名無しさん2014/06/25(水) 16:46:20.52ID:KznGqNfn
>>124
それでも0はNULL
0128デフォルトの名無しさん2014/06/25(水) 16:48:25.71ID:KznGqNfn
ああ、私のレスのNULLはヌルポインタの意味ね
0129デフォルトの名無しさん2014/06/25(水) 17:10:49.06ID:GQuGFHte
げげげ
0130デフォルトの名無しさん2014/06/25(水) 17:41:27.84ID:RjkMX0qC
>>124
標準ではありえないお。
誰かが書き換えてたら、、、それは既にヌルポインタ表現ではないお。
0131デフォルトの名無しさん2014/06/25(水) 17:42:05.07ID:GI9gCNNz
世の中には↓なんていう正しくないコードが蔓延しているわけだが。
struct {
void *hoge;
...
} hoge;
memset(&hoge, 0, sizeof(hoge));
0132デフォルトの名無しさん2014/06/25(水) 17:43:41.88ID:RjkMX0qC
>>116
それはないと思うお。。。
0133デフォルトの名無しさん2014/06/25(水) 17:44:17.53ID:RjkMX0qC
>>131
それは確かに正しくないお。
0134デフォルトの名無しさん2014/06/25(水) 21:17:03.92ID:DxJgguqg
「お」の人、なにげに正確だな
0135デフォルトの名無しさん2014/06/26(木) 05:15:27.12ID:X/LxLn4n
ヌルポインタは実際の値が0で無いこともあり得るってのは比較的有名な小ネタだよね。
で、実際にヌルポインタが非0の実用されてる環境(コンパイラ)ってどの位あるんだろう?
実体がポインタになってるハンドルやIDで-1を不正値に使う事はままあるけどそれじゃなく、
Cのポインタで非0を使う(if(ptr)が非0で真ではなく定数との不一致で真になる)環境の方。

>>131
ちょっと脱線するかも知れんけど、
環境に依存してるコードは「正しくないコード」になるのだろうか?
Cの規格的に意図した動作をしないだろうコードではあるけど…
0136デフォルトの名無しさん2014/06/26(木) 06:58:43.56ID:mh/settt
失敗したらNULLを返すとマニュアルに書いてあって、
実際にreturn (NULL);とか返していて、
ヘッダファイルのどこかに#define NULL 0なんてものがあって、
それがCFLAGSで-D=-1などNULLを返さなかったときに
支障がない値に書き換えられてコンパイルされた可能性があるとして、
比較する相手をNULLではなく0とハードコードしてしまっておくのは
どうなんでしょ?とw
0137デフォルトの名無しさん2014/06/26(木) 07:36:30.45ID:u2uRfkpu
馬鹿なことをやる奴が悪いでFA
0138デフォルトの名無しさん2014/06/26(木) 07:48:39.42ID:Cm5OpuPA
>>136
NULLは予約済みの識別子なので、書きかえた場合は未定義動作になる
0139デフォルトの名無しさん2014/06/26(木) 20:50:53.40ID:e4hDCyaf
fopen()はすでにコンパイル済みだから、コンパイルオプションでNULLを0以外に変えたら
かえってNULLで比較してるほうが動かない可能性高いと思う。
0140デフォルトの名無しさん2014/06/27(金) 02:24:49.53ID:NxgNCk2R
コンパイルオプションではなくヘッダの方のNULLが0ではなかったとしたら?
GNUコンパイラ用にNULLを__nullとしてあってもそれを0以外の数字にした
ヘッダに置き換えられていて、それが使う人にも提供されていたとしたら?
0141デフォルトの名無しさん2014/06/27(金) 02:39:40.91ID:m1tFkoOq
>>140
それ単に規格に違反したC風処理系ってだけ
0142デフォルトの名無しさん2014/06/27(金) 05:29:26.66ID:jrf75mY1
というかNULLマクロを弄り回すなんてアホなことしないで、
ヌルポインタを非0の定数にしてるコンパイラ持って来た方が良い。
NULLマクロ弄り回すのは只のアホコードに過ぎないが、
ヌルポインタを非0の定数で実現するのは規格上合法なんだから。
0143デフォルトの名無しさん2014/06/27(金) 06:09:49.03ID:NxgNCk2R
NULLってstddef.hをincludeしないと使えないよね?
0144デフォルトの名無しさん2014/06/27(金) 06:12:03.95ID:NxgNCk2R
まさか、どこからともなく現れたNULLが
必ず0だと確信して使っているなんてことは無いよね?w

規格は0だと言ってるけどw
0145デフォルトの名無しさん2014/06/27(金) 08:22:35.29ID:ey7kK0Y3
NULLは0とは決まってないよ。
0はNULLだけど。
0146デフォルトの名無しさん2014/06/27(金) 08:40:30.71ID:xopfSmwp
みんなもちつつくお。
まずc faq読むところから始めようお。
微妙な文章表現の違いが、大きな意味の違いになるお。
ヌルポインタ、NULL、ソースコード上のリテラル0、アドレス0、…etc.
これらを厳密に理解してないと話がかみ合わなくなるお。
0147デフォルトの名無しさん2014/06/27(金) 13:11:43.03ID:v0p75oAp
分かってないの一人だけな気がするゾ
0148デフォルトの名無しさん2014/06/27(金) 13:51:48.32ID:i+7bsjKx
とりあえず、ヌルポ
0149デフォルトの名無しさん2014/06/27(金) 13:53:06.66ID:cRFDppSi
>>145
0と(void *)0は違うよ
0150デフォルトの名無しさん2014/06/27(金) 14:41:59.42ID:z+13KQkR
hogeでかまってもらえなくなった奴が新しい遊びに熱中してるだけ
0151デフォルトの名無しさん2014/06/27(金) 20:54:46.54ID:XxrMJ8w7
こんなの書く奴たまにいるよ
if(i==(int)NULL)
0152デフォルトの名無しさん2014/06/28(土) 00:25:04.87ID:pOZgeTQj
そんな書き方する奴もいるだろうとは思うが、たまにとか言うほど見るなら、類友状態になってるんだと思う。
0153デフォルトの名無しさん2014/06/28(土) 00:39:56.75ID:9xXyI8Cq
気づいた時点で弾けばいいだけ
0154デフォルトの名無しさん2014/06/28(土) 02:55:52.88ID:UKD/KYiN
DM○の電子書籍でDRMのガードがAPIをフックしててマルチまがいなことしてるんじゃないかと思ったんだけど
どうすりゃええの?
0155デフォルトの名無しさん2014/06/28(土) 06:21:56.82ID:8spGr7lj
>>152
1つだけNULLをキャストしても問題ない型が99にある気がするw
0156デフォルトの名無しさん2014/06/28(土) 06:22:53.35ID:8spGr7lj
あ、2つか2つ。
符号の有り無しでペアw
0157デフォルトの名無しさん2014/06/30(月) 11:52:03.92ID:nVpZ4SaX
void convert(void)
int convert(void)
int と voidの違いってなんですか?
0158デフォルトの名無しさん2014/06/30(月) 12:00:46.27ID:lJxnkRTG
戻り値があるかないか。
0159デフォルトの名無しさん2014/07/01(火) 08:47:59.26ID:aIWSKYXT
c言語とはずれて処理系の話ですいません。
gccで動的ライブラリ(libxxx.so)をリンクして実行ファイル作るとき、
コンパイラやリンカは何してるのでしょうか?
実際のリンクは実行時に行われると理解しているのですが、、、
型のチェックとかだけしてるのでしょうか?
0160デフォルトの名無しさん2014/07/01(火) 09:20:22.53ID:kPzbbcEJ
◎2chスレッド勢いランキングサイトリスト◎

★+ニュース板
・ 2NN (推薦)
・ 2chTimes
★+ニュース板新着
・ 2NN新着
・ Headline BBY
・ unker Headline
★+ニュース板その他
・ Desktop2ch
・ 記者別一覧
★全板
・ 全板縦断勢いランキング (推薦)
・ スレッドランキング総合ランキング
・ ログ速
★全板実況込み
・ 2勢 (推薦)
・ READ2CH
・ i-ikioi

※ 要タイトル名検索
※ 推奨2chブラウザ併用
0161デフォルトの名無しさん2014/07/01(火) 13:06:22.47ID:xCHeKPxQ
>>159
リンクできるかのチェックをするし、そのライブラリを使うという情報を実行ファイルにいれる。
動的リンクの場合、ライブラリの関数のアドレスが不定だから
未解決のままにしてる(リンカはなにもしない)と思ってるかもしれないけど
普通の環境だと関数コールの宛先は確定してるので、普通に?リンクしてるよ
0162デフォルトの名無しさん2014/07/01(火) 14:11:38.53ID:WdBXMFPF
接続端子みたいなのを被せるだけの簡単?なお仕事です
0163デフォルトの名無しさん2014/07/01(火) 18:08:52.69ID:ktmXStnC
void関数内で配列に何かを入力するのって
scanfでいいんですか?
0164デフォルトの名無しさん2014/07/01(火) 18:09:41.81ID:ktmXStnC
(void)から始まる関数のことです
0165デフォルトの名無しさん2014/07/01(火) 18:10:25.17ID:ktmXStnC
間違えました
void ○○(??)
0166デフォルトの名無しさん2014/07/01(火) 18:26:34.60ID:/V+CYOkD
関数の返す値がない という事と、その関数内で入力に何を使うかということが
どう関連するの?
0167デフォルトの名無しさん2014/07/01(火) 19:59:53.55ID:WdBXMFPF
やりたいことをもっと直接的に書いた方がマシ
0168デフォルトの名無しさん2014/07/01(火) 21:00:02.11ID:Jx+aGKzH
質問します

自分は最近明解c言語入門編でc言語の勉強を始めましたが、

p27のlist2−7をがうまくいきません
下が自分の参考書をみて打ち込んだプログラムですが
#include <stdio.h>

int main(void)
{
double vx,vy;

puts("2つの数を入力してください");
printf("実数vx:"); scanf_s("%1f", &amp;vx);
printf("実数vy:"); scanf_s("%1f", &amp;vy);

printf("vx+vy=%f\n", vx + vy);
printf("vx-vy=%f\n", vx - vy);
printf("vx*vy=%f\n", vx * vy);
printf("vx/vy=%f\n", vx / vy);



return(0);
}

これをデバックなしで開始して
vxに40.5を入力まではできるのですが
vyが入力できず滅茶苦茶な値がかえってきます
開発環境はvisual studio 2013 です
01691682014/07/01(火) 21:03:25.82ID:Jx+aGKzH
168です 解決しました
0170デフォルトの名無しさん2014/07/01(火) 21:18:01.53ID:XzU8UZNA
%lfか。
0171デフォルトの名無しさん2014/07/02(水) 06:23:21.82ID:f2aJiwOs
>>161
>>162
ありがとうございます
なんとなくイメージできました。
0172デフォルトの名無しさん2014/07/03(木) 00:52:06.61ID:yifSsDmR
C言語ってメモリのアドレスに書き込んだりできるけど他のプロセスのメモリに書き込んだりってできるの?
0173デフォルトの名無しさん2014/07/03(木) 00:55:09.38ID:DXaZxPH6
他のプロセスのメモリが保護されてないとき
0174デフォルトの名無しさん2014/07/03(木) 01:03:49.64ID:yifSsDmR
>>173
保護するってそういう関数があるの?
int *p =malloc
if(fork()==0){
pにアクセス
}
これってできる?
0175デフォルトの名無しさん2014/07/03(木) 01:29:24.35ID:ZQktXMZq
>>174
forkするとメモリ内容がコピーされて別々になる。
アドレスは同じになるようにページングで見せかけてる。
0176デフォルトの名無しさん2014/07/03(木) 01:39:31.64ID:yifSsDmR
>>175
ページングはよくわからないけど、プロセスごとにメモリ空間?ができるん?
アドレスの値が一緒なのに指してる先が違うってことだよね?
0177デフォルトの名無しさん2014/07/03(木) 01:48:56.03ID:dV5x+oVa
>>172
MS-DOS のような原始的な OS でもない限り、各プロセスは独自のメモリ空間を持つ
0178デフォルトの名無しさん2014/07/03(木) 02:45:28.93ID:yrFJuqwB
原始人……
0179デフォルトの名無しさん2014/07/03(木) 07:05:57.11ID:hoM7mJ8v
>>176
そう
>>177
メモリ管理ユニットの無い環境で使われるOSは今でも全プロセスで同一のメモリ空間を使う事がある
0180デフォルトの名無しさん2014/07/03(木) 07:58:10.25ID:ZQktXMZq
>>179
興味本位で聞くけど、そういうOSで今でもよく使われてるのあったら名前教えて。
PICとかAVRとかのマイコン用かな。
0181デフォルトの名無しさん2014/07/03(木) 08:07:02.97ID:ZQktXMZq
>>177
MS-DOSはセグメントでページングと同等のことしてなかった?
それともロード時にローダーが頑張ったの?
メモリ保護は当然ないと思うけど。
0182デフォルトの名無しさん2014/07/03(木) 08:47:49.99ID:hoM7mJ8v
>>180
あんま詳しく知ってるわけじゃないけど、MMU無しのμClinuxとかは今でもメンテされてるっぽい。
H8(開発停止、生産供給のみ)で使うMESってOSも確かMMU無しで、ホビー用途では流行ってた筈。
ホビーで使われてる場合は作例等がネット上で観測できるから多少はシェアが分かるけど、
業務で使われてる場合は実際に何がどの位の数で使われてるかよくわからん。

PICやAVRまでいくと規模が小さすぎる上にプログラム空間がFlashメモリ固定だったりして、
OSというよりブートローダーって呼ばれる類の小さなシステムばかりな気がする。

>>181
セグメントとEMSは別の仕組みだった気がするけど、それら含めたメモリ空間は共用って事になるんでね?
0183デフォルトの名無しさん2014/07/03(木) 08:58:11.99ID:ZQktXMZq
>>182
ありがとう。OSについて参考になった。

セグメントはリロケートしやすくする機構であって
確かに、空間を分けるってものじゃないね。
セグメントレジスタはいじり放題だし。
0184デフォルトの名無しさん2014/07/03(木) 13:39:10.99ID:b94sekO1
int series(void);
int main(void)
{
int i;
for (i = 0; i < 10; i++)
printf("%d ", series());
return 0;
}
/* これは正しくない */
int series(void)
{
int total;
total = (total + 1423) % 1422;
return total;
グローバル変数とローカル変数なんだけど
なんでエラーなのかわかりません・・・orz
0185デフォルトの名無しさん2014/07/03(木) 13:49:32.71ID:x6tWgs3u
よくみてないけど
static int total;
0186デフォルトの名無しさん2014/07/03(木) 14:40:21.54ID:M7lcZRBS
エラーの内容がないから何ともいえないが
とりあえず最後に } がいるんじゃないか
0187デフォルトの名無しさん2014/07/03(木) 15:31:36.05ID:hoM7mJ8v
初期値入れたいだろうしstatic int total=0;じゃね?
0188デフォルトの名無しさん2014/07/03(木) 15:59:19.23ID:UCpRmhSf
まぁ、staticな変数は初期値0だけどね。
0189デフォルトの名無しさん2014/07/05(土) 06:40:04.07ID:ZLTRe8Cj
>>180
tron
VxWorks
0190デフォルトの名無しさん2014/07/05(土) 09:39:23.10ID:NUdHoME9
すまん、美少女のイメージが湧かない、誰かサンプルイメージをうpしてくれ
こいつはたしかトイレにいっていたみたいhttp://blog-imgs-46.fc2.com/s/a/r/saritoma/kikitoilet.jpg
0191デフォルトの名無しさん2014/07/05(土) 09:53:44.96ID:LmLbrS1U
キキが美少女?とんちなの?
0192デフォルトの名無しさん2014/07/05(土) 13:56:41.10ID:PrOFO7gh
>>172
メモリーマップドファイルで共有する領域ならお互い読み書きできる
0193デフォルトの名無しさん2014/07/08(火) 11:31:06.66ID:Cf/IosMu
{ } 中括弧の使い方がわからないんだが・・・
どうすればいい?
0194デフォルトの名無しさん2014/07/08(火) 11:42:33.70ID:SUG27oZM
#define BEGIN {
#define END ;}
0195デフォルトの名無しさん2014/07/08(火) 11:45:11.67ID:z6eg5pPo
>>193
どう分からんのかくやしく。
0196デフォルトの名無しさん2014/07/08(火) 13:05:29.37ID:w5EkuvqN
>>193
中括弧を省いていいケースが不透明というならまだ分からなくもない

結論:省くな
0197デフォルトの名無しさん2014/07/08(火) 16:48:15.10ID:SUG27oZM
変数の範囲を切るために使いまくるわ
0198デフォルトの名無しさん2014/07/08(火) 18:39:45.73ID:/j57w1JY
>>197
単にスコープのためだけにブロック作るのって、
大抵は別関数にしたほうが読みやすい
0199デフォルトの名無しさん2014/07/08(火) 23:31:14.68ID:w5EkuvqN
do
{
// ...
}
while (...)
{
// ...
}
0200デフォルトの名無しさん2014/07/08(火) 23:46:50.82ID:qe5n8Iyp
>>199
あきらかにセミコロン漏れでエラーでしょ
0201デフォルトの名無しさん2014/07/09(水) 08:52:10.73ID:2y0ZrYim
引数が大量にある別関数
0202デフォルトの名無しさん2014/07/09(水) 09:23:46.87ID:Lo3XeDUI
中括弧(コードブロック)の使い方がわからないって事は
VBやRubyなどのコードブロックを使わない言語
やってたからだろうな。
0203デフォルトの名無しさん2014/07/09(水) 09:40:18.51ID:3VBCG+k8
>>201
密結合にしかできないんならスコープを分けるのもそれほど筋が良くなかったってこと
0204デフォルトの名無しさん2014/07/09(水) 11:39:38.46ID:2y0ZrYim
一番最初に宣言した変数のアドレスだけ別関数の引数に渡して
元関数内の変数と同じ型と順序でメンバが定義された構造体の
ポインタにそのアドレスを代入する鬼仕様
0205デフォルトの名無しさん2014/07/09(水) 22:31:57.03ID:D5g6nYoo
メモリを食うクラスを使ってる時に
deleteするタイミングを明確にする
0206デフォルトの名無しさん2014/07/09(水) 23:43:58.20ID:Fnk70cEF
>>205
Cにはクラスもdeleteもないけどな
0207デフォルトの名無しさん2014/07/10(木) 07:08:11.75ID:0vEa2fxD
OOP in C なんてマニアックな本もあるけどよくやるよって読んで思った
ポリモーフィズムや継承までやってんだぜ
要はC++が裏方でやってる事を全部書かなきゃ行けないという本だった
0208デフォルトの名無しさん2014/07/10(木) 09:20:05.65ID:7qdPhGap
>>207
組み込みではそういうのもあり
OOPを勉強したい人にもあり
実用性はグレーかな
0209デフォルトの名無しさん2014/07/10(木) 09:44:17.33ID:ih9I7QvO
組み込みだったら素直にC++使えよ。
0210デフォルトの名無しさん2014/07/10(木) 12:11:26.25ID:1VHW603R
RAIIはほしいがOOPは別に…
0211デフォルトの名無しさん2014/07/10(木) 12:33:07.80ID:dtRC2hu/
RAIIはc++じゃ無いと実現できないもんね。
OOPは…まあ、必要に応じて最小限で良い気がする。
何かOOPが目的な奴もいるからoopsって感じ。
0212デフォルトの名無しさん2014/07/10(木) 13:35:53.89ID:b/HkBDRx
>>209
最近は組み込みでもC++使えるくらいリッチな環境になってるの?
0213デフォルトの名無しさん2014/07/10(木) 14:15:32.49ID:E/oPwPCa
プリンターとか画像,映像を扱うのはC++扱うの多いと思う
0214デフォルトの名無しさん2014/07/10(木) 17:33:49.48ID:nbN7Amch
組み込みと一口に言っても色々あるからなぁ…
SRAMの無い8ビットマイコンはCもほぼ無理。
8ビットでもSRAM乗ってればCも使えるし実用になるかはともかくC++も使える。
ARMあたりになると組み込み組み込みしてる物からAndroid走るくらいのやつまであってC++は当然動く。
ていうか組み込みPCを持ってくると結構前からWindowsが動くくらいの状態だからC++が動かないわけがない。
0215デフォルトの名無しさん2014/07/10(木) 17:36:15.58ID:hqBK5Ssd
JAVA(のサブセット)が動くこともある。
だがしかし、組み込みはアセンブラかC言語が普通だね。
0216デフォルトの名無しさん2014/07/10(木) 17:47:00.79ID:ih9I7QvO
どんだけ底辺組み込みなんだろう。
今時のSBCはLinuxが載ってて当たり前だから、普通にC++使えるんだけど。
PICみたいな小容量のマイコンだってCで書くのが当たり前だし。
0217デフォルトの名無しさん2014/07/10(木) 18:10:11.86ID:ZvvgKyMx
また、どんでもくんが脳内妄想語ってくれるのかな
0218デフォルトの名無しさん2014/07/10(木) 18:24:59.00ID:nbN7Amch
組み込みって単語だけで組み込みPCクラスをまず最初に持ってくるとかすげぇなぁ…
彼の家の家電製品は時計に電灯に洗濯機から炊飯器まで、
全てLinux搭載またはマイコン非搭載で揃ってたりするのかな。頂点SEさんパネェっス
0219デフォルトの名無しさん2014/07/10(木) 20:39:54.83ID:E/oPwPCa
Linuxを使っているところは、ラウンドロビンでOKみたいなところだろ
シビアな要求あるところは、使うプロセッサを分けるとか専用回路とか
0220デフォルトの名無しさん2014/07/10(木) 20:47:58.23ID:E/oPwPCa
車には数十個ものプロセッサが使われているそうだが、
妄想君には大半がLinuxで動いていることになっているんだろう
0221デフォルトの名無しさん2014/07/10(木) 20:55:31.00ID:nbN7Amch
どの程度成功してるかは知らないが、Linuxを改造してRTOS化する方向もあるぞ
RTOSで駄目なくらいシビアな所は専用回路というかプログラマブルロジックというか
# そしてプログラマブルロジック上にソフトプロセッサが乗る、と
0222デフォルトの名無しさん2014/07/10(木) 21:09:32.99ID:E/oPwPCa
ケータイ用に非対称マルチプロセッサが出てきた時、
LinuxのRTOSがうまく使えなかったんだなぁと思ったな
0223デフォルトの名無しさん2014/07/11(金) 08:11:37.83ID:uxQKijF3
まぁ、今時の炊飯器はOS載ってても不思議じゃないけど。
それはさて、この板の住人が語る組み込みなんてそんなもんだろ。
0224デフォルトの名無しさん2014/07/11(金) 11:40:20.70ID:OHkVxFp9
クラスもテンプレートも参照も使えなくて良いから
C++で書きたいと思うことがよくある
0225デフォルトの名無しさん2014/07/11(金) 13:19:50.46ID:V7EkPFDv
C++ のクラスライブラリが用意されているのに、
意地でもCオンリーでコード組むことなら良くある
0226デフォルトの名無しさん2014/07/12(土) 20:21:28.84ID:2sG0i3qJ
ケータイやスマホのせいか、組み込みLinuxって負け組のイメージがある
0227デフォルトの名無しさん2014/07/13(日) 07:34:58.24ID:fGnnU/OX
>>226
?
0228デフォルトの名無しさん2014/07/13(日) 08:55:54.74ID:OfL9oG5/
>>226
そのスマフォのOSカーネルには linuxやFreeBSDの血が脈々と流れているというのだが‥
0229デフォルトの名無しさん2014/07/13(日) 09:11:18.87ID:170EvHlI
書き方が悪いな
その組み込みLinuxのエンジニアは負け組
0230デフォルトの名無しさん2014/07/13(日) 09:39:43.96ID:0Iul1EJe
>>229
なんで?
0231デフォルトの名無しさん2014/07/13(日) 17:46:36.86ID:j69AiKJb
スマフォとセマフォってどう違うん?
0232デフォルトの名無しさん2014/07/13(日) 18:23:56.48ID:iAOcvloy
>>231
お前程度の知能の奴にはたいして変わらん
0233デフォルトの名無しさん2014/07/13(日) 18:52:07.95ID:7y/Xcjj/
>>231
ほとんど一緒だから気にしなくていいよ
0234デフォルトの名無しさん2014/07/14(月) 01:04:15.33ID:upDk1kff
>>230
ケータイ開発の泥沼引きずってそうだから、とか。
0235デフォルトの名無しさん2014/07/14(月) 01:12:52.53ID:k3UE1OMQ
大手系あほうどりどもが誰がやっても同じものができると勘違いしたみたいだからね
生きてるだけの屍増やしまくって、あの世に送るより怖いことしたことすらわかったなかったような
0236デフォルトの名無しさん2014/07/15(火) 21:24:12.02ID:l5KdQcGw
 聞いた話ですがソートでポインタを使ったものと配列を使ったものは
速度差がないそうですが本当ですか?

だとすると現在の参考書でポインタを解説したものは速度的には
役にたたない、ということですか?
0237デフォルトの名無しさん2014/07/15(火) 23:19:53.64ID:c2LLaewH
>>236
ポインタの場合メモリは何処に確保する?
0238デフォルトの名無しさん2014/07/15(火) 23:22:48.98ID:G8cUQ8aO
>>236
ポインタの配列というパターンはどうするのというのは置いといて、
連結リストのソートのことだとすると、
最初からそのデータ構造を持っていて、
ソートが必要になるシチュエーションなんていくらでもありうる。
いちいち配列に変換したりしないよ。
0239デフォルトの名無しさん2014/07/16(水) 00:55:22.22ID:m0YcwmXR
>>236
たとえばC言語で「構造体の配列」と「構造体へのポインタの配列」について
要素の並びを変更に要する時間を比較してみると、
前者は構造体の全メンバの値をコピーしなければならないのに対して
後者はポインタの値だけをコピーすればいいから、後者の方が速い
ただし、最近は「PCの処理能力が飛躍的に向上している」から、
よほど巨大な配列でない限り、両者を性能測定しても僅かな差にしかならない

だから(両者の間には)「速度差がない」と言う人がいるのかもしれないが、
学校の演習やアルゴリズムの初歩的な学習過程のように、「まずは動く事が最重要」
という世界であれば、そういった意見も間違いではない(理由は上に書いた)
ただし>>236が社会に出て一人前のC言語プログラマを目指すのなら、
「コードの簡潔さと可読性を損なわない範囲」で論理的に速い手法、
つまりポインタを迷わず選択できる技術レベルを目指したほうがいいと思う
0240デフォルトの名無しさん2014/07/16(水) 01:35:42.22ID:Remwvl23
>226の聞いた話と言うのはそんなレベルじゃない悪寒。
0241デフォルトの名無しさん2014/07/16(水) 08:22:39.84ID:BURSNuP/
>>236
みんなが言うように、理論上一般的にはポインタの方が速いし、いかなる場合でも安定速度で動作すると思う。
でも、ボトルネックの多くはアルゴリズムになるので、同じアルゴリズムを使うなら、「事実上」優位な差は無いって事だと思う。
つまり、「速度を気にするなら、ポインタか実体か等の些細な事を気にするのではなくて、まずアルゴリズムに注力しなさい」ってことでは無いだろうか?
0242デフォルトの名無しさん2014/07/16(水) 09:22:00.35ID:b0IB8P33
>>240
軍曹のイメージが強いよね
0243デフォルトの名無しさん2014/07/16(水) 11:13:12.38ID:Bfvq8rh+
構造体のタグ名って、何のためにあるの?
0244デフォルトの名無しさん2014/07/16(水) 12:52:51.21ID:VblCYr0v
>>243
構造体を見分ける為。昔々、typedefがなかった頃からの仕様。
0245デフォルトの名無しさん2014/07/16(水) 22:50:56.69ID:i1elQGnl
構造体の定義の中で自分を指す時とか
0246デフォルトの名無しさん2014/07/18(金) 20:01:06.72ID:QuIJUfIo
タグ付きの古い書式で固定してtypedefを廃止すればコンパイル超速に出来るんじゃね
0247デフォルトの名無しさん2014/07/24(木) 11:58:13.75ID:WXYCrUOO
文字を入れ替えるだけのSWAP関数なんだが
さっぱりわからん・・・orz
0248デフォルトの名無しさん2014/07/24(木) 12:16:11.82ID:yzB7ELG1
>>247
文字を入れ替えるだけという前提が間違っているとか。
0249デフォルトの名無しさん2014/07/24(木) 13:07:02.46ID:3KospQng
UTF-8だったりしたら大事だな。
0250デフォルトの名無しさん2014/07/24(木) 13:18:09.15ID:xTQLZeLW
ましなほうじゃね
0251デフォルトの名無しさん2014/07/25(金) 08:17:52.98ID:Eg4WjsQK
マルチバイト文字列の場合だと
文字を入れ換えるのは単語を入れ換えるのと同義なんだよな
0252デフォルトの名無しさん2014/07/25(金) 09:32:56.18ID:VBJ8WzY7
for文の3重ループってどう解釈すればいい?
2重までだったら、わかるんだが・・・
0253デフォルトの名無しさん2014/07/25(金) 10:00:37.15ID:otjmOjtQ
for文の3重ループってどう解釈すればいい?
2重までだったら、わかるんだが・・・
0254デフォルトの名無しさん2014/07/25(金) 10:38:46.31ID:O+hDRTyl
forが3重にループしていると解釈すればいいと思いますが。
0255デフォルトの名無しさん2014/07/25(金) 10:54:54.59ID:nHudeAGx
>>252
2重が分かって3重が分からないってのが不思議だ。
実は、2重ループが分かってないんじゃないのか?
0256デフォルトの名無しさん2014/07/25(金) 13:04:53.03ID:nF2+mOeo
xとyで二重の場合、xy平面を1*1に区切ったセルを順番に実行していくイメージ
三重になると、x,y,zの3次元で1*1*1に区切った立方体を順番に実行していくイメージ

二重がわかるっていうのはこんな感じなのでは
0257デフォルトの名無しさん2014/07/25(金) 13:16:27.17ID:0P73N4J4
彼は二次元の住人なんだろ
0258デフォルトの名無しさん2014/07/25(金) 13:59:56.91ID:Eg4WjsQK
>>256
それはループじゃなくて配列の話だろ
0259デフォルトの名無しさん2014/07/25(金) 15:38:28.86ID:boPSLA5X
>>258
まぁ配列の処理からイメージさせるというのもありでしょ
配列から離れるなら、
・1日の中の時刻を0時0分0秒から23時59分59秒まで全て順に表示しなさい
みたいな。
0260デフォルトの名無しさん2014/07/25(金) 23:04:55.48ID:XmSzrFo7
  FOR I=0 TO 23
    FOR J=0 TO 59
      FOR K=0 TO 59
        PRINT USING "##時##分##秒": I, J, K
      NEXT K
    NEXT J
  NEXT I

これだな。
0261デフォルトの名無しさん2014/07/25(金) 23:49:42.25ID:Eg4WjsQK
CのスレなんだからCで書けばいいのに
何で敢えて他言語で
0262デフォルトの名無しさん2014/07/25(金) 23:51:12.35ID:+FatXGOZ
書き方覚えればいいと思ってる人が多いからね
0263デフォルトの名無しさん2014/07/26(土) 16:58:59.38ID:4PJmQm8H
ビット演算子って、どういう職業の人が使うの?
0264デフォルトの名無しさん2014/07/26(土) 17:00:52.26ID:8nNWA9Q8
>>263
組み込みでハードに近い人とかネットワーク屋でもプロトコル自体を
触る人とかがよく使う。
0265デフォルトの名無しさん2014/07/26(土) 17:40:39.89ID:h/TRjXuF
>>263
貧乏性でフラグはビット命!boolとかもったいない!という人達が使う
0266デフォルトの名無しさん2014/07/26(土) 17:43:05.14ID:kcCH3L9g
割り込みって言葉は知ってるんだろうに
0267デフォルトの名無しさん2014/07/26(土) 17:47:59.18ID:bPRuMmkQ
例えば、8bitのレジスタ(I/O port)があって、
そのbit0で、LEDをon:1/off:0させる

uint8_t reg = 0x00;

reg |= 0x01; // on
reg &= 0x00; // off
0268デフォルトの名無しさん2014/07/26(土) 17:55:33.87ID:+1COesfI
>>267
bit1 に別のLEDが割り当てられることも考慮すれば、
 reg &= 0xFE; // off
とすべきではなかろうか
0269デフォルトの名無しさん2014/07/26(土) 17:58:25.67ID:rsQTo023
>>263
デスクトップ屋でも
if( dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
みたいに使うだろ
0270デフォルトの名無しさん2014/07/26(土) 18:07:26.78ID:j8MnQQBx
>>263
2枚の画像を重ね合わせたり
0271デフォルトの名無しさん2014/07/26(土) 18:08:53.52ID:j8MnQQBx
まあライブラリの関数で別にいいじゃんと言われればそうかも
0272デフォルトの名無しさん2014/07/26(土) 18:14:12.39ID:+1COesfI
>>269
C言語でファイルの種類を判定するには、#include <sys/stat.h> の後
if (S_ISDIR(file_stat.st_mode))
みたいにマクロを使う(=ビット演算子は使わない)のが一般的ではなかろうか
0273デフォルトの名無しさん2014/07/26(土) 18:52:10.04ID:1dyiAST7
>>268
俺ならこうかな
reg &= ~0x01; // off
0274デフォルトの名無しさん2014/07/26(土) 19:01:02.86ID:+1COesfI
>>273
bit 0, bit 1 の代わりに bit n と考えれば、こうかな

#define BIT_ON(n) (0x01 << n)
#define BIT_OFF(n) (~(0x01 << n))

reg |= BIT_ON(0); // on
reg &= BIT_OFF(0); // off
0275デフォルトの名無しさん2014/07/26(土) 19:03:49.69ID:3Z2mmB+m
>>269
win32apiはビットでフラグもつやつがあるから、昔はビット演算は必須だったな。
0276デフォルトの名無しさん2014/07/26(土) 19:49:13.99ID:rYm6kUeY
>>275
今は違うの?
0277デフォルトの名無しさん2014/07/26(土) 19:54:01.35ID:3Z2mmB+m
>>276
今でもwin32apiを使ったらビットフラグ使わなきゃならないけど、win32apiを直接使う人は少なくなってるんじゃないの。
0278デフォルトの名無しさん2014/07/26(土) 20:58:41.09ID:1dyiAST7
>>274
念のために
#define BIT_ON(n) (0x01 << (n))
としておいた方がいいかと、
reg |= BIT_ON(x ? 0 : 1); // on
と、されてもいいように。
0279デフォルトの名無しさん2014/07/26(土) 21:33:57.48ID:gV+vyF7V
漠然とした質問になってしまうんですが、2038年問題ってありますよね。
あれはコンパイラ側の問題と捉えて良いんでしょうか?
つまり対応したコンパイラでコンパイルしなおせばそれでOKみたいな???

(実際には使ってるライブラリその他の事も含めてそんな単純には行かないであろうことは
百も承知の上でですけど^^;)
0280デフォルトの名無しさん2014/07/26(土) 21:35:03.87ID:kcCH3L9g
ブラック系がホクホクするためのネタですが
0281デフォルトの名無しさん2014/07/26(土) 21:53:00.70ID:6BQvzT2e
OSとライブラリだね。時間(時刻)を32ビットで扱ってる場合に引っかかる。
0282デフォルトの名無しさん2014/07/26(土) 22:02:05.90ID:ukF5OFL/
ビット指定の構造体じゃだめなん?
0283デフォルトの名無しさん2014/07/26(土) 22:26:57.62ID:rsQTo023
>>282
ビットフィールドの方が移植性低いぜ
0284デフォルトの名無しさん2014/07/27(日) 00:29:45.25ID:SZPTpHHg
>>279
データを32bitでストレージに保存してたら、そっちも対応しなきゃならないな。
0285デフォルトの名無しさん2014/07/27(日) 00:37:30.25ID:sZnC98lA
do {
} while(0);
の中でcontinueしたら、doに戻るんだっけ?抜けるんだっけ?
0286デフォルトの名無しさん2014/07/27(日) 04:43:23.67ID:j6qWMrth
条件判断に飛ぶ。なので、結果的に抜ける。
0287デフォルトの名無しさん2014/07/27(日) 06:13:24.92ID:wsh1VGaY
2039年の終末論はそれが元ネタなのかな
0288デフォルトの名無しさん2014/07/27(日) 09:21:06.98ID:QrNeZy3A
>>281,284
ありがとうございます。
データの方もひっかかるのか。

プログラマじゃないんで判らないんですが、これってその対策は進んでいるん
ですかね?
2000年問題みたいにまた直前になって…みたいにならなきゃ良いけど
0289デフォルトの名無しさん2014/07/27(日) 09:27:08.46ID:sZnC98lA
>>286
ありがとう。やっぱ抜けるのが正しいのか。

>>288
2038年までに32bit環境は死滅する予定になっている。
0290デフォルトの名無しさん2014/07/27(日) 09:38:49.11ID:ltjaKK05
ttp://www.openbsd.org/lyrics.html#55
0291デフォルトの名無しさん2014/07/27(日) 09:44:06.19ID:v6vapd6i
やっぱりって…
continueはループボディの最後へのジャンプなんだから当たり前。
0292デフォルトの名無しさん2014/07/27(日) 11:33:55.65ID:b6NTPR2W
>>289
20年後のことを語るより夏休みの宿題を終わらせるのが先
0293デフォルトの名無しさん2014/07/27(日) 11:49:49.95ID:wsh1VGaY
>>292
そういうこと言って問題を先送りしてるから
最後の最後に絶望的な局面を引き起こす羽目に陥るんだよ
0294デフォルトの名無しさん2014/07/27(日) 12:41:46.35ID:sZnC98lA
>>291
いや、コンパイラ新しくしたら変な動きになったんで調べてたら、
どうやら昔ビルドにつかっていたコンパイラは、continueでdoに戻って
いたようで偶然動いていたらしい、って話。
0295デフォルトの名無しさん2014/07/27(日) 14:37:50.60ID:b6NTPR2W
20年後のカレンダー・暦システムは果たして今と同じものか?
0296デフォルトの名無しさん2014/07/27(日) 14:59:16.22ID:aYnkFzcQ
左翼じみてきたなw
0297デフォルトの名無しさん2014/07/27(日) 17:15:42.39ID:v6vapd6i
多分年号は変わってるだろうな
0298デフォルトの名無しさん2014/08/03(日) 12:24:49.30ID:q8fBalr7
年の区切りがJanuaryで年度の区切りがAprilなんて頭の悪い風習を今後も維持するのか?
0299デフォルトの名無しさん2014/08/03(日) 12:30:21.56ID:ISgwalBi
俺は12月末に決算なんかしたくない
0300デフォルトの名無しさん2014/08/04(月) 23:51:39.18ID:bDxy1C2r
300
0301デフォルトの名無しさん2014/08/10(日) 21:27:50.14ID:PuOMdoMv
AOJの0509(ttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0509)
メモリ超過か時間超過のどっちかにしかできない・・・
どんな考え方したらうまくいくのだろうか

unsigned char2次元配列を平面とみなして、入力された長方形の範囲を1にしていき
最後に面積(1の数)と周長(1と0がとなり合う箇所をカウント)を計算
・・・メモリ超過

上記のメモリ確保方法ではchar型でも2値しか使わないので、
1ビットずつに意味を持たせるように変更し、カウント方法をビット操作に変更
・・・時間超過
0302デフォルトの名無しさん2014/08/10(日) 21:55:42.53ID:yCu0RZw+
>>301
コードアップ出来るんだっけ?
0303デフォルトの名無しさん2014/08/10(日) 22:13:54.20ID:PuOMdoMv
>>302
適当にID pass name入れてアカウント登録したら
問題右上の用紙に上矢印のマークからコードをアップできる
0304デフォルトの名無しさん2014/08/10(日) 22:18:33.21ID:YfIekyq6
平面じゃなくて線形だと考えると
最初は0と10000^2 の二値
シートを置く=線を切って行く
0305デフォルトの名無しさん2014/08/12(火) 00:40:58.19ID:IhypJxyz
int n;
scanf("%d",&n);
でnに数値入力後、nの値を間違って変更しないようにしたいです。
コンパイル時にワーニングが出るようなコーディングの方法は無いでしょうか?
例:コードのどこかでn++;とか書いてあると、コンパイル時にワーニング。
0306デフォルトの名無しさん2014/08/12(火) 00:58:36.73ID:l3M/GQwO
>>305
ラッパー噛ませたらどうかな?

int get_n(void)
{
 int n;
 scanf("%d",&n);
 return n;
}

int main(void)
{
 const int n = get_n();

 n++; /* コンパイルエラー */

 …
}
0307デフォルトの名無しさん2014/08/12(火) 01:20:24.64ID:IhypJxyz
>>306
なるほど、
const int n = get_val();
const int m = get_val();
のように複数の変数でも使えますね。
ありがとうございます!
0308デフォルトの名無しさん2014/08/24(日) 14:00:04.23ID:EYMdVqe7
西アフリカで、アウトブレイクした潜伏期間延長型エボラの死者・罹患者の数を散布図にし近似曲線を出してみたら
片対数グラフで直線だから既に指数関数的増加だった

2014年に、西アフリカでアウトブレイクした潜伏期間延長型エボラの死者は、2014年8月半ばで1000人。←今ココ
2014年12月上旬で1万人。
この時点で世界規模で空路シャットダウン開始、世界経済大混乱

2015年5月で10万人。
2015年9月で100万人。
この時点で、第二次世界大恐慌発生

2015年大晦日で1000万人。

ちなみに
http://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%81%AE%E8%A5%BF%E3%82%A2%E3%83%95%E3%83%AA%E3%82%AB%E3%82%A8%E3%83%9C%E3%83%A9%E5%A4%A7%E6%B5%81%E8%A1%8C
:カナダ保健省のサイトでは体内に数個のエボラウィルスエアロゾルが侵入しただけでも発症するとしている
:ハマダラカが、吸血したての人の新鮮血を媒介しているという学説が浮上している

エボラ出血熱は蚊やアブに刺されただけで感染する。

:「この地域には内戦、政府による搾取、テロが長い間続いており、それによって生まれた恐怖、貧困、猜疑心などがある。エボラは耐え難い騒音に付け加えられた一つのざわめきに過ぎない」
現地では

や る 気 は 皆 無
0309デフォルトの名無しさん2014/08/24(日) 15:09:57.13ID:9mMp1Tip
上げ
0310デフォルトの名無しさん2014/09/03(水) 01:52:54.71ID:wlvyK0qz
下のような関数内(ここではmain)で関数の宣言をするのは何か意味があるのでしょうか。

http://www.u-gakugei.ac.jp/~miyadera/LECTURE/ElecBook2/ptech152.htm
#include <stdio.h> ← 標準入出力関数の使用を宣言
main()
{
int power(int j); ← int型の引数を一つ持ちint型の値を返すpower関数の宣言
この様に関数の使用を宣言している所を宣言部と呼ぶ.
int x, y; ← 使用する変数の宣言&定義

scanf("%d", &x);
y = power(x); ← この時 xを実引数と呼ぶ.
printf("%d! = %d\n", x, y);
}

int power(int a) ← power関数の定義.この時 aを仮引数と呼ぶ.
{  以下{から}までを定義部と呼ぶ.
int dum;

if (a == 0)
dum = 1;
else
dum = power(a - 1);
return dum;
}
0311デフォルトの名無しさん2014/09/03(水) 02:31:26.56ID:nJQEVZbi
関数プロトタイプをどちらかと言えばサブルーチン側で宣言するのが今の流儀。
昔は、関数宣言は呼び出し側が勝手に行なう流儀だったのでその名残だね。
0312デフォルトの名無しさん2014/09/03(水) 02:32:30.41ID:qW20Ksi1
>>310
C は翻訳系は先読みをしない言語なので、ある関数の中で別の関数を呼び出すときには、その関数の
・引数の数と種類
・返り値
を教えてやらないといけない。ある行で知らない関数が出てくると、その先を探すとか賢いことはしないどころか(特に返り値は)勝手に決めうちする。
きめうちされたくなければ、せめて返り値はあらかじめ教えてやらないといけない。

それの例では、逆に power() の内容を記述してから main() を書く、という順序にすれば、
http://ideone.com/UPYZ16
main() の power() 呼び出し位置の時点で翻訳者は power() のこと(引数・返り値)を知っているので、main() で関数の宣言をする必要はなくなる。
まあ古いタイプの言語だ。

あと、その power() は間違っているね‥
0313デフォルトの名無しさん2014/09/03(水) 03:57:36.39ID:nJQEVZbi
何を根拠に間違っていると極め付けているんだか。
まぁ確かにpower()と言う名前がアレなのは事実だけれど。
0314デフォルトの名無しさん2014/09/03(水) 07:06:11.37ID:gbep5tPJ
>>310
そのリンク先に書いてあるぞ。
要するに、スコープ制御をしているつもりらしい。

グローバル変数とローカル変数の違いのように、
power関数をmain()の中だけで使えるようにする方法らしいが、
意味有るのか疑問。
0315デフォルトの名無しさん2014/09/03(水) 07:47:08.48ID:e01vNLZs
>>313
下の方のコラム2で
「逆に我々が関数や変数を使用する場合,その性質を良く表す名前を用いなければならない.」
とか書いてるぞw
説得力あるねえw
0316デフォルトの名無しさん2014/09/03(水) 08:25:08.73ID:qW20Ksi1
>>313
>何を根拠に間違っていると極め付けているんだか。
どんな値を食わせても1を返す関数、というのはね‥

>まぁ確かにpower()と言う名前がアレなのは事実だけれど。
まぁ、そういうことになりますか‥
0317デフォルトの名無しさん2014/09/03(水) 12:26:42.90ID:bEJrUZ0m
>>316
> どんな値を食わせても1を返す関数、というのはね‥

-1 を食わせると死ぬかもしれないよ
0318デフォルトの名無しさん2014/09/03(水) 23:44:24.36ID:pl/pTCkk
ぱうあうあー
0319デフォルトの名無しさん2014/09/05(金) 05:09:23.73ID:F0C2JJRO
>>317
なに一巡りして戻ってくるだけだよ、スタックが十分にあれば
0320デフォルトの名無しさん2014/09/05(金) 06:08:36.49ID:BiMZcw/Q
>>319
> なに一巡りして戻ってくるだけだよ

保証されてないだろ
0321デフォルトの名無しさん2014/09/05(金) 06:24:09.15ID:VwPznMIz
intの数倍単位でスタック使える環境かぁ…
IL32LLP64の環境なら可能性はあるか。

でもスタックよりは最適化に期待したいな。
0322デフォルトの名無しさん2014/09/05(金) 09:19:22.32ID:rrkBh4hY
そういう話ではない
intのoverflowやunderflowが起きた場合、結果は未定義
0323デフォルトの名無しさん2014/09/05(金) 13:29:12.22ID:yIOI1qrL
intではアンダーフローなんておきないよ
この言葉よく間違えられてるよね
0324デフォルトの名無しさん2014/09/05(金) 13:35:18.38ID:S1ZTJTiF
スタックの同志討ちのようなことは出来ないですか
0325デフォルトの名無しさん2014/09/05(金) 13:37:25.17ID:Yrvc7r6Z
ttp://www.sophia-it.com/content/underflow
ttp://www.sophia-it.com/content/overflow
0326デフォルトの名無しさん2014/09/05(金) 13:48:10.55ID:Yrvc7r6Z
>>324
言ってる意味がわからないが
スタックに積んだ値を C から捨てたいってことなら
出来ない

その値を積む前のスタック位置をポインタに格納して
後で参照するだけならまあなんとか
0327デフォルトの名無しさん2014/09/05(金) 22:37:13.24ID:F0C2JJRO
いやいや、モトローラ 6809 のようにユーザースタックとシステムスタックとの区別がある系のことだろう‥‥
そろそろそうなんてもいいころだとおもうんだけれども、知らないだけ?
0328デフォルトの名無しさん2014/09/05(金) 22:56:15.37ID:gNQZUiBs
サンダークローって強そうだな
0329デフォルトの名無しさん2014/09/05(金) 23:18:39.13ID:wyF1Tly3
>スタックの同志討ち


これのイメージがどうしても湧かない。どういう状態なんでしょ?
0330デフォルトの名無しさん2014/09/05(金) 23:22:56.48ID:OMt31a2h
コアウォーズ
0331デフォルトの名無しさん2014/09/05(金) 23:39:28.07ID:j+jLavQh
ガンダムで例えると何?
0332デフォルトの名無しさん2014/09/06(土) 00:39:27.06ID:CKGPPObU
>>324>>326>>329
スタックが伸びた結果両方が壊れるってことかな?
pushしてる側がpopしてる側の領域まで伸びればほぼ同時に壊せるけど、
同一のメモリ空間に複数のスタックが伸びていて、かつ、
スタックオーバフローで死なない環境でないと起きないね。
それこそ>>330のいうようにそういうゲームとして設計しないと。
0333デフォルトの名無しさん2014/09/06(土) 03:17:35.82ID:iAGDf1Qx
シャイなたんだっけ>サンダークロー
0334デフォルトの名無しさん2014/09/06(土) 05:34:11.03ID:VC7+V5v8
>>332
> pushしてる側がpopしてる側の領域まで伸びればほぼ同時に壊せるけど、

余計意味わからん
0335デフォルトの名無しさん2014/09/06(土) 05:45:50.15ID:CKGPPObU
>>334
一つのメモリ空間の中に2つのスタック領域を伸ばしていって、
重なった時に互いのメモリを破壊するって話じゃないのか?
0336デフォルトの名無しさん2014/09/06(土) 05:54:07.64ID:VC7+V5v8
>>335
> 一つのメモリ空間の中に2つのスタック領域を伸ばしていって、

push 側はわかるが、pop 側ってなんの話だよ
伸びる方向は知らんが、pop して領域が伸びるスタックは見たことないんだが
0337デフォルトの名無しさん2014/09/06(土) 06:00:54.82ID:CKGPPObU
>>336
伸びないけど、巻き戻ってからまた伸びるときに壊してくれるだろうが。
壊す前に壊されてる訳だが、壊されても死なない領域を先に壊してもらえれば行ける。

てか何の話だよこれ。
無意味な想定する馬鹿と無意味な想定を理解できない馬鹿と無意味な想定を解説する馬鹿の三つ巴かよ
0338デフォルトの名無しさん2014/09/06(土) 06:34:15.84ID:VC7+V5v8
>>337
お前自分でなに書いてるか理解できてないだろ w
0339デフォルトの名無しさん2014/09/06(土) 08:32:54.56ID:Df2ub+7k
86系でスタック領域を64K確保して64K以上push(動的確保含む)すればそういうことも起きるか?
0340デフォルトの名無しさん2014/09/06(土) 08:46:06.46ID:aV+yI7S3
懐かしいな64K
0341デフォルトの名無しさん2014/09/06(土) 09:37:09.04ID:1vZuEAro
むしか!
0342デフォルトの名無しさん2014/09/10(水) 11:09:32.18ID:v7+f1Xys
for (i=0;i<100;i++) {
t = 1 + (int) (100.0*rand()/(RAND_MAX+1.0));
fprintf(stdout,"%3d ",t);
}
1 + (int) の1+ってどういう意味?
0343デフォルトの名無しさん2014/09/10(水) 11:14:26.95ID:mb834HPh
1以上。
0344デフォルトの名無しさん2014/09/10(水) 12:51:27.65ID:rw0uyKlz
目の付け所が違いますな
0345デフォルトの名無しさん2014/09/10(水) 16:03:34.53ID:u9+/s+Hv
単に、1を足しただけ

(int)はキャスト演算子で、
実数型(float?, double?)をint型にキャストしている

t = 1 + (int) (100.0*rand()/(RAND_MAX+1.0));
t = (int) (100.0*rand()/(RAND_MAX+1.0)) + 1;

これらはどちらも同じ
0346デフォルトの名無しさん2014/09/10(水) 16:22:56.09ID:vXsuJ4Ob
どこのを見ていってるのか知らないけど、そんな書き方しないよ
数学と同じでカッコのほうが先
それに1足してる
0347デフォルトの名無しさん2014/09/10(水) 16:43:17.13ID:Ulwkgj4+
>>346
どこを見ていってるのか知らない
0348デフォルトの名無しさん2014/09/11(木) 23:14:36.17ID:NV7aTG5j
すみません、質問です

typedef struct _str{
unsigned char *a1;
unsigned char *a2;
unsigned char **a3;
}str;


この構造体のa3には要素数不明のデータを収めるための可変配列を扱いたく
関数内でreallocして拡張しようと思っているのですが
どうもうまく行きません。
上記構造体の型を利用してa3を可変配列として扱うにはどのように記述すればよいかサンプル作っていただけませんか?
0349デフォルトの名無しさん2014/09/11(木) 23:20:16.54ID:IX4BAtoc
うまくいかなかったソース晒さないと
0350デフォルトの名無しさん2014/09/12(金) 00:45:25.46ID:QteQedHI
マルチ乙
0351デフォルトの名無しさん2014/09/12(金) 12:08:48.90ID:isiSnCeE
うっかり最後まで読んで茶噴いたわ
0352デフォルトの名無しさん2014/09/12(金) 18:36:35.84ID:hVEI5FJ7
要素が 「unsigned char」 の可変配列 a1, a2 ができてるんなら
要素が 「unsigned char *」 の可変配列 a3 もできるべ

a3 を2次元の可変な配列にしたい ってのとは話が違う
0353デフォルトの名無しさん2014/09/12(金) 18:42:11.85ID:Vgo2cmDA
どこでまちがったかを聞いてるつもりなのかもしれないけど
結果だけ教えてと...
0354デフォルトの名無しさん2014/09/13(土) 01:33:11.72ID:bfbBE48o
マルチですし、無視で。
0355デフォルトの名無しさん2014/09/13(土) 08:24:04.07ID:88kPzlOc
http://9cguide.appspot.com/20-02.html
次のようにヘッダーファイル内で変数を宣言すると、
宣言が重複している、という意味のエラーが表示され、コンパイル出来ません。
/* sum.h */
int sum(int min,int max);
int Public;

と記述がありますが、特にエラーになりません。(gcc 4.8.1)
この説明の意図がわからずもやもやしています。
0356デフォルトの名無しさん2014/09/13(土) 08:33:22.11ID:Oas3E6zc
sum.c
 |#include "sum.h"
 |int Public;

こういう時の話じゃね?

プリプロセス処理後 sum.c は
 |int sum(inyt min, int max);
 |int Public;
 |int Public;
こうなるし
0357デフォルトの名無しさん2014/09/13(土) 08:47:45.55ID:T3cA1QiT
そのページの説明の仕方が悪いな。

複数のソースファイルで #include"sum.h"としたら変数宣言がかぶってしまうので、
次の項目にあるように、sum.hには extern 宣言で書いて、
変数宣言はどこかの *.cに1つだけ書く

ということ。
0358デフォルトの名無しさん2014/09/13(土) 09:50:14.76ID:jjt1l9X1
ヘッダーファイルの二重読み込みの防止って

#ifndef

#endif

でやるんじゃないんですか?
0359デフォルトの名無しさん2014/09/13(土) 10:02:31.64ID:T3cA1QiT
それは同じcソースに複数回インクルードされることに対する防御。
今回は、異なるcソースそれぞれでインクルードするので、
コンパイル段階ではチェックが働かなくて、リンク時に同じグローバル変数が宣言されている
というエラーになってしまうという問題。


とにかく、変数宣言とかのメモリ上の実体を確保するようなものは、cソースファイルに書いて、
各種定義とか、externによる参照だけの宣言とかはヘッダーファイルに書くようにすればいい。
0360デフォルトの名無しさん2014/09/13(土) 12:10:33.87ID:WU+mcApI
extern は要らない子!
03613552014/09/13(土) 13:19:54.11ID:Ie+IndNG
理解できました、ありがとうございます
0362デフォルトの名無しさん2014/09/14(日) 03:46:42.39ID:3gHCeW/0
RAMの初期化とスタックについて質問です。

やりたいことは、プログラムをROM上に置いて、リセットする際に(マイコンが立ち上がるとき?)
RAMの全アドレスに1を書き込み、その後0を書いて初期化します。
その後に、通常の動作開始…というような、RAMのチェックをする処理をしたいです。

いまいち分からないのですが、スタックポインタが、このRAMの末尾にあり、ここもクリアするとプログラムが暴走します。

スタックは関数を使うと使われる?らしいので、RAM初期化の処理を関数を一切使わずに書けば
RAMを一度クリアしても問題ありませんか?

いまいち説明も上手くできず伝わるかどうか…すみません
よろしくお願いします!
0363デフォルトの名無しさん2014/09/14(日) 04:11:11.83ID:yLAszdsy
push,pop使わない
0364デフォルトの名無しさん2014/09/14(日) 04:32:37.05ID:C2ULZmXF
スタートアップルーチンに間違いがあるんでは
C言語使って書いてるみたいだけど
どんな実行コードになってるかわからないことには...
0365デフォルトの名無しさん2014/09/14(日) 08:55:29.35ID:1D8XKbcv
>>362
スタック(というかRAM)を使わないで書けるならそうすればいい
書けないなら、その領域はあとでスタックの位置変えて別途行うとか
0366デフォルトの名無しさん2014/09/14(日) 10:07:59.89ID:eKNmfx5B
通常RAMチェックはスタートアップ処理(mainに入る前のアセンブラ記述)でやるもの
main関数以降でやろうとしてるのなら無理なんじゃない
変数を使うだけでスタックが使われる可能性もあるし
03673622014/09/14(日) 11:33:50.08ID:JXYHDAAR
>>363-366
回答ありがとうございます。
main関数前に行おうとしていますが、スタートアップ処理もC言語で記述してあります。
「スタックを使わないで書く」というのは、具体的にどういう内容のプログラムになっていれば
いいのか分かりません…すみません。


検索すると、似たようなことをやろうとしている東芝のPDFがヒットするのですが
「指定されたRAMエリア(スタックエリアを除く)」と書いてあります。
ttp://www.semicon.toshiba.co.jp/product/micro/pdf/sp-870-102.pdf
この「3.1 RAMメモリテスト」で、RAMの全領域を行いたいのです。

東芝のは、このtml_ramtest_cb(省略)がメイン関数起動以降に呼ばれることを
想定しているから、スタックエリアは除いてるんでしょうか?
0368デフォルトの名無しさん2014/09/14(日) 11:57:27.31ID:TOwVdV2q
>>367
最悪ローカル変数を使うだけでスタック使ってしまうから、
Cで書くならコンパイラ固有オプションで制御しないとダメ。
アセンブラで書いてしまうほうが安全だけど、楽な方選べ。

そういう処理を全領域に実行するなら領域を分割すれば良い。
スタック(やランタイム消費領域)以外をまず先にテストして、
スタック他をテスト済み領域に複製して開いたところをテスト、
終わったら複製したデータを元の領域に書き戻したら終了。
それと処理中に割り込みなどが起きないようにしておくこと。

スタックを使わない処理の中で一時的にスタックを壊しても、
スタックを使う処理に戻るまでに復元してれば(多分)大丈夫。
0369デフォルトの名無しさん2014/09/14(日) 13:45:51.38ID:C2ULZmXF
検査範囲を全RAMエリアにしてるからおかしくなってるような
関数コール分とDE退避分を除いた大きさにしてみたら
0370デフォルトの名無しさん2014/09/14(日) 21:58:28.14ID:yLAszdsy
プログラムはROMにあって全RAM初期化だろ?
スタック使わずにレジスタだけでできるだろ
Cで書こうとしたらきついけどアセンブラなら楽勝
03713622014/09/14(日) 23:01:43.23ID:JXYHDAAR
>>368
>>369
>>370
アセンブラでやるのが一番みたいですね…

問題なのは…あの言語が全く分からないことですかね
本買ってやってみます
ありがとうございます
0372デフォルトの名無しさん2014/09/15(月) 01:03:27.76ID:W9h3jF+G
>>371
アセンブラはC言語みたいに本買って勉強するものじゃない。
特定のCPUの命令セットなのだから。
ターゲットとするCPUのアセンブラ・プログラミングマニュアルみたいの
読む。
0373デフォルトの名無しさん2014/09/15(月) 01:39:03.10ID:j8xvklWY
のこぎりと金づちで家を作るみたいな楽しさはある
0374デフォルトの名無しさん2014/09/15(月) 01:58:54.24ID:J5zOsfVv
LLVM IR (中間コード)
これは、情報処理試験に出てくるような、
擬似的なアセンブラで書いてあるのだが、
これの、「8. 命令参照」を見れば、一般的な命令がわかる

ttp://www.h3.dion.ne.jp/~mu-ra/llvm/LangRefJ.html
0375デフォルトの名無しさん2014/09/15(月) 10:54:59.38ID:8dgxuMjV
もうちょいわかりやすい機械語にしてやれよ…IA-32(x86機械語)のほうがシンプルじゃねーか。
例として出すんなら適当な8bitマイコンとかを出したほうが親切なんじゃないか?
AVRだと http://avr.jp/user/ds.htm においてある AVRinst.pdf (AVR命令1式)あたりとか。
0376デフォルトの名無しさん2014/09/15(月) 11:05:57.51ID:SEthO71J
中間コードの解説(翻訳?)してるところあったんだ、日本語で
ありあとー
0377デフォルトの名無しさん2014/09/15(月) 11:56:36.98ID:tYu2DuNr
>>362
が統合開発環境(IDE)を使っているなら、パワーオンリセット後でmain関数
呼び出し前にやる処理はどこにどうやって書けとIDEのマニュアルにあるはず。
0378デフォルトの名無しさん2014/09/15(月) 13:12:05.01ID:DSRfU5He
printf関数などで使用する変換指定子って
shortやintなら%dでlongなら%ld、unsignedなら%uと決まっているけれど
ソースを書くときに%dで全て動かせてしまう
これっていうのはコンパイラが型に応じて自動的に%dを%ldや%uに変換しているという事なのだろうか
もしそうならコンパイラによってはエラーを吐いたりするのだろうか
皆はいちいち%ldや%uを使っていますか?それとも%dだけで使っていますか?
0379デフォルトの名無しさん2014/09/15(月) 13:21:29.76ID:MGTym664
エラーはでない。規則に応じて表示するだけ。
負数になのに、unsignedの出力したら負数ではなくなる。
型など見ていない。charやchar*を%dに入れてもエラーでないだろ?
0380デフォルトの名無しさん2014/09/15(月) 13:26:15.25ID:DSRfU5He
>>379
という事はきちんと%ldや%uを使わなければ目的の動作をしてくれないから直すべきですね
ありがとうございました
0381デフォルトの名無しさん2014/09/15(月) 13:27:20.40ID:j8xvklWY
printf=老害
0382デフォルトの名無しさん2014/09/15(月) 13:35:15.27ID:8BLtn4nF
printfにlong intを渡す場合も正しくは%d
%ldにする必要があるのはscanf系のほう
そこまで気にするのなら、なぜlを指定する必要があるのかをよく調べて理解したほうがよい
0383デフォルトの名無しさん2014/09/15(月) 13:39:27.55ID:8BLtn4nF
うわ、%lfと勘違い甚だしかった
long intは%ldですね
恥ずかしいので消えます
0384デフォルトの名無しさん2014/09/15(月) 13:43:17.26ID:SEthO71J
そういうのは覚えないほうがいいよ
使うときに調べればいいことだから
環境で違うこともあるし
0385デフォルトの名無しさん2014/09/15(月) 15:03:03.55ID:zXaMzUAu
アセンブラを軽く学べばCの仕様が何故そうなってるかなんとなくわかる様になる。
0386デフォルトの名無しさん2014/09/17(水) 13:53:38.12ID:UiDSvK4T
プログラムの途中に意味もなく123;のような数字だけの文が混ざっていても問題はないのでしょうか

elseを使わない条件演算子を使ってみようとしたとき、空だとエラーを起こすため数字を入れてみたのだけれども
Falseの場合、結果的に数字をただ置いているだけのような状態になると思い質問してみました
if文を使えばいいというのは分かるのですがどうしても気になります
0387デフォルトの名無しさん2014/09/17(水) 14:04:55.53ID:Lm6QDmjc
問題ないよ

A?X:1
みたいにするのなら
A&&X
でよいのでは?
0388デフォルトの名無しさん2014/09/17(水) 14:14:11.44ID:UiDSvK4T
>>387
いくつも三項演算子が続いている中で少しだけelseを使わない場合が出てきたので三項演算子のまま使いたかったんです
A&&Xは初めて見ますね。試しに使ってみようと思います
0389デフォルトの名無しさん2014/09/17(水) 14:48:14.65ID:gkW3ZjuN
return arg == 0 ? 1 : arg == 1 ? 1 : func(arg - 1) + arg;
みたいにネストするのは分かるけど、elseを使わないってのは分からんなぁ。
0390デフォルトの名無しさん2014/09/17(水) 14:53:29.51ID:Vg6vKUeu
それが意図したように動くならいいんじゃね?
他環境で同じように動く保証は無いけど。
0391デフォルトの名無しさん2014/09/17(水) 15:07:45.85ID:f/TEMlG2
>>389
if(A)funcA();else funcB();→A?funcA():funcB();
if(A)funcA();→A?funcA():0;とかA&&funcA();
って話でしょ。関数呼び出しじゃなくて代入演算式とかかも知れんけど。
0392デフォルトの名無しさん2014/09/17(水) 15:15:37.31ID:pzZaxrRp
> 他環境で同じように動く保証は無いけど。

ん?
どこか規格違反あるっけ?
0393デフォルトの名無しさん2014/09/17(水) 15:34:54.52ID:f/TEMlG2
>>392
>>390がどれに対してレスしてるのか分からないけど、
規格に適合したコードでも、規格に違反した環境なら他環境で同じように動く保証は無いな。
0394デフォルトの名無しさん2014/09/17(水) 15:44:05.05ID:pzZaxrRp
>>393
> 規格に違反した環境なら

壊れた PC で動かないから、バグだろって騒いでるクレーマーかよ w
0395デフォルトの名無しさん2014/09/17(水) 16:16:53.86ID:f/TEMlG2
「他環境」を「規格に違反した環境」と読み替えたのはほぼネタなわけだけど・・・

古いコンパイラとか、新しいけど規格準拠動作にオプションが必要なコンパイラとか
新しいけど規格に準拠出来てないコンパイラとか、規格に違反した環境は珍しくない
0396デフォルトの名無しさん2014/09/17(水) 16:21:01.61ID:pzZaxrRp
>>395
何を言いたいのかさっぱりわからんが、ごまかそうとしてることは伝わったよ
0397デフォルトの名無しさん2014/09/17(水) 17:38:32.96ID:f/TEMlG2
>>396
390≠393,395で393はネタって事なんだが、なんか勘違いしてないか?
ごまかす以前に390(と392)がどの質問を前提にしてるかも知らねぇし。
0398デフォルトの名無しさん2014/09/17(水) 17:57:47.73ID:pzZaxrRp
はいはい w
0399デフォルトの名無しさん2014/09/17(水) 18:30:04.32ID:gkW3ZjuN
>>391
なるほど、要は値が必要だから条件演算子を使うと言うことでなく、
条件分岐の為に条件演算子を使いたいと言うことか。
だったら確かに&&でいいな。
0400デフォルトの名無しさん2014/09/17(水) 22:38:48.79ID:D8rFvuft
三項と短絡評価を空数字で結びつけるとかどんなエスパーよと思たけど
いくらム板が廃れたといってもたたまたま考え方がシンクロするヤツと遭遇することもあるよね
0401デフォルトの名無しさん2014/09/17(水) 23:39:27.94ID:Lm6QDmjc
ゴルフ脳ですよ
0402デフォルトの名無しさん2014/09/18(木) 02:08:44.60ID:0oM4N5+z
ム板って廃れてたのね
最近見るようになったから知らなかったわ
0403デフォルトの名無しさん2014/09/18(木) 03:21:30.10ID:M6S1ZPsM
>>401
ですね。PerlやJavaScriptの&&や||が羨ましくなったら完全にゴルフ脳。
>>402
お題スレのJ回答をゴルフ脳の例としては駄目か?
0404デフォルトの名無しさん2014/09/18(木) 10:37:17.21ID:0oM4N5+z
>>403
ゴルフ脳の例えるところは
つまりコードの短さ(というかタイプ数)?
でいいの?
0405デフォルトの名無しさん2014/09/22(月) 16:01:44.89ID:cQyRHW/4
Cで
Static.lib
MyProg.exe
を作って両者で変数を共有したい場合は、
int i;
extern int i;
みたいにできると思いますが、
Dynamic.dll
MyProg.exe
の二つで変数を共有したい場合は、どうすれば良いのでしょうか?
0406デフォルトの名無しさん2014/09/22(月) 16:05:14.17ID:AawXWc2Z
>>405
Cにはその為の機構は用意されていないので、環境ごとに規定されている手段を採ってください。
0407デフォルトの名無しさん2014/09/22(月) 16:15:58.57ID:cQyRHW/4
>>406
レスありがとうございました。
使っているのはVS2013のC++なのですが、この場合はどういう手法が一般的でしょうか?
0408デフォルトの名無しさん2014/09/22(月) 16:52:08.75ID:AawXWc2Z
>>407
WINAPIスレへどうぞ。VisualStudioスレでもいいかもしれません。
それと、CとC++は違います。
0409デフォルトの名無しさん2014/09/22(月) 17:32:41.50ID:cQyRHW/4
>>408
では、Win32API質問箱で聞いてみます。
ありがとうございました。
0410デフォルトの名無しさん2014/09/30(火) 11:41:20.81ID:G1jPjI/p
HTTP、FTP、echo、POP、XMPPとかあるだろ?
あのメッセージ受信ってどういう仕組み?
C言語とかでいうrcv()みたいな関数で取得できるの?

rcv()関数使わない場合どうやってメッセージ受信してるの?
リクエスト投げた後

while(1){
受信される処理
}

だろうけど
どうやってるかわかる?
教えて
0411デフォルトの名無しさん2014/09/30(火) 11:47:30.10ID:G1jPjI/p
ブロッキングとかノンブロッキングはわかる
どういう風に受信されてるか教えてくれ
0412デフォルトの名無しさん2014/09/30(火) 11:54:14.45ID:G1jPjI/p
websocketとかもあるだろ?
普通のrecv()とかって1度受信したら関数終了されるが
websocketってリアルタイムでプッシュされてくるよな
あれはC言語ではどうやるの?
0413デフォルトの名無しさん2014/09/30(火) 12:29:49.57ID:LhZYdZfc
selectで待てば?
スレッドつくってblockingのrecvを繰り返してもいいとは思うけど
0414デフォルトの名無しさん2014/09/30(火) 12:58:48.91ID:SzHlhe5/
recvみたいな関数で取得できる。で終わり
0415デフォルトの名無しさん2014/09/30(火) 13:17:37.86ID:G1jPjI/p
recv()って1回受信されたら終了されるだろ
それを終了させないほうほうや関数ない?

メッセージを受信したらリアルタイムでコンソールに表示したいんだが
0416デフォルトの名無しさん2014/09/30(火) 13:29:02.86ID:onIPhOR3
recv関数の説明をよく読みませう
0417デフォルトの名無しさん2014/09/30(火) 13:30:35.89ID:G1jPjI/p
ちなみに
HTTPとかだと
リクエスト、レスポンスでrecv終了していいけど
websocketやXMPPになるとコネクションつなぎっぱなしにしとかないといちいちハンドシェイク送りなおしたり
ログイン情報を送信したり繰り返すからダメなんだよな

教えてくれ
0418デフォルトの名無しさん2014/09/30(火) 13:34:04.61ID:onIPhOR3
なにもわからないと言ってるようですが
ここじゃなくて
http://peace.2ch.net/test/read.cgi/tech/1351670708/
こちらでしょう
0419デフォルトの名無しさん2014/09/30(火) 16:25:04.34ID:wyFYrKJZ
int i, ch;
int cnt[10] = {0};
while(1){
ch = getchar();
if(ch == EOF)
break;
if(ch >= '0' && ch <= '9')
cnt[ch - '0']++;
}
puts("数字の出現回数");
for(i = 0; i < 10; i++)
printf("'%d' : %d\n", i, cnt[i]);
return 0;

cnt[ch - '0']++ の'0'ってどういう意味?
0420デフォルトの名無しさん2014/09/30(火) 16:34:50.63ID:0EgCXX22
渡って来た文字 から 文字 '0' を引くことで
'0' という文字(ASKIIコード 10進で48) を 整数値 0 に換算してる
0421デフォルトの名無しさん2014/10/01(水) 09:37:32.86ID:fbO5OI8O
if(ch >= 48 && ch <=57)
cnt[cn -48]++
ascii文字最初に勉強しないと・・・
0422デフォルトの名無しさん2014/10/01(水) 13:12:59.82ID:YGQGEKee
>>421
EBDICでも使えるコードをASCII限定にすることもなかろう。
0423デフォルトの名無しさん2014/10/01(水) 14:40:53.06ID:Rzr2pmPR
おまえら、綴りはちゃんと覚えろ
0424デフォルトの名無しさん2014/10/01(水) 16:09:38.99ID:YGQGEKee
しまった、EBCDICのCが抜けたかw
0425デフォルトの名無しさん2014/10/01(水) 20:54:08.73ID:DTMRbqd/
やっぱ読み方は「エビシディック」?
0426デフォルトの名無しさん2014/10/02(木) 02:09:49.96ID:5I2uukos
拡張ビーシーディーが呼びやすそう
EBCDIC系って複数の文字コード・コードページがあるのか
日本で使うのだけでも10以上のコードが有るとか大変だなぁ…
0427デフォルトの名無しさん2014/10/02(木) 03:08:28.10ID:8PUQe+cC
イビシディシーにイビシディケー
0428デフォルトの名無しさん2014/10/02(木) 03:49:08.89ID:tvJ4Y8j/
えびくでぃっく
0429デフォルトの名無しさん2014/10/02(木) 07:03:56.64ID:TOd/mSCB
エビシディック
0430デフォルトの名無しさん2014/10/02(木) 07:23:41.83ID:0T/Eo60x
ABCDICじゃないんだから
0431デフォルトの名無しさん2014/10/02(木) 08:18:17.81ID:skJRG6ld
>>430
やめいw
そう覚えてしまいそうw
0432デフォルトの名無しさん2014/10/02(木) 10:01:52.00ID:mcw6ATuL
えびしじみくう
0433デフォルトの名無しさん2014/10/02(木) 11:28:38.35ID:ugif+tqx
話は変わるが、strcpy()の次のような使い方は問題あるだろうか。
・ISO規格上どうか
・POSIXではどうか
・実態はどうか
--
char foo[] = "abcdefg";
strcpy(foo, foo + 1);
--
0434デフォルトの名無しさん2014/10/02(木) 11:32:23.94ID:e2TOyg/X
・ISO/POSIX/SUS
If copying takes place between objects that overlap, the behavior is undefined.
・実装
数バイトまとめてコピーするから壊れる
0435デフォルトの名無しさん2014/10/02(木) 11:41:31.69ID:bQiAsM1H
memmove
0436デフォルトの名無しさん2014/10/02(木) 11:50:21.54ID:ugif+tqx
情報THX。strcpy()もどきを自作するよ。
0437デフォルトの名無しさん2014/10/02(木) 12:22:04.09ID:VlDhCt/t
>>434
そういう文言はどこで確認できますか?
0438デフォルトの名無しさん2014/10/02(木) 12:24:21.23ID:C/EylpyV
Google先生を使いこなせない奴はこの業界向いてないよ
0439デフォルトの名無しさん2014/10/02(木) 15:32:19.26ID:VlDhCt/t
>>438
この業界の者ではないですけど、ググることにします
0440デフォルトの名無しさん2014/10/02(木) 22:04:17.07ID:TOd/mSCB
>>435
0441デフォルトの名無しさん2014/10/02(木) 22:42:09.82ID:zFpHanca
 ファイルへの書き込みに関して教えて欲しいのですが現状下記の動画のように、書き込み先のファイルへ改行のデータがない為上詰め?されてしまいます。
C言語関連のサイトを廻ってフィーリングでソース書いたのが原因なんですが、ファイル書き込みの命令分の仕様を知らず修正すら出来ないです。
手の空いてる方、例文のソースを書いては頂けないでしょうか?

↓今のソースです。
FILE *pFile;
fopen_s(&pFile, "media\\map1.txt", "w");
int y = 0;
while (y != g_stagedata.mapheight){
printf("%s\n", g_mapdata[y]);
fputs(g_mapdata[y], pFile);
y++;
}
fclose(pFile);

g_mapdata[y][x]の中身をx=9、y=5と指定して実データのある部分だけ(0も含む) 9*5のテキストファイルとして保存したい。
1111100000
1111100330
1111100000
2222222220
0000000000
0000000000

111110000
111110033
111110000
222222222
000000000

http://youtu.be/girNFDGgFes
0442デフォルトの名無しさん2014/10/02(木) 23:21:08.67ID:8PUQe+cC
エスパーすると
fputsではなくてfwriteを使い適当にfputs("");で改行を挟めばいい

ps. そのフォーマット糞ですね!
0443デフォルトの名無しさん2014/10/03(金) 00:06:48.27ID:aLVSdoSM
>>442
ありがとうございました。下記のように変えたらやりたかった通りの処理になりました。

fputs(g_mapdata[y], pFile); 
       ↓
fwrite(g_mapdata[y], sizeof(char), g_stagedata.mapwidth, pFile);
fputs("\n", pFile);
0444デフォルトの名無しさん2014/10/03(金) 01:16:55.66ID:4FWK3St4
perlのselectは指定したデータがディスクリプタにあるかってあるんですが
このデータとはなんなんでしょうか?
socketの場合では


while (1){
$ret = select($rout=$rin, undef, undef, undef);
printf("\$ret=$ret \$rout=%s,\$rin=%s\n", &amp;to_bin($rout), &amp;to_bin($rin));

if ( vec($rout, fileno(CLIENT_WAITING), 1) ){ # 新たにクライアントがやってきた
# ソケット名は毎回違う名前にする
$new_socket = "CLIENT_$client_num";
$sockaddr = accept($new_socket, CLIENT_WAITING);


っとacceptの前にあり
selectの第4引数にundefが設定されてるためブロックされています
http://x68000.q-e-d.net/~68user/net/echo-4.html
このサイトに

”もしソケットにデータがない場合はブロックされてしまいます。
つまり、データが送られてくるまで永久に他の仕事ができなくなるのです。 ”

っとあるのですがデータとはなんなでしょうか?
クライアントでconnectしたらselectが成功してちゃんと下の処理にいきました
connectはデータを送ってると考えてよろしいのでしょうか?
C言語とほぼ同様なので教えてください
perlスレが過疎ってるので
0445デフォルトの名無しさん2014/10/03(金) 01:20:17.48ID:4FWK3St4
ソケットにデータがあるっていうと

print SOCKET "Hello";
のように送信したときデータがあるというイメージなんですが
connectしただけでちゃんとブロックが解除されたので ”データが送られてる”と思うのですが
connectはデータを送ってるんですか?どういうデータなんですか?何をやっているのでしょうか?英語そのままの意味って答えじゃなく詳しく教えてください
0446デフォルトの名無しさん2014/10/03(金) 01:25:19.79ID:4FWK3St4
ノンブロッキングソケット
http://yagyo.sblo.jp/article/53346194.html

「俺の理解ではconnectではSYN送って、connect受け付けて貰えたらSYN+ACKが返ってくる。これをselectで受けるって理解なんですが違うのかなぁ…。」

こういう捕らえ方もありますがどうなんでしょうか?
なんなんでしょうか?わかりません

確かにSYNとか低レベルなことやってるかと思いました
slectはsynがくるのを待っているってことでしょうか?
connectでsynが送られ selectはSOCKETのディスクリプタを見張ってsynが来たら SYN+ACKを返えしてブロックから抜けるのようですかね?
意味不明です
詳しい人教えてください
0447デフォルトの名無しさん2014/10/03(金) 01:44:01.45ID:9LPIBUBq
http://peace.2ch.net/test/read.cgi/tech/1351670708/
こちらでやられたらどうですか
0448デフォルトの名無しさん2014/10/03(金) 04:45:30.02ID:T/kFcWDz
>>444-446
ここはCのスレで、perlはスレチ。それにperlのソケットは癖が強いので学習には向かないだろう。
>>447の言うとおりそっちのスレでやるべき。ていうか解説サイトの表現で悩むならマニュアル読め。
selectが待つのはready状態だし、acceptで得られる各クライアントとの通信用ソケットと
listenしていて接続があるとacceptでソケットを返す待ち受け用ソケットは違うソケットだ。
0449デフォルトの名無しさん2014/10/03(金) 08:49:29.68ID:uHxl1H+d
>>443
fputsって自動で改行が入らなかったっけ?
0450デフォルトの名無しさん2014/10/03(金) 09:05:25.05ID:Tegb1mus
>>449
それputs
0451デフォルトの名無しさん2014/10/03(金) 11:42:24.05ID:4FWK3St4
>>448
やはりperlだと学習に向かないんですね
足かせをつけた状態でした
CもわかるのでCでやってみようかと思います
0452デフォルトの名無しさん2014/10/03(金) 11:44:32.88ID:9LPIBUBq
わかるだけじゃ、ダメだと思いますよ
0453デフォルトの名無しさん2014/10/03(金) 12:11:06.39ID:4FWK3St4
応用情報と基本情報持っているんですが
もっていなかったときと比べて理解力が格段とあがりましたね
低レベルなことがすらすら頭に入ってきます
0454デフォルトの名無しさん2014/10/03(金) 12:26:54.71ID:9LPIBUBq
それ、日本語の説明がわかるってことでは
0455デフォルトの名無しさん2014/10/03(金) 13:04:36.73ID:ejmQU5ML
fputsは改行入らないのか
ただのputsのfp指定可能バージョンだとおもってた
0456デフォルトの名無しさん2014/10/03(金) 14:51:32.52ID:NRy6mg4v
ついでに書くと、>443のケースはfputs(g_mapdata[y], pFile); fputc('\n', pFile);で済むな。
つーか、fprintf(pFile, "%s\n", g_mapdata[y]);と書くのが一番自然だろ。JK
0457デフォルトの名無しさん2014/10/03(金) 23:17:34.98ID:U3Q3zs6y
sprintf(fmt, "%%.%ds\n", sizeof(g_mapdata[y])/sizeof(g_mapdata[y][0]));
fprintf(pFile, fmt, g_mapdata[y]);
じゃないかな
0458デフォルトの名無しさん2014/10/03(金) 23:26:11.90ID:Mb9/hYIV
fprintf(pFile, "%.*s\n", sizeof(g_mapdata[y])/sizeof(g_mapdata[y][0]), g_mapdata[y]);
0459デフォルトの名無しさん2014/10/04(土) 00:11:14.71ID:xghbT7VX
>>456
NULターミネートされてないおそれがあるし、
>>456-458
そもそも1行の文字数はmapwidth(可変)だバカ共。
g_mapdataもchar[N][M]でなくchar**かもしれんし…

質問者の理解力不安だな大丈夫かなとか思ってたが、
質問者(>>443)のほうがよっぽど応用力有るじゃねぇか!

>>449-450
putsとfputsやgetsとfgetsの関係は地味にウザいね。
意識してないと直ぐにその誤解を発症してしまいそうだ…
0460デフォルトの名無しさん2014/10/04(土) 00:33:52.94ID:Ipv5t4Ny
>>459
> g_mapdataもchar[N][M]でなくchar**かもしれんし…
!!!
0461デフォルトの名無しさん2014/10/04(土) 00:53:22.99ID:p3XX6smW
>>459
うだうだ理屈をこねずにコードを提示して味噌。
尤も、puts()とfputs()の対比にgets()とfgets()を持ち出す辺りその理屈が怪しいんだけどね。

つーことで、
>456はfprintf(pFile, "%.*s\n", g_stagedata.mapwidth, g_mapdata[y]);に訂正。
0462デフォルトの名無しさん2014/10/04(土) 02:26:56.19ID:xghbT7VX
>>461
質問者がコード出して解決宣言してるのに後からコード出しても意味ないだろ( ´Д`)=3

あと、改行文字を処理するかどうかが異なるのはgetsとfgetsの間でも同じだぞ?
getsにはそれ以上に致命的な問題が有るってだけで理屈が怪しいも何もない
読み落としの指摘が悔しかったのかも知れんが、見苦しいイチャモンつけてんじゃねえよ
0463デフォルトの名無しさん2014/10/04(土) 22:11:13.63ID:XaEcm76/
size_t型の数値をprintf()で出力するときは%uと%luのどっちの書式指定子を使うのが規格準拠?
ptrdiff_t型の数値をprintf()で出力するときはどの書式指定子を使うのが規格準拠?

あとWindows固有の型で恐れ入りますが、DWORDをprintf()で出力するときはどの書式指定子を使うべき?
0464デフォルトの名無しさん2014/10/04(土) 22:19:08.19ID:QLJXnnzH
>>463
size_t型の数値をprintf()で出力するときは%uと%luのどっちの書式指定子を使うのが規格準拠?
どっちもダメ %zu
ptrdiff_t型の数値をprintf()で出力するときはどの書式指定子を使うのが規格準拠?
%td
0465デフォルトの名無しさん2014/10/04(土) 22:37:14.00ID:XaEcm76/
>>464
レス�dクス
>463のレスで問題無いのですが(規格準拠かどうかを問うたので)、
今漏れが使っておりますVS2010はC99準拠ではなかった、orz

下記にしたがい、size_tは%Iuで表示できますた…
http://stackoverflow.com/questions/15610053/correct-printf-format-specifier-for-size-t-zu-or-iu
正しいかどうかは不明
0466デフォルトの名無しさん2014/10/04(土) 22:38:38.46ID:X8tclADN
sizeof(size_t) == sizeof(int) なら
0467デフォルトの名無しさん2014/10/04(土) 22:44:18.48ID:X8tclADN
失礼、スタックに何バイトでのるかで %u, %lu あるいは他の指定を使い分ける、という程度でいいと思うんだが
処理系によって sizeof(int), sizeof(long) とかは違うし、みるサイズだけあっておれば、警告は気にしない

やっぱりこれは古い考え方ですかね?
0468デフォルトの名無しさん2014/10/04(土) 22:49:22.26ID:XaEcm76/
いやなんか話が混沌とさせてきてしまってもうしわけありませんが
MSDNではsize_tは%Iuで良い、みたいなことが書いてある…↓
ttp://msdn.microsoft.com/ja-jp/library/tcxf1dw6(v=vs.100).aspx
>(指定する型) size_t (つまり、32 ビット プラットフォーム上では unsigned __int32、64 ビット プラットフォーム上では unsigned __int64)
>(プリフィックス) I
>(型指定子) o、u、x、または X
0469デフォルトの名無しさん2014/10/04(土) 23:15:15.37ID:wDmms0dV
大きな数を扱わなくていいなら、"%ld"にして(long) sizeof(T)でいいような。
同じ理由で、ptrdiff_tもlongにキャストしちゃえw
0470デフォルトの名無しさん2014/10/05(日) 00:14:51.83ID:FZuSwsnO
>>468
早くC99対応になれば stdint.h/inttypes.h が使えていいのにね、あ、これは size_t の話とはちょっと違うか‥C99 も細かいところまで気が利くようになってるな‥
http://seclan.dll.jp/c99d/c99d09.htm#dt19990705
0471デフォルトの名無しさん2014/10/05(日) 00:41:40.07ID:JxTc8EY1
関数の呼び出し関係を可視化するツールないですかね?
0472デフォルトの名無しさん2014/10/05(日) 00:49:31.53ID:OqPNlfLg
ど、doxigenェ、
ちなみに漏れ個人は使ったこと無い
foo()
. ↑ bar()
. ↑ main()
. ↑ baz()
. ↑ test()

みたいにテキストエディタに人力でまとめてしまうので…
0473デフォルトの名無しさん2014/10/05(日) 02:27:54.20ID:Oz9s2Q4T
要素数一万くらいの配列の中に入ってる値の種類がいくつあって、
値がそれぞれ何個ずつあるかを調べなければいけない時、
出来るだけ高速に調べるにはどうすればいい?
配列の要素の値は32bitまでの整数値として。
とりあえずハッシュ表に登録するとかやってたけどどうも遅いみたいなので、
代替案を模索中。
ネットで調べても配列のサイズを調べる方法とかばかり出てくるので手詰まり感ある
0474デフォルトの名無しさん2014/10/05(日) 02:40:54.35ID:RckF5d3d
ハッシュでいい。
別のにたとえると、例えば"国語"、"算数"、"理科"、"社会"という単語をカウントする問題と一緒だろ?
ハッシュ値でも実値でも、値が幅広いとアクセスに時間が掛かるかメモリ確保が食うから、上位何ビットをインデックスにすると決めて
(可変長の)2次元配列に格納するなどしたらいいんでは。
2次元目はstlのmapなどでも。vector(普通の配列)のほうがアクセス速いかも?
0475デフォルトの名無しさん2014/10/05(日) 02:50:21.45ID:IUlRSCDi
sort uniq しちまえ
0476デフォルトの名無しさん2014/10/05(日) 02:57:11.31ID:Oz9s2Q4T
>>474
まぁやっぱりそうなるよね。
ソートした結果を数えればマシかとも思ったけどソートのコストの方がハッシュ表より大きいし
0477デフォルトの名無しさん2014/10/05(日) 02:58:01.21ID:RckF5d3d
ハッシュテーブルは連想配列と呼ばれることもある。それはハッシュテーブルを、添え字に数字以外の文字列が利用できる配列と見なすことができるからだ。
例えば英文ドキュメントに登場する語彙の出現頻度を調べるような場合、「apple、banana……」などの具体的な単語をキーとして、それらの単語の登場回数を値に保存することができる。
キーが決まればスロット番号は一意に決まり、しかもその計算量は一定だ。
だから、データ量が膨大でもデータの挿入や参照は一定時間に収まる。これはハッシュテーブルの重要な特徴であり長所だ。
百科事典のような膨大なテキストデータを相手にするとなると話が変わってくる。
大きな百科事典に含まれる単語の種類は少なくとも数万個オーダーで、含まれる単語数は数千万オーダーとなるからだ。
http://www.atmarkit.co.jp/news/analysis/200803/24/semi.html



コラム - クラウド時代のオープンソース実践活用 | 第18回 GlusterFSはMapReduceの夢を見るか
http://www.school.ctc-g.co.jp/columns/nakai/img/column18_fig01.png
http://www.school.ctc-g.co.jp/columns/nakai/nakai18.html
0478デフォルトの名無しさん2014/10/05(日) 03:11:40.94ID:IUlRSCDi
とりあえずは並列化
sort uniq しちまえ
0479デフォルトの名無しさん2014/10/05(日) 08:46:25.45ID:c19u8fmj
要素数一万で遅いってどんな糞コードか糞PCなのか
0480デフォルトの名無しさん2014/10/05(日) 09:20:22.91ID:yZIlQjms
すんません、思いっきり初歩的かつC言語には直接関係ない…?なのかもしれませんが、
上にもあったけど「コストが高い」って具体的にはどういうこと?
0481デフォルトの名無しさん2014/10/05(日) 09:21:23.78ID:RckF5d3d
そこは自分も気になったが。万は書き間違いで兆とか億だったりとか?
0482デフォルトの名無しさん2014/10/05(日) 09:23:59.28ID:RckF5d3d
計算量が多い、計算時間が多い、計算に掛かる資源が多いなどでは?
ソートするよりカウントのほうが計算量は少ない。
0483デフォルトの名無しさん2014/10/05(日) 09:34:30.21ID:E1Bc11fm
>>473
ハッシュリストのアルゴリズムに依るんじゃないの?
32bitだとIPアドレス用の実装とかありそうだけど…
あと、ハッシュじゃなくてツリーにするって手もある。
0484デフォルトの名無しさん2014/10/05(日) 10:28:18.42ID:yZIlQjms
>>482
なるほど。そういうのが実感できるレベルではないですがw
0485デフォルトの名無しさん2014/10/05(日) 11:25:44.59ID:A5oHY/uh
オーバーヘッドといういいかたもある

コンピュータ業界においては、よく「ある処理を行うために余分に(間接的に)掛かってしまうコスト」として用いられる。
オーバーヘッド - Wikipedia
0486デフォルトの名無しさん2014/10/05(日) 11:29:06.14ID:ktqu8y2s
そのへんが気にならないなら
「本当にCを使うべきか?」
を問い直さなければならない
0487デフォルトの名無しさん2014/10/05(日) 13:53:06.76ID:gk4xRDtF
>>481
億のレベルなら DBMS の導入を、兆のレベルなら専門の業者への依頼を
検討した方がいいかも
0488デフォルトの名無しさん2014/10/05(日) 20:58:01.62ID:m5Hg2RmS
>>473
要求性能が分からないが、コムソート後にカウントでは不十分か?
http://ideone.com/UYoAfd
0489デフォルトの名無しさん2014/10/05(日) 21:10:52.92ID:RckF5d3d
手軽な量のデータだったらいいけど。
カウントする問題でソートは効率悪いだろ。
0490デフォルトの名無しさん2014/10/05(日) 22:16:10.72ID:m5Hg2RmS
1万件程度なら充分。
0491デフォルトの名無しさん2014/10/05(日) 22:30:07.24ID:in0ZDDsB
質問です。
Cでhtmlファイルを読み込んで、一行ごとにコードを配列に格納するプログラムを作りたいです。
そこで、分らないのですがhtmlファイルにおいて、改行を無視してしまえば、全てのコードを改行無しで
保存できるので、文字列検索が容易にできると思います。char s[1000000]の一つの変数でhtmlファイルのコードを格納できますよね?
ただ自分としてはこれはしたくありません。
改行があればそれまでの文をs[0][]に保存したいのです。次の文はs[1][]に保存です。
ただここでも問題が起きます。
例え改行を省いてs[][]に保存しても、s[][]全体から特定の文字列例えば「hello world」を見つけたくても

<heal>he
llo world</head>となっていると見つけられないですよね…

htmlはタグの途中の改行がなければ、URLや文章は改行があってもOkなんでしたっけ、たぶんOkだったと思います

<a=href>http://www.
yahoo.co.jp</a>
となっている場合困ります。


闇雲に改行がきたらそれまでのコードを格納するのでなく、まとまった塊で
格納したい、そういう場合どういうアイディアが必要でしょうか?1週間考えてますが分りません。
真剣に悩んでいます。
0492デフォルトの名無しさん2014/10/05(日) 22:32:30.41ID:in0ZDDsB
URLやテキスト文字は配列に跨っていない場合、配列を0から調べていけば
容易に調べられると思います。どうやればいいでしょうか?
0493デフォルトの名無しさん2014/10/05(日) 22:43:34.27ID:in0ZDDsB
もう一つ質問です。ネット接続下におけるプログラミングの場合読み込みはどういう仕組みなんでしょう?
URLからソースコードを取得する場合は一旦全てソースコードを読み込まないと
だめで、その後読み込んだソースコードから必要なコードだけ読むのか

つまり
配列まで格納される時間=ソースコードを一括読み込みする時間+読み込んだ文章から必要な場所を見つける時間
でしょうか?
0494デフォルトの名無しさん2014/10/05(日) 22:44:17.82ID:in0ZDDsB
長々とすいません…
一応これで質問は終わりです、C難しいです…
0495デフォルトの名無しさん2014/10/05(日) 22:44:40.06ID:RckF5d3d
C言語というよりも一塊の扱い方の問題だ。
「。\n」「.\n」で必ずしも分割するわけではないんだろ?
個人の好みの問題で、先に詳細な一塊の定義を決めろ。
0496デフォルトの名無しさん2014/10/05(日) 22:52:03.50ID:RckF5d3d
それはサーバー依存。このへん。

HTTP入門

Range (要求)
クライアントからサーバに対して、エンティティの一部のみを要求します。下記の例では、ページの最初の 1000バイト(0バイト目から 999バイト目)のみを要求しています。(→ Accept-Ranges、Content-Range、If-Range)
Range: bytes=0-999

http://www.tohoho-web.com/ex/http.htm
0497デフォルトの名無しさん2014/10/05(日) 23:02:00.65ID:IUlRSCDi
>>489
誤解してるようだから言っておくけど
sort uniq ってはコマンドの事よ
面倒くさいからパイプでやっちまえよとね
0498デフォルトの名無しさん2014/10/05(日) 23:55:16.59ID:in0ZDDsB
>>495
そもそも改行のコードが何なのか分らないという…
改行って\nなのか\r\nなのかどっちでしょう?
0499デフォルトの名無しさん2014/10/06(月) 00:04:58.36ID:2Y7/qfA5
>>496
仮に全部読みこまないといけないとしたら
通信アプリってのは極めて不便だと思うんですけど
技術的に全部のファイルをストリーム?に読み込まないといけない
ってのは主流なんでしょうか?
0500デフォルトの名無しさん2014/10/06(月) 00:15:26.48ID:mmoI7Dwv
すいません4年もC言語やっててハード意識したことないから未だに
ストリームが良く分りません…

HDDからファイルを読み込む場合は一旦HDDからキャッシュメモリに読み込んで
そこから必要なものを読むんでしたっけ?
つまり
HDD→キャッシュメモリ→変数に格納でしょうか?
それとも
HDD→変数に格納なんでしょうか?
0501デフォルトの名無しさん2014/10/06(月) 00:21:58.86ID:2jlCLSza
>>500
多分、君はそんなことを気にしなくて良いと思う。
裏の仕組みを知らなくとも、そこそこ目的を達することを可能とする仕組みがAPIなのだから。
0502デフォルトの名無しさん2014/10/06(月) 01:11:42.10ID:uYeRj6wn
fflush()
ストリームをフラッシュします

ストリームの出力がバッファリングされていれば、fflushは、streamへの出力をファイルに書き出します
0503デフォルトの名無しさん2014/10/06(月) 02:45:10.82ID:mmoI7Dwv
ストリームってのはHDDの事なんでしょうか?
抽象的でよくわかりません

データの流れはストリームでしょう
0504デフォルトの名無しさん2014/10/06(月) 02:46:03.14ID:7XI5AesQ
streamとはデータを、
小川に流れる水のように捉える、抽象的な概念
IN → アプリ → OUT

INがマウスやキーボード、
OUTがHDDやインターネット回線につながっていても、
それらのデバイスのことを一々考えることなく、
統一したインターフェース(API)で扱える

パイプのように、IN/OUTが別のアプリの場合もある
sort | uniq
sortコマンドの出力を、uniqコマンドへ入力する


バッファリングもライブラリが、自動的にやってくれる
例えば、4KBのデータを取得するのに、
自分で1バイトずつ、OSのシステムコールを、4,096回呼べば遅いが、

ライブラリでは、4KBの領域(バッファ)を確保して、
そこにシステムコール1回で、4KBを読み込むので速い
0505デフォルトの名無しさん2014/10/06(月) 02:48:04.76ID:mmoI7Dwv
でデータが流れる実際のデバイスはHDDと何ですか?
0506デフォルトの名無しさん2014/10/06(月) 02:51:26.04ID:mmoI7Dwv
基本的にプログラミングでデータ取得って意識しなくていいですよね…
読み込むための関数の使い方を理解すればいいだけですよね
0507デフォルトの名無しさん2014/10/06(月) 02:55:16.61ID:Ch4PY59F
ちょっとマイコンに触れてみると実感するかも
PCの感覚を引きずりすぎて視野狭窄に陥ってる
0508デフォルトの名無しさん2014/10/06(月) 02:57:16.03ID:mmoI7Dwv
パイプのように、IN/OUTが別のアプリの場合もある

↑
これが良くわかりません><

アプリってなんですか?
0509デフォルトの名無しさん2014/10/06(月) 02:59:27.77ID:mmoI7Dwv
パイプ調べました

出力を入力にするって理解でOKですか?

これが特別変わった事なんでしょうか?

出力を入力にするってのは別に機能じゃない気がします。
パイプを使わないとそれは出来ないんでしょうか?
0510デフォルトの名無しさん2014/10/06(月) 05:06:08.42ID:p+AuUJTx
>パイプのように、IN/OUTが別のアプリの場合もある

これは、まあ、元の質問のストリームとは直接関係ないね
SYSVのSTREAMSと絡めてるのかもしれないけど・・・

>出力を入力にするって理解でOKですか?

あるプロセスの出力を他のプロセスの入力にする、なら正しい
0511デフォルトの名無しさん2014/10/06(月) 08:48:26.23ID:1gK8HPOD
あるプロセスの標準出力を他のプロセスの入力として利用
0512デフォルトの名無しさん2014/10/06(月) 10:08:36.96ID:+UB/EuAd
>>491
> htmlはタグの途中の改行がなければ、URLや文章は改行があってもOkなんでしたっけ、たぶんOkだったと思います

まずは html の勉強してから、出直せ
0513デフォルトの名無しさん2014/10/06(月) 10:49:06.77ID:zwyRz3ua
「ハッカーになるならC言語よりもC++がオススメ」って言ってる人がいましたが本当ですか?
0514デフォルトの名無しさん2014/10/06(月) 10:56:53.95ID:b0YQUTHU
int i;
int n = 2;
while(++n <= 100){
i = 1;
while(i++ < n)
if(n % i == 0)
break;
if(i == n)
printf("%d\n", n);
}
素数を調べるプログラムですが、while(i++ < n)がどう比較されているか知る
にはどうすればいいですか?
あと、breakって、中括弧を飛び越えるんですか?
それとも、すぐ下のif文に移行するんですか?
0515デフォルトの名無しさん2014/10/06(月) 13:05:03.88ID:HOCpMMdl
>>513
初心者は他人のプログラムを理解する事が困難。
これを「他人に読めない難読なプログラムを書けるのが上級者」と勘違いするバカが多い。
C++は難読なプログラムを書くために特化した言語なので、その意味で正しい。
0516デフォルトの名無しさん2014/10/06(月) 13:06:28.71ID:8s8wGJbg
どう比較されてるか知るには、Cの入門書でも読めばいい
0517デフォルトの名無しさん2014/10/06(月) 14:12:10.22ID:vHZygjI0
まあ最低限、下の2つの違いを知ることから
++n <= 100
n++ <= 100
0518デフォルトの名無しさん2014/10/06(月) 20:59:58.53ID:QBK0bbMk
>>514
確認方法すらわからないなら、
そういう書き方をやめてループ内でn++としたほうが良いのでは
0519デフォルトの名無しさん2014/10/07(火) 15:34:25.37ID:Sn1Pf3Fd
独習Cのポインタやっと終わったんだけど
student = &num って
student = scanf(&num) これと同じって考えていの?
0520デフォルトの名無しさん2014/10/07(火) 16:22:46.21ID:V/SYRsK5
全然違うだろ。
0521デフォルトの名無しさん2014/10/07(火) 16:36:48.86ID:GkaJ2OdV
読んでそれなら才能無いわ
0522デフォルトの名無しさん2014/10/07(火) 20:23:47.89ID:YDi/rNhe
向いてないから市ね
0523デフォルトの名無しさん2014/10/07(火) 20:36:59.72ID:fAjgEnMH
さすがにそれはまず試せよ
0524デフォルトの名無しさん2014/10/07(火) 20:45:21.54ID:yjbYdMfc
>>513
今さら C で書け、とか何かの罰ゲームか?と思ってしまう
でも、C がわかってないと C++ の理解なんて到底無理なので、まあ、そういう意味でも正しいんじゃない?
0525デフォルトの名無しさん2014/10/07(火) 21:04:44.41ID:owddrk/g
自称ハッカーさんですか?その人
0526デフォルトの名無しさん2014/10/07(火) 21:28:58.25ID:pP8u07NL
他人に意見を聞いてるようじゃ話にならん
0527デフォルトの名無しさん2014/10/08(水) 07:52:29.64ID:MuuIgSJt
何をハックするつもりやら。
0528デフォルトの名無しさん2014/10/08(水) 23:00:35.62ID:Og2I76Af
2
0529デフォルトの名無しさん2014/10/09(木) 03:04:48.01ID:VVEBAlYn
四苦
0530デフォルトの名無しさん2014/10/09(木) 23:09:08.14ID:2XDgEafl
発掘
0531デフォルトの名無しさん2014/10/10(金) 07:35:21.09ID:SHEgCAPR
電子レンジ
0532デフォルトの名無しさん2014/10/10(金) 22:53:01.23ID:8D1iqFXW
ここで、いいのかちょっと不安だけど質問させてくれ。
Linuxで2つ以上のプログラムから同時に同じファイルに書込みしてるんだけど(一種のログファイルね)、一定時間ごとにそれをリネームしていきたいんだ。
「何時ごろのログなら○×のファイル見ればいいよね」を簡単にしたいので。

やってることはプログラムAとBとCの3つがあってAとBはfopen()してfprintf()で書いてfflush()してfclose()する。
Cはそれに加えて、シェルに"mv ファイル /mnt/usb/ファイル+日付"てな感じでmvコマンドを実行させてる。
セマフォつかって排他制御の処理してるつもりなんだけど、時々プログラムAとBがセグメンテーションフォルトで死ぬ。

知りたいのは
1)セマフォの排他制御ってプロセス違うと利かないの? もしそうならプロセス間の同期ってどう取るの?
 調べた限りではセマフォでプロセス間の同期が取れるらしいんだけど・・・
2)セグメンテーションフォルトでプロセスが死んだ時に「どこで死んだか?」を簡単に確認する方法ないの?
 今はprintf()つかって延々とコンソールに出力させてるけど・・・死ななかったプロセスが吐くメッセージで流れちゃうんだ・・・

Linux初めてだし普段はお手軽C#だしでわからんことばかりで泣きそうだよ・・・
0533デフォルトの名無しさん2014/10/10(金) 23:06:23.51ID:yXhPCI1a
MONOつかお
0534デフォルトの名無しさん2014/10/10(金) 23:06:28.23ID:rDsUmESc
-g付きでビルドして
コア吐いたら
gdb起動して
where
0535デフォルトの名無しさん2014/10/10(金) 23:30:32.96ID:8D1iqFXW
>>534
gdb・・・便利そうだね。ありがとう!

>>533
うん、最終的にはARMなマイコンボードなんだけど、Monoなんて便利なものはないのよ・・・
0536デフォルトの名無しさん2014/10/10(金) 23:45:57.80ID:ss+6Y4Pm
mvが単独で走るからでは
0537デフォルトの名無しさん2014/10/11(土) 00:44:25.61ID:ECYlWM78
定期的にvcsに突っ込めばいいじゃん
0538デフォルトの名無しさん2014/10/11(土) 00:54:52.23ID:HUJ0Phfw
>>532
flockでいいじゃんw
0539デフォルトの名無しさん2014/10/11(土) 03:35:48.01ID:sPjWQ1kB
>>532
1)
「セマフォ」ってのは使い方の話で、実装は複数(SystemVセマフォ、POSIXセマフォ等)存在する。
実装によってはプロセス跨げないとされていることも有るし、
プロセス跨げるセマフォでもプロセスごとに違うセマフォを作ったり使い方間違えたら意味ないし。
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/semctl.2.html
http://linuxjm.sourceforge.jp/html/glibc-linuxthreads/man3/sem_post.3.html
# glibc-linuxthreadsを見るとPOSIXセマフォはプロセス跨げないとか書いてあるけど、
# 解説によっては名前付きと共有メモリ上の名前なしはプロセス跨げるとしてるものもある。
2)
デバッガ使う、SIGSEGVなどを監視、プロセス間で(プロセス間通信やkillなどで)相互に監視。
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/sigaction.2.html
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/kill.2.html
0540デフォルトの名無しさん2014/10/11(土) 07:39:16.61ID:tt02nUiX
>>532
専用のプロセスを作って、ログを出力するのをお任せするのがいいとおもうよ
0541デフォルトの名無しさん2014/10/11(土) 07:40:07.21ID:tt02nUiX
>>538
ファイルロックという意味なら、ファイルロックはすりぬけることがある
0542デフォルトの名無しさん2014/10/11(土) 08:37:27.05ID:EI+5SH8R
うわ、絶対にすり抜けないファイルロックを作れない(略
0543デフォルトの名無しさん2014/10/11(土) 09:19:38.90ID:Ym4Peb6E
>>532
1) について
・semget システムコールで生成する System V セマフォであれば、プロセス間の同期/排他制御を実装できる
・(Linux を含む)UNIX で利用できるセマフォには、System V セマフォの他にも
 POSIX スレッド間の同期/排他制御を実現する POSIX セマフォがある
 今回のケースはプロセス(=プログラム)を対象としているから、System V セマフォを使用する
・ただしセマフォは(オーバヘッドは小さいが)制御の難しい低水準操作であり、一般には(オーバヘッドを嫌う)
 System V 共用メモリ への操作に対する同期/排他制御を目的として利用する
 今回のケースのようなファイルへの操作に対する同期/排他制御が目的ならば、一般には(使い方の簡単さの順に)
 ファイルロック、FIFO(名前付きパイプ)、UNIXドメインソケット、System V メッセージ等から選んで使う
・ただし残念ながら今回のケースではプログラムCから起動するシェルプログラムもファイルを操作しているから、
 (flock システムコールを前提とする)ファイルロックは採用できない
 あるいはプログラムCで(シェルを介さず)ローテート処理を(C言語で)実装できるのなら、ファイルロックが最も楽
・もし将来的にログ機能を拡張する構想があるのなら、プログラムAとBをクライアント、プログラムCをログサーバと
 見立て、その間を FIFO または UNIXドメインソケット で結ぶ設計も検討するのが望ましいだろう
2) については >>534 の方法で解決できたはず

あと、ここら辺はUNIXシステムプログラミング全般に関わる話題だから、以下のスレでの質問が適切だと思われ
・UNIXプログラミング質問すれ Part10
  http://peace.2ch.net/test/read.cgi/tech/1303113996/

>>539
上で示したように、System V セマフォと POSIX セマフォは、(セマフォという概念は同じだけど)全く別の操作だ
両者の違いを正しく理解していれば、「実装によっては....」みたいに混乱することはない

>>541
もしプログラム(=プロセス)間のファイルロックが本当にすりぬけているなら、それはOS(Linux)のバグだ
>>539 と同様に、UNIXシステムプログラミングの理解が不十分だと思われ
0544デフォルトの名無しさん2014/10/11(土) 09:23:42.92ID:zm2pT6ST
>>532
同じファイルじゃないと駄目なのか?
プロセス毎に出したログを後でマージするツール作った方が簡単だと思うが
0545デフォルトの名無しさん2014/10/11(土) 09:45:22.02ID:sPjWQ1kB
>>543
「LinuxThreadsによるPOSIXセマフォの実装はプロセス間共有セマフォをサポートしていない」
って事らしいから、規格の違いだけ参照しても駄目だし実装による違いも参照しないと駄目じゃね?
概念、規格、実装が違うのは当然だが、最終的にモノを言う(言ってしまう)のは実装なわけで…

LinuxThreadsにおけるPOSIXセマフォ。プロセス間共有セマフォはサポート外
http://linuxjm.sourceforge.jp/html/glibc-linuxthreads/man3/sem_init.3.html
NPTLにおけるPOSIXセマフォ。共有メモリ上または名前付きならばプロセス間共有セマフォとして利用可能
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/sem_init.3.html
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/sem_overview.7.html
0546デフォルトの名無しさん2014/10/11(土) 10:05:41.14ID:Ym4Peb6E
>>545
基本的に POSIX セマフォはプロセス間で用いるものだよ
中には(NPTL のように)プロセス間で利用できるよう拡張された実装もあるけど、それは例外的な存在でしかない
一部の例外を取り上げて、それをもって POSIX スレッド全体の定義であるかのように扱うのは、
UNIXシステムプログラミングの理解が不十分であると言わざるを得ない

ましてや今回のケースは同期/排他制御の対象がプロセス間(=プログラム間)であると>>532に明記されているのだから、
これを実現するのには単純でAPI仕様/実装仕様、共に安定している System V セマフォで十分に対応できる
これを、わざわざ難しい POSIX セマフォと絡めようとする発想は、単なる知識自慢をしたいだけに見えてしまう
0547デフォルトの名無しさん2014/10/11(土) 10:07:07.88ID:Ym4Peb6E
いきなり >>546 の冒頭を間違えていたから、訂正する
X: 基本的に POSIX セマフォはプロセス間で用いるものだよ
O: 基本的に POSIX セマフォは POSIX スレッド間で用いるものだよ
0548デフォルトの名無しさん2014/10/11(土) 14:09:36.89ID:fBQFLqt8
>>532>>535
A,Bそれぞれは別のファイルに出力しておいて、
Cでマージするのがいいと思う。
ArmのSBCなら、どうせメインはRamDiskでしょ。
コンソールにログが流れて困るなら、それもやはり
ファイルに落とせばいいと思うし、その方が速い。
0549デフォルトの名無しさん2014/10/11(土) 14:43:19.87ID:sPjWQ1kB
>>546-547
じゃあsem_initの第二引数psharedはなんの為にあるっていうんですかー!
ていうか『「実装によっては....」みたいに混乱』してたり『一部の例外を取り上げて』るのは君自身じゃない?
POSIXセマフォはpsharedが有ることから分かるようにプロセス間も想定してるのに、
LinuxThreadsという実装に依存した制限をPOSIXセマフォ全体に適用しちゃってるじゃん。
古いPOSIXでsem_initにpsharedがなかったとかなら謝るけど、現在は存在してるわけで。

539で規格と実装をまとめて実装として区別したのは手抜きだったけど、
実装によっては駄目って話は規格関係ないしなんでそう噛み付くんだよ。
規格は規格で、実装は(規格の一部を含むだけの)実装。
一つの規格には複数の実装がありうるし、実装だけ見て規格覚えた気になったら駄目だよ。
0550デフォルトの名無しさん2014/10/11(土) 15:19:41.96ID:1rMRyQrh
>>532
セマフォ(共有メモリ)で排他制御するなら、関係ない話になるけど。
予備知識として、ソケットを使う方法があることは覚えておくといい。

例えば、クライアントの接続を同時に1つしか許さないサーバを用意し、
サーバへの接続に成功したクライアントが実行権を得るという感じ。
この実装は、本来ネットワーク上でクラスタを構成する複数のPC間のプロセスで
排他制御を実現するためのもので、サーバプロセスが別途必要になるなど、
仕組みがやや複雑になるけど。同じPC内のプロセス間の排他制御でも
利用できる汎用的な実装方法ではある。

興味があれば CORBA とかでググッてみてちょうだいな。
0551デフォルトの名無しさん2014/10/11(土) 15:38:34.99ID:Ym4Peb6E
>>549
そこまで>>549がプロセス間の同期/排他制御にも POSIX セマフォを使いたいのなら、
>>549 は POSIX セマフォを何の疑いも無く使い続けていればいいんじゃないかな?
(スレッド間ではなく)プロセス間で POSIX セマフォを使った場合に起こる問題については
以下で解説されているので、もしその気になったなら読めばいいと思うよ
・unix - Differences between System V and Posix semaphores - Stack Overflow
  http://stackoverflow.com/questions/368322/differences-between-system-v-and-posix-semaphores
問題に触れているのは、11番の "Two major problems with POSIX shared/named semaphores" で始まるレスだ

というか、>>543の後半で書いたように、今回のファイルの排他制御という質問(>>532)に対して、
セマフォを使うという発想そのものが「UNIX では」不適切である可能性が高い
質問者である >>532 には「セマフォは一時置いといて、代わりにファイルロック/FIFO/ソケットを使う検討に
着手した方が、期待した最終的なゴールへより早く辿り着けるはずだ」と伝えたい

Windows であればファイルオブジェクトの排他制御にセマフォを使うのは常識だし、
それどころかプロセスは重いからありとあらゆる並行処理にスレッドを使う
それに対して UNIX だとプロセスは比較的軽いので、メモリ保護され実装も容易なプロセスが多用される
ここら辺の差異は、Windows プログラマが UNIX プログラミングを始めた時、最初にとまどう箇所になる
(逆に UNIX プログラマはありとあらゆる並行処理にスレッドを使わざるをえない Windows にとまどう....)
>>532 は UNIX の IPC(プロセス間通信)技術について一通り勉強しておいたほうが、今後の役に立つと思う
0552デフォルトの名無しさん2014/10/11(土) 15:48:54.72ID:eXZJM+rZ
それこそ知識自慢したいようにしか見えない
0553デフォルトの名無しさん2014/10/11(土) 16:17:59.56ID:sPjWQ1kB
>>551
使いたいって言ってるわけじゃなくて君が変なコト言うから反論しただけなんだけど。
まぁ自分のミスを訂正出来ずに話逸らしてく人みたいだからここらでやめとくよ。
あとその11は番号じゃなくて投票数だよ。その質問は現段階で4回答しか付いてない。

>>552
人のこと言いたくなかったけどこれはさすがに鏡見ろだねぇ…
0554デフォルトの名無しさん2014/10/11(土) 16:45:07.63ID:yyExjOMx
>>551 は自慢というというより、UNIXでは常識というか普通のことだろうね
初心者は、flock(BSD系システムではlockf?)が割と使いやすいと思うけど、
まあいずれにしてもよく勉強しないと落とし穴に落ちるね
0555デフォルトの名無しさん2014/10/11(土) 17:42:58.72ID:Ym4Peb6E
>>553
どこが「変なコト」なのかな?
「スレッド間の同期/排他制御には POSIX セマフォを、プロセス間であれば System V セマフォを使う 」という
UNIXシステムプログラミングにおける当たり前(>>554 が言うところの「常識」)の話をしているつもりなんだけどな....
で、>>539 が「POSIX セマフォとSystem V セマフォは実装によりけり」みたいな質問者を惑わせる
「変なコト」を言っているから、間違っているよと >>534 で指摘しただけだよ

もしこれを間違っていることにしたいのなら、言い換えると:
 「実装されているプラットフォームであれば、
  プロセス間の同期/排他制御に POSIX セマフォを使っても何ら問題は無い」、
つまり:
 「( >>551 で示した)Stack Overflow のレスで指摘されている話は、つまらない些細な問題だ」
と言いたいのなら、その根拠を説明しなさい

ただし、>>549 にあるような:
 「じゃあsem_initの第二引数psharedはなんの為にあるっていうんですかー!」
などという、プログラミングの経験が浅い人にありがちな「変なコト」を根拠にするのは勘弁願いたい

さて「変なコト」を言ってるのは私かな?君かな?
それとも捨て台詞を吐いて逃げ出すのかな?
0556デフォルトの名無しさん2014/10/11(土) 18:17:21.15ID:Ym4Peb6E
アンカミスを訂正
X: 「変なコト」を言っているから、間違っているよと >>534 で指摘しただけだよ
O: 「変なコト」を言っているから、間違っているよと >>543 で指摘しただけだよ
0557デフォルトの名無しさん2014/10/11(土) 21:32:29.18ID:eXZJM+rZ
ワロタ
煽りながら常識披露できてめっちゃ楽しそうだな
0558デフォルトの名無しさん2014/10/12(日) 09:51:55.27ID:Go8QnHIo
プログラムで輪唱みたいなことできる?
0559デフォルトの名無しさん2014/10/12(日) 13:36:12.08ID:MraGD/gc
輪唱みたいなってなにを想像してるのかもう少し具体的に
音を出したいの?
複数行に文字列を順次書き出したいの?
0560片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/10/12(日) 14:12:50.56ID:Km5KyqRm
>>558
DirectSound
0561デフォルトの名無しさん2014/10/12(日) 16:51:07.20ID:rjvOL7n3
>>549
質問している立場で、回答(した人)に対して批判するのは、内容の真偽関係なしに人間としてどうかと思うぞ。
2chだからって言えばそれまでだが。
0562ID:8D1iqFXW2014/10/12(日) 19:10:59.00ID:GvvJyYY5
金曜日の夜に「セマフォが〜!」「セグメントフォルトが〜!」で質問させてもらったLinux初心者です。
皆さんの書き込み参考にさせていただき、無事にセグメントフォルトの発生位置と原因がつかめましたし、対策もとれました。
ありがとうございます。

あとmvの実行時間が長くなる(遅いUSBメモリに大きいファイルを移動させようとする)と動作がおかしくなることがあったので「プログラムCに共有メモリ経由でAとBからログを受け取ってファイルへ書く」にしました。
mv実行中にすっとセマフォロックしてるのが良くなかったようです。

セグメントフォルトの原因は単純で、「semopしないでファイルに書く」というルートがあったことでした。
gdbつかって死んだところから逆に辿って見つけるまで1分。
対策に1時間、テストに1日・・・そんなものですよね。
0563デフォルトの名無しさん2014/10/12(日) 21:12:51.88ID:6uS4rjzC
初心者です
解読ができなくて困ってます
ユークリッドの互除法で最大公約数を求めるプログラムについてなんですが
ttp://edu.clipper.co.jp/pg-2-44.html
このサイトに載ってる一番上のプログラム

while( 1 ) {
printf( "2つの自然数を指定してください : " );
if( scanf( "%d, %d", &a, &b ) != 2 ) break;
if( a < b ) { temp = a; a = b; b = temp; }
if( b < 1 ) continue;

この部分がよくわかりません
特にこれです
if( scanf( "%d, %d", &a, &b ) != 2 ) break;
入力した値が2じゃなかったらbreak???
0564デフォルトの名無しさん2014/10/12(日) 21:29:23.64ID:dA3B6w3o
scanfをggrks
0565デフォルトの名無しさん2014/10/13(月) 01:38:53.49ID:7Ey1xXE1
>>561
回答に対してケチつけたのはID:sPjWQ1kBじゃなくてID:Ym4Peb6Eだよ。
しかもケチの内容がスッカスカ(後から探したかのよう)というダメっぷり。

>>555
>>543では「POSIXプロセス間共有セマフォに問題がある」というよりは
「POSIXにはプロセス間共有セマフォが存在しない」と言ってるように見えるけれど、
結局規格としてプロセス間共有セマフォはNPTLの独自拡張ではなくPOSIXに含まれるんだろ?
規格ではなく常識というなら、常識を説明すべき時に常識を前提にしたらそりゃ駄目に決まってるだろう。

ていうか「POSIXセマフォがプロセス間共有出来るかどうかが実装依存である」って何か間違ってるのか?
「POSIXセマフォは問題があるからプロセス間共有出来ても使いものにならない」とは独立した問題だろう。
0566デフォルトの名無しさん2014/10/13(月) 01:46:26.05ID:nOZ2kIxv
>>565
間違ってたら申し訳ないんだが、ちょっと前にSVNスレでも持論を強く主張してなかった?
いや、確証がある訳じゃないんだが、その経験の無さそうな正義のかざし方が似てる奴がいた
0567デフォルトの名無しさん2014/10/15(水) 10:58:05.04ID:xcRZRwdi
>>563
printf/scanf は一字一句、隅々まで理解しておかないと血反吐を吐くハメになるべ
0568デフォルトの名無しさん2014/10/15(水) 12:54:47.70ID:1vGsBe5N
printf で、血ヘドはないなあ
scanf は使わない、sscanf で十分だし
0569デフォルトの名無しさん2014/10/15(水) 13:05:50.81ID:3rwOGNYw
void debugPrint(msg, ...)
{
va_list arg;
va_start(arg, msg);
vfprintf(stderr, msg, arg);
va_end(arg);
}
みたいな関数があって、debugPrint("100%Success.")
みたいな呼び出しがあったら、泣きたくなるよ。
0570デフォルトの名無しさん2014/10/15(水) 13:25:14.58ID:Cjeb6OKm
あっそ
0571デフォルトの名無しさん2014/10/15(水) 13:31:12.44ID:7y/wTrfK
なんで?泣く?
0572デフォルトの名無しさん2014/10/15(水) 13:35:08.84ID:jmswbhAi
stderr へ 100の後にわけのわからん文字表示しつづけるか
不正アクセスで止まるか
比較的再現性はありそうな雰囲気なので、問題を起こしている箇所への到達は容易な部類だろう
0573デフォルトの名無しさん2014/10/15(水) 13:54:55.29ID:3rwOGNYw
それが、現在稼働中の装置のコードだって言うから始末に負えない。
運よくだか運悪くだか、、不正アクセスも起きてないときたもんだ。
エラー出力だから、余計な文字列には誰も注意していないようだし。
0574デフォルトの名無しさん2014/10/15(水) 14:14:34.41ID:7y/wTrfK
え、どこがまちがってるの?
0575デフォルトの名無しさん2014/10/15(水) 14:56:40.48ID:rAzJU0Y5
%Sか
まいっちゃうね
0576デフォルトの名無しさん2014/10/15(水) 15:03:11.86ID:7y/wTrfK
あ、
%%
ね
0577デフォルトの名無しさん2014/10/15(水) 15:06:21.23ID:7y/wTrfK
なるほど、それで、printfをputsに置き換えるのか
0578デフォルトの名無しさん2014/10/15(水) 16:06:17.44ID:udSSsoWi
>>573
単体テストをサボってるだけだろ
0579デフォルトの名無しさん2014/10/15(水) 16:23:19.23ID:jmswbhAi
運よく文字列終端の \0 があって良かったな という感想
0580デフォルトの名無しさん2014/10/15(水) 22:26:03.06ID:4i0Tnykz
この間違いする奴が多いので
ツール作って機械的にチェックできるようにしてる
0581デフォルトの名無しさん2014/10/15(水) 22:29:47.27ID:pKMiCDBS
printfとputsってどっちがいいんですか
0582デフォルトの名無しさん2014/10/15(水) 22:34:45.42ID:8kF5M8Gq
すでにある文字列を改行付きで出力するならputs
0583デフォルトの名無しさん2014/10/16(木) 10:43:00.93ID:cFrAjR7p
桁数が多い数に関して、それぞれの桁を配列に格納して表そうと思っています。
ただ標準入力した10進数の数を2進数で格納したいです。
この場合、一旦10進数のまま格納して、2で割っていく作業をしないとダメでしょうか?
例えば、100桁の数だと、2進数に直すには、2で割るごとに桁が1桁減るとしたら
100*99/2=4500回くらい必要になると思います。もっと楽な方法で2進数に直す方法
はありますか?
0584デフォルトの名無しさん2014/10/16(木) 10:47:35.87ID:cFrAjR7p
int a[10];として

数字を1234567890とします。

2で割って61567345→3323424→153421→.....
とするしかないでしょうか?
もっと早い方法があれば教えて頂きたいです。
0585デフォルトの名無しさん2014/10/16(木) 10:50:18.18ID:3ZkfeltT
「配列格納してる2進数」の四則演算を実装しといて
入力文字を1文字づつ解析しつつ演算すりゃ良いんじゃないの?

(big-int の実装はどこかに転がってると思うが)
0586デフォルトの名無しさん2014/10/16(木) 10:53:13.81ID:RsSLEFk6
GMPでおk
0587デフォルトの名無しさん2014/10/16(木) 10:53:29.02ID:cFrAjR7p
>>585
1文字づつじゃ無理です…
全部読みこんでからじゃないと
2で割った余りと商が必要ですから
0588デフォルトの名無しさん2014/10/16(木) 11:02:15.72ID:3ZkfeltT
文字列 "1234567890" から
2進配列化した大きい桁対応整数に格納するんじゃなく

整数変数で格納されてる値 1234567890 を
2進配列化した大きい桁対応整数へ変換したいの?
0589デフォルトの名無しさん2014/10/16(木) 11:03:56.37ID:cFrAjR7p
>>588
後者ですね

int x[10]=1234567890

int y[10]=1010101011101010

としたいです。
計算量を大幅に減らしてこの変換は可能でしょうか?
0590デフォルトの名無しさん2014/10/16(木) 11:11:24.19ID:3ZkfeltT
その例なら文字列とほぼ同義じゃん
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; ってことだろ?
配列の先頭から1要素づつ抜き出して処理すりゃよいんだし
0591デフォルトの名無しさん2014/10/16(木) 11:15:16.75ID:cFrAjR7p
16進だと1要素づつ抜き出して4要素分に配分できますが
10進の場合だと余っちゃって次の要素に渡さないとだめじゃないですか…
なので1要素づつ無理だと思うんですけど…
0592デフォルトの名無しさん2014/10/16(木) 11:40:17.39ID:u68giTnd
配列について、わからない所があるんですが
int num[5] = {1.2.3.4.-1}
while(-1 != num[i])
この-1は、0 なのか?NULLなのか?
説明が下手ですいません・・・
0593デフォルトの名無しさん2014/10/16(木) 12:38:19.17ID:x487PEXW
>この-1は、0 なのか?NULLなのか?
-1は-1だよ。0でもNULLでもない。
0594デフォルトの名無しさん2014/10/16(木) 12:42:23.97ID:x487PEXW
以下アスペ乙禁止

と言うのはさておいて。

>592の-1の役割りについてなら、所謂「番人(sentinel)」だね。
文字列の場合のナル文字も、同じ役割りだと言える。
0595デフォルトの名無しさん2014/10/16(木) 12:43:24.75ID:imC1u1xV
sentry 番兵
0596デフォルトの名無しさん2014/10/16(木) 12:44:11.41ID:imC1u1xV
コンピュータ用語、センチネル、標識
情報の始めや終わりを示す記号など
tag ともいう
0597デフォルトの名無しさん2014/10/16(木) 12:53:13.18ID:6hon/NKm
>>591
https://www.google.co.jp/webhp?ie=UTF-8#safe=off&;q=10%E9%80%B2%E6%95%B0+2%E9%80%B2%E6%95%B0+%E5%A4%89%E6%8F%9B+c%E8%A8%80%E8%AA%9E
0598デフォルトの名無しさん2014/10/16(木) 12:54:10.13ID:nzeF5Tun
わざわざ逆にせず、num[i] != -1 と書けばいいのに
0599デフォルトの名無しさん2014/10/16(木) 12:57:35.69ID:x487PEXW
>>598
昔かなり売れた本を書いた三田某が広めた悪しき習慣です。
0600デフォルトの名無しさん2014/10/16(木) 13:51:47.64ID:ezJ68yjY
DOS時代は返り値負数はエラーって関数多かった。
0601デフォルトの名無しさん2014/10/16(木) 17:33:09.07ID:SBUE/h0X
CreateFile「なんて悪習だ」
0602デフォルトの名無しさん2014/10/16(木) 19:52:29.17ID:wUxPPoZ3
creat「けしらからんな」
0603デフォルトの名無しさん2014/10/16(木) 20:41:40.85ID:z1p3vqSk
>>592
0でもNULLでもなく文法エラーです
0604デフォルトの名無しさん2014/10/17(金) 01:02:29.98ID:9a/zPdtM
>>600
UNIXの慣習を真似ただけ
0605デフォルトの名無しさん2014/10/17(金) 07:01:57.72ID:9jo8HR8B
それはバッチファイルのエラー処理が捗らんな
0606デフォルトの名無しさん2014/10/17(金) 14:46:31.04ID:MIx0kIZE
構造体のタグ名って、何のために必要なんですか?
変数名だけで十分だと思うんですが・・・
0607デフォルトの名無しさん2014/10/17(金) 14:52:50.25ID:Q2oMAsWx
線形リストを記述するのに、”自分自身を指す型の名前が” 欲しい
struct ore {
 struct ore *next;
 void *body;
};
0608デフォルトの名無しさん2014/10/17(金) 14:57:52.00ID:y+sHWWi0
>>606
互換性でしょ

>>607
前方宣言でtypedefすればいけない?
0609デフォルトの名無しさん2014/10/17(金) 14:59:29.23ID:Q2oMAsWx
>>608
前方宣言するにしても
タグ名無し (noname struct) は typedef できないっしょ
0610デフォルトの名無しさん2014/10/17(金) 15:01:48.11ID:y+sHWWi0
>>609
なんでその例えが出したの?
0611デフォルトの名無しさん2014/10/17(金) 15:03:47.46ID:Q2oMAsWx
質問元が 構造体にタグ名なんていらねーんじゃyねーの? と暗に言ってるように受け取れたので

で タグ名無しの構造体で表現できないのがあるよ と。
0612デフォルトの名無しさん2014/10/17(金) 15:04:32.76ID:y+sHWWi0
あぁごめん
理解した
スルーしてちょーだい
0613デフォルトの名無しさん2014/10/17(金) 15:32:02.10ID:bxyVopED
typedef などという邪教の異物を廃して
構造体タグに回帰せねばならない

ってコンパイラちゃんが枕元でゆってた
0614デフォルトの名無しさん2014/10/17(金) 16:34:07.18ID:D1HVdoyr
コンパイラは、typedefを認識できる。
#defineではなく、typedefをつかえ
というはなしもある
0615デフォルトの名無しさん2014/10/17(金) 21:41:37.05ID:j5u0ESS9
>>606
ある構造体を一度だけ使うだけなら、タグ名は不要
  struct { ..... } foo1, foo2;

ただし、同じ構造体を複数使うのなら、構造体をタグ名で命名してから
そのタグ名で変数宣言したほうが、コードの重複が無くなり簡潔になるからバグが減らせる
  struct foo { ..... };
  struct foo foo1;
  struct foo foo2;

たとえばある構造体へのポインタを複数のモジュール間で受け渡したい場合、
ヘッダファイル(*.h)で構造体を定義し、そのヘッダファイルを
コール元/先のモジュール実装ファイル(*.c)でインクルードする場合にタグ名が必要になる

また、タグ名の代わりに typedef でデータ型として定義する書き方もある
  typedef struct { ..... } foo_t;
  foo_t foo1;
  foo_t foo1;

typedef を使う例としてはC標準ライブラリの fopen 等で使われる FILE 型が、
タグ名を使う例としては同じくC標準ライブラリの fstat で使われる stat 構造体がある
これらは、アプリケーション(コール元)とC標準ライブラリ(コール先)との間で、
構造体で表現されたファイル/アクセス権利の情報を受け渡している
0616デフォルトの名無しさん2014/10/17(金) 21:46:03.30ID:hy5PTzmS
fstatはC標準じゃねえよ
0617デフォルトの名無しさん2014/10/17(金) 21:54:23.45ID:j5u0ESS9
>>616
では、POSIX標準に訂正
0618デフォルトの名無しさん2014/10/18(土) 14:25:01.99ID:xyIEV5M1
>>606
元々Cにはユーザがデータ型を定義するという概念はなくて
名前付きの構造体により代用している

そこから悪しき方向に進んだのがtypedef
後戻りできなくなったのが C++

なぜタグ名が必要ですか? ではなくて
なぜタグ名の前のstructを省略しようとするのですか? と問うべき
0619デフォルトの名無しさん2014/10/18(土) 17:51:30.53ID:Vnp4xFn+
使用率1割程度の過疎な2次元配列を効率よく格納する手段を教えて下しあ
用途はグラフの座標記録です
いまのところハッシュかトライ木かなあと思ってます
0620デフォルトの名無しさん2014/10/18(土) 18:19:59.25ID:JrrIO6WT
>>618
>元々Cにはユーザがデータ型を定義するという概念はなくて

その「元々」というのは、何を指しているのかな?

少なくとも K&R C 版の書籍「プログラミング言語 C」では、
  struct date { ..... };
  struct date d;
という構造体の宣言文を:
 「変数 d が型 d の構造体であるという定義になる。」
と解説している

また typedef に関しても K&R C では、
  typedef int LENGTH;
といいう型の宣言文を:
 「名前 LENGTH を int の同義語にする。」
と解説している

以下にまとめる:
・元々 C には、ユーザが構造体や共用体のデータ型を定義するという概念が存在する
・加えて、任意のデータ型に同義語(シノニム)を定義する概念も存在する

また、ナゼ型名に対する同義語の定義 typedef を「悪しき方向」と考えたのだろうか?
同義語の概念は、ML や Haskell といった厳密な型システムを持つ新しい言語でも存在しているのに....
たとえば Standard ML という言語では、上記の C コードを以下のように書く
  datatype date = Date of { ..... }  (* データ型 date を定義 *)
  val d : date = Date { .... }     (* データ型 date の変数 d を宣言 *)

  type LENGTH = int        (* 組み込みデータ型 int の同義語として LENGTH を定義 *)

全般的に、データ型と型システムに関する理解度が浅いように思えるね
0621デフォルトの名無しさん2014/10/18(土) 18:47:49.79ID:pBwE5r6C
>>619
求めているものがよく分からないのだが、座標の配列じゃダメなの?
例えば、
struct {
double x;
double y;
} graph[] = {
{0, 0},
{1, 1},
{2, 4}
};
のような。ここでは無名構造体を作ったけど、座標値だけなら複素数型を使ってもいいね。
例えば、その座標の属性も必要なら
struct {
double x, y;
AnyType_t foo;
}
のようにメンバーを増やせばいい。
# 尤も、そうなると尚のことC++向けになるけれど。
0622デフォルトの名無しさん2014/10/18(土) 20:15:30.12ID:jMJom5wv
常識披露が捗ってるように思えるね
0623デフォルトの名無しさん2014/10/18(土) 20:50:21.37ID:BKUOIhLJ
A+B=0(A>=0)のときBを求めろ。俺「ビット反転ってどうやるんだ?」出来る奴「ffとのxorを取って1を足す」

すみません、こういった知識はどこで得るのですか?
0624デフォルトの名無しさん2014/10/18(土) 21:26:08.89ID:2Oqt2ZKa
2の補数
0625デフォルトの名無しさん2014/10/18(土) 22:39:50.56ID:1p6XRioV
>>623
この手の話は「情報論基礎」みたい感じで軽い一冊としてまとまってそう、私も具体的にこれ、と挙げることはできないけど

a を二進数表現としたとき、a の 1 である桁を 0 に換え、a の 0 である桁を 1 に換えてできた数を a の補数と名前をつけることにする。
例:十進数表記の 6 は 二進数表記では 110、よって6 の補数は二進数で 001 、十進数で 1 とする。
例:14 の補数は 17, 221 の補数は 34, 2438 の補数は 1657,

a の補数を ~a とすると上記の補数の決め方により a + ~a = 111111......1111(二進数ですべての桁が1になる数)となる。
なぜならば、a のある桁が1 ならば対応する~a のその桁は 0 になるわけで、両方ともが 1 、あるいは両方ともが0 になることは、補数の決め方を守る限り起こらない。

ここでもう一つの約束ごと、11111...1111 というニ進数で表すとすべての桁が 1 になる数を「-1」を表すこととする。

この二つの約束事を式で表すと

a + ~a = -1
a = -~a - 1
-a = ~a + 1

以上のとおりです。
0626デフォルトの名無しさん2014/10/19(日) 00:05:59.34ID:y9OwiF5y
ビット演算が苦手でマスターしたいんですが
どんなことをやれば勉強になりますかね?
0627デフォルトの名無しさん2014/10/19(日) 00:09:14.61ID:rbfpezWX
オセロ
0628デフォルトの名無しさん2014/10/19(日) 00:42:17.06ID:y9OwiF5y
オセロゲーム作れってことですか
そういえばCで作ったことなかったのでやってみます
0629デフォルトの名無しさん2014/10/19(日) 01:11:55.54ID:YVMiT/ni
>>623
ビット演算とかマイコンで多用する。マイコン・プログラムをやるとか。
あるいは、基本情報処理とかそいういうレベルでもちゃんとまとまってるぞ。
腑に落ちて納得するかどうかは別だが。

>>625
ひどい説明だな
0630デフォルトの名無しさん2014/10/19(日) 01:34:09.93ID:n12q1poe
もまえらフォントなに使っとん
0631デフォルトの名無しさん2014/10/19(日) 08:08:30.63ID:I8zMPvcx
>>626
ビット演算って
0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1
0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1
0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0
~0 = 1, ~1 = 0
しかなかったと思うが、何を知りたいんだ?
0632デフォルトの名無しさん2014/10/19(日) 09:16:50.39ID:y9OwiF5y
>>629
マイコンいいですね
基礎基本がわからないレベルなので…
>>631
n = (a >> i) & 1;
とかの組み合わせがパッと浮かばない
演算の意味はわかるんですが
0633デフォルトの名無しさん2014/10/19(日) 09:58:11.00ID:I8zMPvcx
>>632
> n = (a >> i) & 1;

基本はシフトでビット位置を合わせて、アンドで必要なビットを取り出す
複数の情報を組み合わせる時は、オアで合成する
ハードウェアとか外部のソフトが相手で、ビットの意味が反対だったりしたら、ノットで反転
あとは、それらの組み合わせ
分解して一つづつやれば難しくはないと思うよ
0634デフォルトの名無しさん2014/10/19(日) 10:07:00.78ID:Gg/Cq6+G
指をビットに見立てて色々計算して見る。
右手と左手で排他的論理輪とか。





まぁそんなことやったこと無いけど。
0635デフォルトの名無しさん2014/10/19(日) 10:33:59.17ID:k1PbD2WC
グワシは無理。
0636デフォルトの名無しさん2014/10/19(日) 10:58:01.92ID:uD1HchnI
向いてないから死ね
0637デフォルトの名無しさん2014/10/19(日) 11:29:33.45ID:U9zncy/O
グワシが出来ないと死なねばならんのか
0638デフォルトの名無しさん2014/10/19(日) 14:31:31.25ID:sQrPAy6+
グワシが標準スキルだったら31進数や1023進数で日常の計算してたんかな?
それとも32進数に考えが及んだか?
0639デフォルトの名無しさん2014/10/19(日) 14:35:17.51ID:F4nW5RW7
なぜ31進数になると思ったのか
自分の手の指は11本あるの?
0640デフォルトの名無しさん2014/10/19(日) 15:04:15.42ID:z3cv9rpK
>>629
>>>625 ひどい説明だな
すまんなあ、いろいろ考えたんだけれども今ひとつだね
0641デフォルトの名無しさん2014/10/19(日) 21:34:56.26ID:y9OwiF5y
>>633
なるほど
オセロ作りながら試してみます
指使うのは薬指がしんどいですね
ありがとうございました
06426272014/10/19(日) 22:53:58.83ID:qiCEM7yh
>>641
むしろ指の代わりのオセロなんだが……
0643デフォルトの名無しさん2014/10/19(日) 23:27:09.58ID:Gg/Cq6+G
>638
親指はパリティチェック用です。
0644デフォルトの名無しさん2014/10/20(月) 00:06:29.77ID:kihkTLTv
0001(1)を全ビット反転させたものを、1の補数という
(n進数のn-1の補数)
1110(-1)

0001(1)
0000(+0)
1111(-0)
1110(-1)

1の補数を使うと、+0と-0があって、
0に2つの値を使うため、表現できる数が1つ減るので、
1の補数に、0001を足して、2の補数とする

1111+0001=10000→0000
これで、0の表現が1つになる

0001(1)
0000(0)
1111(-1)
1110(-2)

0001(1)
1110(反転して)+0001=1111(-1)
0001(1)+1111(-1)=10000→0000(0)

同様に、1111(-1)
0000(反転して)+0001=0001(1)

情報処理の資格の本を読め
0645デフォルトの名無しさん2014/10/20(月) 00:46:53.38ID:jAOGV0n9
計算機で話題になる2の補数は、計算機内部で負数をどう表すのかと関係がある。
考えているビット幅でビット反転して1を足して2の補数を作る。

4ビット符号付整数
0101(5)
+)1011(-5:ビット反転して+1)
----------------------------
10000

4ビットから桁あふれした1を「計算機の方で無視」すれば、
a + x = 0 となるので x は -a とみなせる。

たまに話題になる符号拡張も、下で納得

8ビットに拡張すると
0000 0101(5) 正なら0で拡張される
+)1111 1011(-5) 負なら1で拡張される
---------------
10000 0000 5 + (-5) = 0 の関係を満たしている。

上にもあるが、計算機の方で1の補数で負数を表すものもある(った)。
今はおそらく大半の計算機が整数の負数に2の補数を使っている。
0646デフォルトの名無しさん2014/10/20(月) 00:48:24.52ID:jAOGV0n9
ずれてしまった。桁をそろえて考えてくれ。
0647デフォルトの名無しさん2014/10/20(月) 00:59:22.33ID:d0Wa7W4n
親指パリティより8b/10bの様に指運の苦しい数字を4b/5bで表現する知恵を示して欲しかった
0648デフォルトの名無しさん2014/10/20(月) 01:02:07.99ID:z9HBmvt8
>>642
ファッ?!
0649デフォルトの名無しさん2014/10/20(月) 10:14:38.24ID:zw/pANgQ
プレーン方式のグラフィック弄ってると嫌でもビット操作覚える。
もうそんな機会は無いだろうけど。
0650デフォルトの名無しさん2014/10/20(月) 10:18:49.65ID:PsaKgWV1
1が立っている最も上位のビットだけを抜き出す とか
1が立っている数を数える とか
そういう系統もややこしい
0651デフォルトの名無しさん2014/10/20(月) 16:01:36.12ID:Bme9sFz0
if(d){
n=0;while(d){n++;d=d>>1;};
b=1<<n;
} else b=0;
0652デフォルトの名無しさん2014/10/20(月) 16:02:47.03ID:Bme9sFz0
ミスった。
× b=1<<n;
○ b=1<<(n-1);
0653デフォルトの名無しさん2014/10/20(月) 16:57:54.73ID:kQY1b3E/
入門者が回答した典型的なパターン
0654デフォルトの名無しさん2014/10/20(月) 17:48:39.64ID:5SF17gPn
>653
熟練者の回答パターンよろしく、煽り君。
0655デフォルトの名無しさん2014/10/20(月) 18:03:29.04ID:iqdyOi6J
前者はnlz、後者はビットカウントですぐにヒットするだろ。
nlzのキーワードを知らなくても、ビットカウントの応用でできるだろ。JK
0656デフォルトの名無しさん2014/10/20(月) 18:03:30.71ID:PsaKgWV1
「ハッカーのたのしみ」を読んで

bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f);
bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff);
return (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff);
0657デフォルトの名無しさん2014/10/20(月) 18:42:12.49ID:3S+pMSvD
他人のふんどしで尊大な態度はどうかと思う。
0658デフォルトの名無しさん2014/10/20(月) 18:47:16.70ID:kQY1b3E/
if(d==0){
b=-1;
}else{
b=d;
b|=b>>1;
b|=b>>2;
b|=b>>4;
b=b&0x55+(b>>1)&0x55;
b=b&0x33+(b>>1)&0x33;
b=b&0x0F+(b>>1)&0x0F;
b--;
}
0659デフォルトの名無しさん2014/10/20(月) 18:58:01.90ID:XKh/BlSi
振る舞いだけ学んでおけばどーでもいい
常用するなら嫌でも覚えるし
たまーにしか使わないものは
結合法則や演算子の終戦順位と同じで
チートシートでどうとでもなる
0660デフォルトの名無しさん2014/10/21(火) 00:09:35.80ID:0vfesyL/
まわりくどい説明が多いな。
0661デフォルトの名無しさん2014/10/21(火) 03:55:53.12ID:8SGSY+iX
いや、地味に参考にはなりますよ
俺みたいなアマチュアには
0662デフォルトの名無しさん2014/10/21(火) 04:11:08.20ID:netKw0Ms
つーか今時何に使うんだよ
組み込みでレジスタ操作するってんなら分かるけど
普通にboolのフラグ使った方がいいだろ
0663デフォルトの名無しさん2014/10/21(火) 04:30:21.12ID:XAI1ewtg
ビット操作では排他的論理和も大事
変化の検出、変化の方向
0664デフォルトの名無しさん2014/10/21(火) 23:58:43.05ID:K8BLRHCO
windows7 64bitOS上で、
2.2GB程度のファイルを開いて、中身のデータをメモリにコピーする
処理を3度繰り返すプログラムを作って、処理時間を計ったのですが、
1回目の実行では40秒以上かかったにも関わらず、2回目以降は10秒程度で
終わってしまいました。
1回目と2回目以降で何が違うのか知りたいのですが・・・。
同じような現象にあった人いませんか?
0665デフォルトの名無しさん2014/10/22(水) 00:04:10.14ID:TiUjqSTX
キャッシュ
0666デフォルトの名無しさん2014/10/22(水) 00:11:05.29ID:TCMhDTw9
>>665
すんません。ありがとうございます。
キャッシュがキーワードになるところまでは、
なんとか推測できたのですが、その仕組みが分からず
困ってしまって。
教えてもらえないでしょうか。
0667デフォルトの名無しさん2014/10/22(水) 00:18:01.10ID:TiUjqSTX
一度アクセスしたファイルがメモリに読み込まれているんだよ

2回目以降は、そのメモリに読み込まれた内容を返しているから早くなる
0668デフォルトの名無しさん2014/10/22(水) 15:46:30.26ID:DY3FYU6g
int *arrayInt = ( int * ) malloc(sizeof(int) * 5)

arrayIntのsizeを求めるにはどうしたらいいのでしょうか?
sizeofでは4しか帰ってきません
0669デフォルトの名無しさん2014/10/22(水) 16:03:02.75ID:M8+A+VNz
sizeof(int) * 5 でしょ?mallocで書いたのと同じにすればいい
0670デフォルトの名無しさん2014/10/22(水) 16:04:18.49ID:ZJmaYp7j
無理なので、セットで覚えておきましょう (関数には両方とも渡しましょう)

int num_array = 5;
int *array = ( int * ) malloc(sizeof(int) * num_array);

....

num_array と array をペアで取り扱う
0671デフォルトの名無しさん2014/10/22(水) 17:18:31.87ID:kioGZEwy
>>669-670
確保した領域のカウントってできないんですね

ありがとうございます
0672デフォルトの名無しさん2014/10/24(金) 15:53:47.70ID:nuHRW7MX
#define A_NO 20
const int B_NO = 10;
int a[A_NO];
int b[B_NO];

int b[B_NO] これエラー吐くんですが、どうしてですか?
コンパイラは、Borlandです
0673デフォルトの名無しさん2014/10/24(金) 16:00:24.44ID:RNJLSzMP
C言語においては定数式で初期化されたconst変数は定数ではない && C99非対応処理系
0674デフォルトの名無しさん2014/10/25(土) 13:07:14.86ID:pojaJUJ1
sizeof(int[2]) のような書き方は何か都合が悪いですか
sizeof(int) * 2 や sizeof(int) + sizeof(int) のようなコードばかり見かけるもので
0675デフォルトの名無しさん2014/10/25(土) 13:59:33.08ID:+rxX9Zyj
>674
基本的には問題ないが、ポインタ型の場合は誤解を招くかもしれない。

ところで、sizeof(int) + sizeof(int) などと書く人がいるのか…
これがもし、別個に定義された#defineやtypedefで中身が一緒だから、ということであるなら、
全く別の話になる。
0676デフォルトの名無しさん2014/10/25(土) 14:35:52.56ID:pojaJUJ1
ありがとうございます、わかりました
0677デフォルトの名無しさん2014/10/26(日) 03:33:54.20ID:Beg6PV2I
mov(&ax, 0xff);
axがshort intのとき、&axのところにff、&axから1バイト先のところに00を書き込みたいです(リトルエンディアン)
mov()の書き方がわからないのですが、教えてください
具体的には、私の環境ではshort intの幅が2バイトなので、ポインタをインクリメントすると2バイト先を指してしまうのですが、これを1バイト先を指すようにし、そこに値を書き込みたいです
0678デフォルトの名無しさん2014/10/26(日) 05:22:36.67ID:qgcFTrvw
short int *ax;
((unsigned char *)ax)[0] = 0xff;
((unsigned char *)ax)[1] = 0x00;
0679デフォルトの名無しさん2014/10/26(日) 08:52:33.66ID:NwSJFL0J
char以外だとtype punningが問題になるからunionも覚えとけ
0680デフォルトの名無しさん2014/10/26(日) 10:17:09.05ID:Beg6PV2I
目から鱗なのです
ありがとうございます
0681デフォルトの名無しさん2014/10/28(火) 10:18:35.43ID:/wPiQURT
while(1)
{
if{
continue;
}
}

continueはwhile文に戻どるんですか?
それとも、if文ですか?
0682デフォルトの名無しさん2014/10/28(火) 10:30:24.78ID:eMLlqf62
>>681
「戻どる」が何のことかは知りませんが、
continueはwhileの評価部に移動します。
しかしこの場合は評価部が常に真なので、
結果的にifの評価部に移動することになります。
0683デフォルトの名無しさん2014/10/28(火) 18:24:19.21ID:yV+uoqZU
javaの練習しようとしたらswingなどがありますが
Cって何があるんですか?
objectiveCでiphoneでもCで練習したってことになるわけないですよね?
0684デフォルトの名無しさん2014/10/28(火) 18:34:37.34ID:DF/RlZJq
>>683
そもそも、Java屋さんでCが書けない人っていないよ
0685デフォルトの名無しさん2014/10/28(火) 18:36:02.07ID:yV+uoqZU
>>684
ありがとう。初心者レベルでちょっとは使えますが
ポインタやいろいろ使いこなすまで使ってはいません
0686デフォルトの名無しさん2014/10/28(火) 18:57:13.15ID:TVzBf/gb
>683
C言語のライブラリは、環境依存のものが多いかな・・・
あちこちに移植されて標準のように思えるものもあるけれど、
例えば、PCから離れてちょっと組み込みとかの世界に行くと、
あれもこれも使えないとわかって頭を抱えることがあるw

「使える」と「使いこなす」よりも、
「使えない」と「使える」の差の方が大きい。
広く浅く、とりあえず単純になら使えるようになることが先かな。
0687デフォルトの名無しさん2014/10/28(火) 18:58:25.16ID:yV+uoqZU
ありがとう。Cでゲームやあぷりつくるとしたら何があるんでしょう
0688デフォルトの名無しさん2014/10/28(火) 19:33:34.53ID:eMLlqf62
>>684
幾らでも居るよ。そもそも、C++プログラマでCを書けない奴もいる。
0689デフォルトの名無しさん2014/10/28(火) 19:55:38.09ID:vtU5lQj4
コンテナ使えないとか
クラス化して整理できないとか
思考を縛られてうがーってなるのと 文法的な縛りでうがーってなるのと
0690デフォルトの名無しさん2014/10/28(火) 20:22:27.59ID:RC51HoX/
win32api直接利用
DXライブラリ
SDL
この辺
0691デフォルトの名無しさん2014/10/28(火) 20:36:02.49ID:DF/RlZJq
>>689
らっぱー
0692デフォルトの名無しさん2014/10/28(火) 20:41:47.33ID:DF/RlZJq
>>688
> C++プログラマでCを書けない奴
理解できない
0693デフォルトの名無しさん2014/10/28(火) 21:04:19.75ID:uEWDfUej
>>684
Cナメすぎ ていうか Java屋ナメすぎ
0694デフォルトの名無しさん2014/10/28(火) 21:24:41.81ID:DF/RlZJq
>>693
意味がわからねっす
0695デフォルトの名無しさん2014/10/28(火) 21:31:11.91ID:eMLlqf62
書けると思い込んでる奴は多いね。
実際に書かせると、メモリリークしてたりバッファオーバフローしてたり
スパゲッティーになってたりともう、ぼろぼろ。
0696デフォルトの名無しさん2014/10/28(火) 21:43:54.28ID:DF/RlZJq
>>695
主観じゃんw

> C++プログラマでCを書けない奴
理解できない

ですよ
0697デフォルトの名無しさん2014/10/28(火) 22:14:18.15ID:+JGpmvNc
○○言語で食べてる人はかならず□□言語が使える
こんなの何に対しても当てはまるわけがない
あ、同じ言語名が入るならもちろん成り立つよ?笑
0698デフォルトの名無しさん2014/10/28(火) 22:15:54.10ID:+JGpmvNc
マ量産の今だと同じ言語名が入るかどうかも怪しいか・・・
0699デフォルトの名無しさん2014/10/28(火) 22:17:56.73ID:vtU5lQj4
Cで書けないわけじゃなく、C++ だったらこう書くのに というストレスがかかる
関連の遠い言語なら、そういうもんだって諦めつくけど、近しいんでなおさら
0700デフォルトの名無しさん2014/10/28(火) 22:22:10.87ID:jVTnh4rL
Cにクラス入れる議論があるらしいから
それが成就すればC++っぽく書けるんじゃ
0701デフォルトの名無しさん2014/10/28(火) 23:09:07.66ID:uvfLqTRT
あれだ、構造体の値渡しができるようになった時点で C の墜落じゃなかった堕落がはじまった‥
0702デフォルトの名無しさん2014/10/28(火) 23:10:49.98ID:ZFLQwBg+
構造体の値渡しが出来ないっていつの規格だ?
C89では出来てたよな。K&R?
0703デフォルトの名無しさん2014/10/28(火) 23:13:25.39ID:1jnk6RKM
>>700
へー、マジで。
つかそれObjective-C
0704デフォルトの名無しさん2014/10/28(火) 23:17:53.63ID:uvfLqTRT
>>702
K&R1
0705デフォルトの名無しさん2014/10/28(火) 23:19:01.09ID:ZFLQwBg+
構造体の継承はあったらうれしい
メンバ関数とかいらんわ
0706デフォルトの名無しさん2014/10/28(火) 23:51:36.24ID:jVTnh4rL
>>703,705
俺はオーバロードがあるとうれしいかな
ttp://cpplover.blogspot.jp/2014/10/n1875-c.html
07076272014/10/28(火) 23:52:50.49ID:yg9JLa76
ドラえもんのポケットから夢の言語が……
0708デフォルトの名無しさん2014/10/28(火) 23:54:31.98ID:jVTnh4rL
いや、オーバロードはメンバ関数ありきか
眠いんで変なこと言った
0709デフォルトの名無しさん2014/10/29(水) 00:20:23.07ID:ITcKex6d
>>708
いやいや関数のオーバーロードはCにあっていいと思うよ、ただしリンクが大変だ
0710デフォルトの名無しさん2014/10/29(水) 10:14:03.28ID:FRMiK0c0
そうなると名前空間も欲しい
あれ?C++でよくね?
0711デフォルトの名無しさん2014/10/29(水) 17:36:05.19ID:dXPcUlLe
Cのループはショートジャンプですか、ニアジャンプですか?
0712デフォルトの名無しさん2014/10/29(水) 17:51:30.48ID:Cyi/yNzT
コンパイラ次第
0713デフォルトの名無しさん2014/10/29(水) 21:19:13.67ID:OOL+6wsD
Cってeclipseで練習するのが一般的ですか?
javaしか使ったことない前提
まだeclipseへのCの入れ方がわからないけど
0714デフォルトの名無しさん2014/10/29(水) 21:21:18.09ID:OOL+6wsD
JavaにおけるSWINGみたいなので
Cの場合でいうとVisualCなんでしょうか?
0715デフォルトの名無しさん2014/10/29(水) 22:38:06.32ID:FNNFJVXh
>>706
Objective-Cでもオーバーロードあんだろ…
0716デフォルトの名無しさん2014/10/29(水) 22:38:48.84ID:FNNFJVXh
わかってねーやつが多いが、Objective-Cほど、Cに忠実にオブジェクト指向を
導入した言語はないぞ
0717デフォルトの名無しさん2014/10/30(木) 00:39:42.47ID:YHBMm73x
エディタは好きなの使ってコンパイラはgcc使えばいいんじゃないすかね
0718デフォルトの名無しさん2014/10/30(木) 07:51:45.02ID:teQja72k
>>714
Win32API
0719デフォルトの名無しさん2014/10/30(木) 08:48:11.40ID:/137+PaD
Qtっていうのもいいんじゃねえのよく知らないけど
0720デフォルトの名無しさん2014/10/30(木) 09:31:27.23ID:cKVXk1/w
if(a>10 || b>20)
if(b>20 || a>10)
効率がいいのは、どっちからしいんですけど
どっちですか?
0721デフォルトの名無しさん2014/10/30(木) 10:51:27.28ID:sq6jEOjY
>>720
それは一概には言えない。
可能性としては、a>10とb>20のどちらかがどちらかより真になることが多いなら、それを先にした方がいい。
0722デフォルトの名無しさん2014/10/30(木) 11:57:02.35ID:HIs5p7W3
エクリプスにC言語をかけるような環境を入れようとするとリンク切れでいれられません
難しいですよねエクリプスに入れるのって?
0723デフォルトの名無しさん2014/10/30(木) 12:34:50.66ID:/137+PaD
初めからC言語環境が入ってるeclipseを落とせばいいんじゃないの
0724デフォルトの名無しさん2014/10/30(木) 12:54:28.45ID:7fc6WtHX
>>720
> 効率がいいのは、どっちからしいんですけど

そう言ったやつに聞け
なんの前提もなしにそう言ってるなら、今後そいつの言うことは聞き流していい
0725デフォルトの名無しさん2014/10/30(木) 14:29:48.10ID:HIs5p7W3
>>723
ありがとう
なんていうエクリプスですか?
0726デフォルトの名無しさん2014/10/30(木) 14:32:11.66ID:HIs5p7W3
junoってリンク先の中にありましたありがとう
0727デフォルトの名無しさん2014/10/30(木) 15:12:59.88ID:HIs5p7W3
>>723
プロジェクトたちあげてみたいんですが

#include <stdio.h>
#include <stdlib.h>

に赤罰が出ます
プロジェクトの中には srcの中に自分の作ったファイルしかありません
#include <stdio.h>
#include <stdlib.h>が入ってない気がするんです
0728デフォルトの名無しさん2014/10/30(木) 15:28:12.96ID:5zPuqKEd
void
func(int reg)
{
reg = 0xff;
}
この関数をディスアセンブルすると
0 push rbp
1 mov rbp,rsp
4 mov DWORD PTR [rbp-0x14],edi
7 mov DWORD PTR [rbp-0x4],0xff
14 pop rbp
15 ret
ベースポインタのpush,popが何をやっているのかわからないのですが、教えてください
0729デフォルトの名無しさん2014/10/30(木) 15:35:13.12ID:64aev4EE
>>727
CではなくC++のプロジェクトでは
stdio.hではなくcstdio使えとかってな
警告じゃない?

>>728
退避したものを復元してるだけでは
0730デフォルトの名無しさん2014/10/30(木) 15:38:10.40ID:5zPuqKEd
>>729
このベースポインタの処理、どの関数を読んでも出てくるのですが、スタック領域にベースポインタをpush、またpopすると何が起こるのでしょうか
0731デフォルトの名無しさん2014/10/30(木) 15:42:28.09ID:64aev4EE
>>730
だから退避したものを復元してるだけではと言ってるんだけど。
VS、Eclipseその他
定番どころのIDEなら混合モードでデバッグ出来るから
ステップ実行して値の変化を確かめてみたらいいんじゃないかな
0732デフォルトの名無しさん2014/10/30(木) 15:48:28.87ID:5zPuqKEd
>>731
スタックの仕組みはわかるので、私がお聞きしたいのはベースポインタを退避、復元という処理にはどんな意味があるのかということです。勘違いさせてしまい申し訳ございません。
0733デフォルトの名無しさん2014/10/30(木) 15:48:46.64ID:0o1hvduw
スタックフレームって奴だろうけど
ベースポインタの push/pop の部分は、単に呼び出し時点に巻き戻す用
自動変数がある場合、その後、スタック/ベースポインタの加減算でスキマを作って
そのスキマに自動変数をわりあてる
関数から戻る直前 スタック/ベースポインタの加減算を巻き戻して 帰る

必ずこうなるわけではない(コンパイラ次第)けど、多分こんなもん
0734デフォルトの名無しさん2014/10/30(木) 15:52:34.39ID:1rX8nkrW
>>732
関数の中から関数を呼ぶ場合があるから
0735デフォルトの名無しさん2014/10/30(木) 15:55:22.72ID:5zPuqKEd
>>733
ありがとうございます。main()にもrbpのpushがあるのはargc,argvをベースポインタに割り当ててるということでしょうか。私は説明が下手と理解が曖昧なのでプログラマになれるか不安です
0736デフォルトの名無しさん2014/10/30(木) 16:03:17.76ID:5zPuqKEd
s/ベースポインタ/スタック/
0737デフォルトの名無しさん2014/10/30(木) 16:03:32.39ID:0o1hvduw
アセンブラを追っかける前にほかの事を学べ
0738デフォルトの名無しさん2014/10/30(木) 16:10:03.57ID:5zPuqKEd
わかりました。失礼しました
0739デフォルトの名無しさん2014/10/30(木) 16:14:08.70ID:0o1hvduw
(スタック成長方向↑)
[自動変数 B]
[自動変数 A]
[push bp]
(ここが呼び出された直後)
[リターンアドレス]
[関数第1引数]
 :
[関数第n引数]

このように関数呼び出し側が 引数をスタックに詰んだ後に call するんだが
呼ばれた側は、その時の スタックの位置をメモっといて(bp)
メモした位置からの相対位置で引数本体を抜き出すといった具合だが
先に書いたように、コンパイラ次第だったりもするので、コンパイラの技術資料あたれー
0740デフォルトの名無しさん2014/10/30(木) 16:23:27.76ID:5zPuqKEd
ありがとうございます!
手元にあるドラゴンブック第2版、7章をじっくり読もうと思います
0741デフォルトの名無しさん2014/10/30(木) 16:54:50.92ID:L+CtiNQP
ええい貴様にはもったいない その本俺によこせ!!!!
0742デフォルトの名無しさん2014/10/30(木) 17:08:52.77ID:5zPuqKEd
書籍は自分への投資(キリッ
たとえ豚に真珠と言われようが
0743デフォルトの名無しさん2014/10/30(木) 22:44:40.28ID:1lR2Yce7
constってあんまり使わないなぁ・・・
使ったほうが意図が伝わるので使えと言われてきたが

言われないと使わなかったなぁ・・・・

static const char* const file = "app.cfg";

staticも使わないなぁ、グローバル変数にしちゃうなぁ
C89やC99の違いも解らなくなったなぁ

もーだーめだー(なにが)
0744デフォルトの名無しさん2014/10/30(木) 23:22:42.45ID:XB7oU5Zc
組み込みだとconstはつけるべきところにちゃんとつけないとRAMがすぐあふれる
大抵はでかいROMテーブルがいるときに使うな
0745デフォルトの名無しさん2014/10/30(木) 23:28:06.25ID:gdX840BN
なんでもかんでもグローバルにすると
管理上よくない
0746デフォルトの名無しさん2014/10/31(金) 02:36:13.51ID:IvqZg/YM
学校の宿題のプログラムなら別にそれでも構わんだろうな
0747デフォルトの名無しさん2014/10/31(金) 10:19:07.81ID:yAkJcFMf
グローバルの愚弄
0748デフォルトの名無しさん2014/10/31(金) 10:58:41.94ID:NwqKHC4I
制御系なら尚のこと、資源節約の為にもconstはつけておきたいね。
どの途、アセンブリ出力を眺めたりマップファイルを眺めたりは必要だし。
0749デフォルトの名無しさん2014/10/31(金) 18:39:27.93ID:Bv2xV/5A
組込みとかはリソース関連で気を使うだろうなぁ
うちはUNIX(AIX)業務系で
リソースはほぼ無限だからなぁ・・・・

読み易いソース >>>> リソースに優しいコード > 速いコード

さすがにグローバル連発したら
こっちでも殴られますわ
0750デフォルトの名無しさん2014/10/31(金) 18:45:42.97ID:AO1PQn8r
設計センスに依存するグローバルな人たち?
0751デフォルトの名無しさん2014/10/31(金) 18:49:30.96ID:RBA0S+28
配列を引数にすると常に参照渡になりますが
構造体の中に配列を作って渡しても
値渡しになるんでしょうか
0752デフォルトの名無しさん2014/10/31(金) 18:50:35.27ID:wpaPUpf2
Cに参照渡しはありません。
あるのは精々、ポインタの値渡しです。
0753デフォルトの名無しさん2014/10/31(金) 18:52:05.92ID:AO1PQn8r
参照と値の違いがわかってれば、どうにでもなるんでは
0754デフォルトの名無しさん2014/10/31(金) 18:53:38.97ID:RBA0S+28
>>752
構造体の中に入れると配列でも
値と
参照
使い分けられるということですね
0755デフォルトの名無しさん2014/10/31(金) 18:55:12.86ID:AO1PQn8r
テキトーに書いただけだから、出来るかどうかは
調べてるか実際にやってみてね
0756デフォルトの名無しさん2014/10/31(金) 19:12:44.28ID:x+sYExqH
だからCに参照渡しは無いんだってば。
ちなみにJavaにもないぞ。
あるのはそれぞれ値渡しだけ。
ただ、Cにはポインタの値渡しがあり、
Javaには参照値の値渡しがあるってだけ。

foo(bar b) {b = newbar}
これで呼び出し元の変数に変化を与えられるのが参照渡し。
0757デフォルトの名無しさん2014/10/31(金) 19:36:09.80ID:RBA0S+28
>>756
構造体にないのか
配列にないのかどっちのことをいってるんですか?

Kouzou ko1 ;
method(&ko1)でアドレス渡して参照渡しでしょ?
0758デフォルトの名無しさん2014/10/31(金) 19:39:13.28ID:fvAGO10b
>>757
アドレス(ポインタ)の値渡しだ馬鹿野郎
0759デフォルトの名無しさん2014/10/31(金) 19:41:42.10ID:1dvn2SK4
それはポインタの値渡しだ

参照渡しとは C++ のように
Kouzou ko1;
methid(ko1); という呼び出しになり、さらに metod() は ko1 へ副作用をおこせる
0760デフォルトの名無しさん2014/10/31(金) 19:44:53.53ID:1dvn2SK4
int a;
methodA(&a);

struct s;
methodB(&s);

両者とも「参照渡し」とは呼ばない。 ポインタ(の値)渡し
0761デフォルトの名無しさん2014/10/31(金) 19:46:18.07ID:vA8jFBTY
>>757
興味があったらぐぐってごらん。
C言語の入門という意味でも、
プログラミング言語全般への入門という意味でも、
値渡しと参照渡しの違いは自分の中でハッキリさせといたほうがいい。
0762デフォルトの名無しさん2014/10/31(金) 20:02:37.87ID:RBA0S+28
Cの参考書に参照って項目あるのに本が悪いですね
0763デフォルトの名無しさん2014/10/31(金) 20:05:17.80ID:fvAGO10b
>>762
題名と著者を晒せ
0764デフォルトの名無しさん2014/10/31(金) 22:06:43.81ID:9IkTS5mD
参照なのか参照渡しなのかも確認しといてくれ
0765デフォルトの名無しさん2014/11/01(土) 00:43:45.89ID:GSPeP9Ig
typedef struct symbol_t{
char data;
struct symbol_t *next;
}sym_t;
sym_t *insert(sym_t *prev){
sym_t *new;
if ((new = (sym_t *)malloc(sizeof(sym_t))) == NULL)
puts("error");
new->next = prev;
prev = new;
return new;
}
int main(){
char c;
sym_t head, *new = NULL;
head.next = NULL;
while ((c = getchar()) != '\n'){
new = insert(head.next);
new->data = c;
}
for (new = &head; new->next != NULL; new = new->next)
printf("%c\n", new->next->data);
return 0;
}

リストの挿入をしたいのですが、上記のような関数を作った場合うまく動きません
どこがおかしいのか教えてください
0766デフォルトの名無しさん2014/11/01(土) 00:58:18.94ID:PUzzze1L
支離滅裂杉る
自分がどういう動作をするプログラムを望んでるか分かってたらこうならない
0767デフォルトの名無しさん2014/11/01(土) 01:40:42.64ID:tsG7FyjX
>>765
ちゃんとしたコンパイラで警告レベルを上げてプログラミングしよう。
コンパイラが指摘してくれるような問題がごろごろしているぞ。
0768デフォルトの名無しさん2014/11/01(土) 11:37:14.62ID:OvKWG/6P
私の使っているCコンパイラ(gcc)は、
スタック下位
関数の引数
auto変数
スタック上位
とスタックに積んでいるようです。
また、main()内、ediにはargcの値、rsiにはargvのアドレスが入っているのですが、
これらのレジスタはmov命令なしに最初から値が入っています。
spもbpも最初から値がセットされているようです。
mov命令なしにレジスタに値が入っているのは、コンパイラが自動的に割り当てたからでしょうか。
0769デフォルトの名無しさん2014/11/01(土) 12:08:51.45ID:nCE7+pHe
呼び出し規約ぐらい覚えとけ
0770デフォルトの名無しさん2014/11/01(土) 12:21:46.77ID:OvKWG/6P
どこかでcall mainのような命令が走っているのですよね。そうだとしたらOSでしょうか
0771デフォルトの名無しさん2014/11/01(土) 12:25:43.78ID:5KQC2GDp
>>770
「C言語 スタートアップ」でGoogle先生に聞いてみよう
0772デフォルトの名無しさん2014/11/01(土) 12:35:55.56ID:OvKWG/6P
>>771
ありがとうございますm(_ _)m
0773デフォルトの名無しさん2014/11/01(土) 14:13:47.67ID:BAlmKsTx
エラーが出たんですが
構造体のメンバに

int num[];

みたいな配列って入れられないんですよね?
0774デフォルトの名無しさん2014/11/01(土) 14:17:45.47ID:woVuP3aC
>>773
配列は使えると思うが、要素数を未指定でやりたいってことをいってんのかな?
ポインタで代用すれば?
0775デフォルトの名無しさん2014/11/01(土) 14:23:33.07ID:nCE7+pHe
>>773
flexible array memberはC99から
0776>>7732014/11/01(土) 14:23:47.45ID:BAlmKsTx
使えるんですか
普通に
int num[5];みたいにあらかじめ宣言が必要なんですね

ポインタで代用というのは?

int *num;

にして
kouzoutai.num[]={3,3,2,2,2,2};

ってやるんでしょうか
0777>>7732014/11/01(土) 14:26:43.28ID:BAlmKsTx
>>775
エクリプスはC99以前の奴が入ってたんですね
0778デフォルトの名無しさん2014/11/01(土) 14:43:05.33ID:51i1DmKj
領域確保しないと
0779デフォルトの名無しさん2014/11/01(土) 14:43:07.62ID:PTQBgk6U
>>776
こんな感じでしょうか
http://ideone.com/ExVwre
0780デフォルトの名無しさん2014/11/01(土) 15:07:27.43ID:nCE7+pHe
>>777
設定変えればC99は使えるはずだが、
http://www.eclipse.org/forums/index.php/t/67870/
どっちにしろmallocは使うぞ
自動変数に置いても後ろの分の領域が無いからな
http://melpon.org/wandbox/permlink/VtsBgcBjDuTaD1l0
0781>>7732014/11/01(土) 15:14:08.34ID:BAlmKsTx
thx
聞かなきゃ知らないまま何年も行ってそう
0782デフォルトの名無しさん2014/11/01(土) 19:51:08.04ID:vp2e+aGx
>>768
まず、コンパイルして得た結果をリンクする、という概念は大丈夫か?
次に、リンクするものは、ソースのオブジェクトの他、ライブラリ、そしてスタートアップがある点はどうか

昔のコンパイラはリンク時にスタートアップルーチン+ソースのオブジェクト+ライブラリを陽に指定してリンクしていた
最近はある意味、上記過程はブラックボックスの中に入ってしまって意識されないが、ある意味あまりいい傾向ではないかもしれないね
0783デフォルトの名無しさん2014/11/01(土) 20:30:48.01ID:3nVvYlYV
スタックがどうなってるとかアセンブリがどうとか見てるんだから
まさしく今そのブラックボックスに興味持って中を勉強中なんでは?

コンピュータ自体がブラックボックスの宝庫なんだから
ブラックボックスを作れる人が絶滅しない限りは今まで通りどんどんブラックボックス化していいと思う
0784デフォルトの名無しさん2014/11/01(土) 22:36:59.27ID:fq7f8slF
絶滅しちゃったらどうなるんだろう
0785デフォルトの名無しさん2014/11/02(日) 10:21:00.09ID:FPvqJpqA
旧文明の発掘という新たな仕事がうまれるのさ
0786デフォルトの名無しさん2014/11/02(日) 10:29:26.94ID:vxEoPS2x
エンジンを掘り出す、とかいうやつか‥
0787デフォルトの名無しさん2014/11/02(日) 12:49:15.79ID:8hv0bURA
scanf("%5s",str);ってやっても5文字以上入力されると挙動がおかしいんですけど何でですかね
0788デフォルトの名無しさん2014/11/02(日) 13:04:07.52ID:zCm1VvUy
>>787
こうしとけ
scanf("%5s%*[^¥n]", str);
getchar();
0789デフォルトの名無しさん2014/11/02(日) 13:27:14.42ID:8hv0bURA
>>788
動きました!ありがとう!
けど意味わからんと調べてみたんですが元のコードだと切り捨てた後の入力が入力ストリームというのに残ってて挙動がおかしかったってことでいいですか?
0790デフォルトの名無しさん2014/11/02(日) 13:55:26.20ID:zCm1VvUy
>>789
どういう風に挙動がおかしかったのかがわからないけど、
>>788に変えて意図通りに動いたなら理由はそゆことです
0791デフォルトの名無しさん2014/11/02(日) 16:17:17.49ID:TOrV8LyY
>>784-785
発掘するまでもなく設計資料は残ってるんだし、たいして難しいもんでもないし
0792デフォルトの名無しさん2014/11/02(日) 16:38:27.82ID:8hv0bURA
>>790
うまく特定できなかったけど次にscanfでたら同じ文字列が勝手に入ってたりって感じでした
ありがとうございましたー
0793デフォルトの名無しさん2014/11/03(月) 00:11:29.43ID:Sl9Vim3v
sprintfの使い方に関する質問です。
小数点の数を文字列に変換しようとして次のようにコードを打ちました。

char str[5];
sprintf(str, "%f", 3.14);

ところが文字列strには「?」しか格納されていません。

おかしいなと思い

sprintf(str, "%d", 314);

と打ってみましたがこれは問題無く「314」と格納されていました。
最初のは何が問題でしょうか?ちなみに%f以外にも%gとか%lfとか
試しましたが全て「?」でした。
0794デフォルトの名無しさん2014/11/03(月) 00:19:31.01ID:wj4A8VFW
どう考えてもstr[5]じゃ足りない
str[32]ぐらいにしろ
07957932014/11/03(月) 00:23:16.40ID:Sl9Vim3v
>>794
str[32]にしたんですがやはり結果は「?」でした・・・
0796デフォルトの名無しさん2014/11/03(月) 00:26:48.18ID:Kt2/HQpK
>>793
浮動小数点の扱えるまともな環境なの?
07977932014/11/03(月) 00:31:15.57ID:Sl9Vim3v
>>796
AVRというマイコンがあるんですがそのマイコン用にAtmel Sudio 6という統合開発環境が用意されています。
C言語もサポートしていてそのC言語でプログラムを書いています。

浮動小数点も問題無く扱えるはず・・・なんですが・・・
0798デフォルトの名無しさん2014/11/03(月) 01:11:38.41ID:J1ye0ZX1
>>793
>sprintf(str, "%f", 3.14);
sprintf(str, "%4.2f", 3.14);
とか指定したらどうなる?
07997932014/11/03(月) 01:12:36.23ID:Sl9Vim3v
>>798
やはり同じく「?」です。
おかしいですよね(^-^;)・・・
0800デフォルトの名無しさん2014/11/03(月) 01:14:11.91ID:ZMCFj896
>>797
atmel studio 6 printf float
ぐぐれよ
http://foma7.exblog.jp/13595062
0801デフォルトの名無しさん2014/11/03(月) 01:14:35.63ID:wj4A8VFW
マイコンの開発環境ならソースぐらいついてるだろう
sprintfのソース見てみたら
0802デフォルトの名無しさん2014/11/03(月) 01:15:22.37ID:wj4A8VFW
>>800
デフォルトじゃ表示できないだけだったか
0803デフォルトの名無しさん2014/11/03(月) 01:15:58.11ID:Kt2/HQpK
>>797
なんでそういう大事なことを最初に書かない?
マイコン系で浮動小数点使うのはおすすめじゃないが、
どうしても使いたいならそれなりに調べろ。

http://stackoverflow.com/questions/22526319/floating-point-value-not-being-displayed-using-printf-function
これか、だめなら avr printf floating でぐぐれ。
08047932014/11/03(月) 01:31:10.83ID:Sl9Vim3v
>>800-803
そういうことでしたか!

実数表示処理用のライブラリを指定しないといけないというのは初耳でした。
ありがとうございましたm(_ _)m
0805デフォルトの名無しさん2014/11/03(月) 01:38:49.61ID:TAxV/Jyl
>>793
>sprintf(str, "%d", 314);
この関数の第3引数は、
"314"とクォーテーションで囲んでいないから、整数型か?

>sprintf(str, "%f", 3.14);
整数型なら、3.14のような実数型は渡せないのでは?
0806デフォルトの名無しさん2014/11/03(月) 01:42:19.92ID:ZMCFj896
>>805
"%d", 314
"%f", 3.14
0807デフォルトの名無しさん2014/11/04(火) 21:40:09.42ID:yP9wlV1D
下記表現が
 a ? b : c ? d : e  ・・・(1)
下記のどちらで解釈されるかを調べたんですが、
 a ? b : (c ? d : e) ・・・(2)
 (a ? b : c) ? d : e ・・・(3)
書いてあるページが見つかりません。
mingwのgccでは(2)になったんですが他のコンパイラでもこうですかね?
0808デフォルトの名無しさん2014/11/04(火) 21:44:24.46ID:0eOV+naS
はい。気になったらコンパイルして確かめて下さい。
0809デフォルトの名無しさん2014/11/04(火) 21:51:27.45ID:Dsoa1rcK
>>807
http://www.bohyoh.com/CandCPP/C/operator.html
条件演算子は右結合なので、(2)となります。
0810デフォルトの名無しさん2014/11/04(火) 22:27:01.89ID:ZDlm4Njm
>>808
それは危険な発想。
0811デフォルトの名無しさん2014/11/04(火) 22:33:00.92ID:yP9wlV1D
>>809
ありがとうございます。
検索のキーワードが分かったら結構ゴロゴロ >>807 見たいな例が見つかりました。
スレ汚しすいません。
0812デフォルトの名無しさん2014/11/05(水) 02:51:07.75ID:UfxTy9YT
少し急ぎの質問です。

Mac OSX(10.8)でC言語でソフトをつくりたいと思っています。
ソフトはGUIでもCUIでもかまいません。
急ぎで実装と考えるとCUIになるかとは思いますが・・・。

そのソフトやりたいことは、
起動させているQuickTimePlayer10のウィンドウを
指定の座標で、指定の大きさにしたいのです。

ソフトの機能はそれだけです。
これを急ぎでつくりたいのですが、Macでのプログラミング経験がなく・・・。

WindowsであればC/C++でWin32APIを2年ほど色々と触ったので
そこらへんは分かるのですが、Macの場合は何をどうすればいいのか
まだ分からないことが多すぎる状態です。

急ぎなので、何を覚えて、どういう実装方法にすれば
一番早く目的のプログラムを作れるかをご教授いただきたいです。

検索用のひとことでもかまいません。宜しくお願いします。
0813デフォルトの名無しさん2014/11/05(水) 02:59:37.98ID:UfxTy9YT
Windowsでいうと
http://7ujm.net/C++/EnumWindows.html
ここらへんが近いです。他プログラムのウィンドウサイズを変えるです。
0814デフォルトの名無しさん2014/11/05(水) 03:31:56.52ID:UfxTy9YT
五月雨ですみません。。。
手法としては、QTが起動していなくてもかまいません。

要はプログラムによって目的の動画ファイルを
指定の座標に指定のサイズで起動させる。
という機能でもかまいません。

成し遂げたい機能は

指定の動画を、指定の座標に、指定の大きさで配置

です。動画が既に起動しているかどうかはあまり重要ではありません。
今のところ

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[])
{
int ret=0;

ret = system("open /Users/maxi/Desktop/NP/1030.mp4");
return 0;
}

まぁ、あまりMac関係ないですが、これで起動はさせることができます。
引数で座標と大きさ指定できれば一瞬で解決するのですが・・・
0815デフォルトの名無しさん2014/11/05(水) 04:15:14.66ID:UfxTy9YT
予想外に、AppleScriptなるもので簡単に実現できそうなことが分かりました。
というか、実現できました。短い時間でしたがお付き合いいただきありがとうございました。
では。
0816デフォルトの名無しさん2014/11/05(水) 13:48:12.31ID:TxicaWjv
プログラミングの話題になると
「私は低レイヤーで作業できることに魅力を感じて〜」
とか
「より低レイヤーで開発しやすい〜」
とか低レイヤーって言葉聞くんですけど、つまり低レイヤーって
アセンブラの事ですか?
0817デフォルトの名無しさん2014/11/05(水) 13:57:57.90ID:DV/kt5fe
例文はよくわからんけど
ハードウェアやレジスタを直接操作したりする層(レイヤー)が下(低レイヤー)で
ドライバやOSやフレームワークなどの、下を抽象化する層が上に乗っていく(高レイヤーっていうのか?)
アセンブラか?と言われるとまあ合ってるんじゃない
0818デフォルトの名無しさん2014/11/05(水) 13:59:29.99ID:kG4LWIhQ
低レベルだったらアセンブリ言語っぽいイメージだけど
低レイヤーときくとOSI参照モデルとかの層の話に聞こえる
0819デフォルトの名無しさん2014/11/05(水) 14:39:20.08ID:TxicaWjv
>>817
>>818
ありがとう〜

ネットワークでおける話では
プレゼンテーション層が高レイヤーで
物理層が低レイヤーなのかな?
0820デフォルトの名無しさん2014/11/05(水) 15:29:58.99ID:Fpn6fvq+
>>819
まあそういうこと
0821デフォルトの名無しさん2014/11/05(水) 20:09:24.41ID:+x9XCqU/
>>817
OS やドライバが低レイヤーだろう?

>ハードウェアやレジスタを直接操作したり
これはドライバの仕事じゃない?
0822デフォルトの名無しさん2014/11/05(水) 20:41:00.48ID:CNahLZw/
まぁ、OSやドライバに頼らずハードウェアやレジスタを直接操作することもある罠。
0823デフォルトの名無しさん2014/11/05(水) 21:11:28.78ID:+x9XCqU/
>>822
MS-DOS 以外でそんなことが出来る変態OSがあるのか?
0824デフォルトの名無しさん2014/11/05(水) 21:30:30.48ID:Q1wayxmp
組み込みOSなら大抵
0825デフォルトの名無しさん2014/11/05(水) 21:40:24.67ID:CNahLZw/
そもそもPIC位コンパクトなCPUならOS載せないこともしばしば。
0826デフォルトの名無しさん2014/11/05(水) 22:34:35.92ID:snz2pLUR
>>823
http://www.linux-cmd.com/ioperm.html

変態には同意
0827デフォルトの名無しさん2014/11/06(木) 04:16:37.34ID:Oz7u3oJ8
>>823
組込みCは駄目ですかw
OSはしょぼいのを自前で作ります
0828デフォルトの名無しさん2014/11/06(木) 08:38:37.56ID:TlrWomys
OS搭載の場合のハード制御プログラムのことをデバイスドライバっていうんじゃねえの
カメラの制御プログラム開発したことあるけどデバイスドライバとは言わなかったなあ制御プログラムと呼んでた
Linux搭載してるとハードウェア制御してるプログラムは全部デバイスドライバって呼んで間違いないよね
いまいち区別が分からない
0829デフォルトの名無しさん2014/11/06(木) 12:00:23.67ID:gTT0XKv2
http://www9.plala.or.jp/sgwr-t/c/sec11-4.html
コマンドライン引数が、よくわからないだけど
コマンドプロンプトと、何の関係があるの?
0830デフォルトの名無しさん2014/11/06(木) 12:43:53.14ID:keBB2IB1
関係あるよ
まずアプリケーションにはウインドウを持つものと持たないものの2種類がある
後者を扱う場合の多くはコマンドプロンプトを使う
そしてC言語入門では後者しか扱わない

そのサイト一見優しそうだが予備知識の説明がすっぽり抜けてるな
0831デフォルトの名無しさん2014/11/06(木) 12:47:39.00ID:+waWq91k
>>829
そのサイトは初心者には判断できない間違いが多く含まれている。
従って、そのサイトで勉強することはお勧めできない。
0832デフォルトの名無しさん2014/11/06(木) 12:48:01.04ID:dIsyhXfC
>>828
ドライバなんだからデバイスに指示するプログラムだよ
デバイスの中で動くソフトは制御プログラムとかファームウェアとか呼ばれることが多い

カメラの制御プログラムの開発してて、この区別がつかないとか、終わってるぞ
0833デフォルトの名無しさん2014/11/07(金) 22:52:50.48ID:iSwb40qE
しりこんりなっくす
0834デフォルトの名無しさん2014/11/09(日) 22:35:07.81ID:4o+EWYj2
switch文のcaseに関係演算子って使えない?
0835片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/09(日) 22:37:45.14ID:XU91kGr5
使えません
0836デフォルトの名無しさん2014/11/09(日) 23:28:25.66ID:soX2Kmcs
使えるだろ?
意味ないけど。
絶対に>>834がやりたいことじゃない。
switch(x)
{
case 2<3:
...
}
0837デフォルトの名無しさん2014/11/10(月) 00:26:12.55ID:CRSPUJgn
使えますね。
#include <stdio.h>
int main(void) {
int i = 9;
switch (i) {
case (1?9:2): printf("aaa\n"); break;
}
switch (i) {
case (0?2:9): printf("bbb\n"); break;
}
return i;
}
0838デフォルトの名無しさん2014/11/10(月) 07:51:52.04ID:oJxK98s8
使えると言っても、たぶんコンパイル時点で定数値に置き換えられるケースだけのはず
0839デフォルトの名無しさん2014/11/10(月) 15:49:21.93ID:usZuxDGK
マクロで switch case の偽物でも書いたほうがマシかも
0840デフォルトの名無しさん2014/11/10(月) 15:55:29.67ID:rT7F8QxP
JavaScriptのswitch(true)イディオムおもしれえよな
それが可能っていうところが
0841デフォルトの名無しさん2014/11/10(月) 16:45:45.62ID:PTGniR9V
http://ideone.com/rJGVQh
このプログラムの出力が0xff,0x00,0x00,0x00にならない理由を教えてください。
0842デフォルトの名無しさん2014/11/10(月) 16:53:07.85ID:8QediavH
ideoneの環境ではcharが符号有として扱われているからそうなる
関数の引数として解釈されるときに、引数は最低でもintのサイズまで拡張されるので
printf("0x%x\n",(int)-1)と同じになっている
(int)-1は0xFFFFFFFF
unsigned charにすれば、0xFFは-1ではなく255として解釈されるので、intになっても255のままであり、printfの結果も0xFFになる
http://ideone.com/YUZ415
0843デフォルトの名無しさん2014/11/10(月) 17:07:23.03ID:PTGniR9V
>>842
ありがとうございます
引数がintのサイズまで拡張される、重要ですのでメモっておきます
0844デフォルトの名無しさん2014/11/10(月) 18:12:00.78ID:PTGniR9V
movsx esi,BYTE PTR [rax]
と、確かにesiにffが拡張されて(fffffff)ロードされて、printf()に渡されていることがわかりました。
ありがとうございましたm(_ _)m
0845デフォルトの名無しさん2014/11/10(月) 18:41:26.27ID:8QediavH
実際は関数引数以外にもいろんなとき(値として評価されるとき)に起きるので調べてね
検索ワードは汎整数拡張とか整数拡張とか
0846デフォルトの名無しさん2014/11/11(火) 20:17:36.43ID:Ck5u9kVe
integral promotion / integer promotion あたりで
0847デフォルトの名無しさん2014/11/14(金) 02:29:09.43ID:3ASGNoMR
初心者で申し訳ないんですが、
signed long long に最小値を入れると、
warning: integer constant is so large that it is unsigned
っていうのが出るんだけど、原因わかる人いませんか?
0848デフォルトの名無しさん2014/11/14(金) 02:54:33.17ID:LuzGjT1/
ヘッダファイルはどう作ればいいのか検索したら下記のサイトが
ありましたが、言ってることもコメントもよくわかりません。
http://d.hatena.ne.jp/saitodevel01/20110321/1300685958

特に、

>関数、変数等の管理の都合で、一つのソースファイルに対して
>1つのヘッダーを用意し、そのヘッダーに定義をまとめる現場もあるんですよね。
>外部参照しているものなのか、完全にローカルなものなのかを明確にすることと、
>一つのファイルで管理したい、という考えのところだと、ヘッダファイルに
>定義は詰め込む感じですね

とか
0849デフォルトの名無しさん2014/11/14(金) 08:56:50.25ID:PAxv0h4N
>>847
実際にそのコードを貼ってごらん。
# まさかとは思うが、0と0Lと0.0と0.fの違いが分かっていない悪寒。
0850デフォルトの名無しさん2014/11/14(金) 08:59:26.32ID:PAxv0h4N
>>848
私も分からん。

原則、ヘッダに定義は書かないで宣言の実にするべきだと思うが、
そうではない現場のことを言っているのなら無視すればいい。

つーか、Hatenaなんだから自分で聞けや。
0851デフォルトの名無しさん2014/11/14(金) 09:01:28.41ID:NoejJarl
> >外部参照しているものなのか、完全にローカルなものなのかを明確にすることと、
ローカルなものは.cにおいてますね
.hにローカルなものおいてるのは見たことないないかな

ローカルなヘッダーファイルを作ってるとかかな
0852デフォルトの名無しさん2014/11/14(金) 09:23:59.43ID:eD2UgsYu
つうか根本的には分かりやすいプログラムを書くために工夫しているだけのこと
複数ファイルからインクルードするならヘッダに書けばいいし
一つの.cファイル内でしか使わないならその中にstaticでかいとけばいいし
分かりやすくするにはどうしたらいいかということを自分で判断できるようになればおのずと答えはでる
結論としてはもっとプログラムを書いて分かりやすいプログラムになるようにするにはどうしたらいいかということを考えるべき
0853デフォルトの名無しさん2014/11/14(金) 09:26:19.60ID:3ASGNoMR
>>847
C言語始めたばかりなんであんま理解できてないかもです・・

コードはこれです↓
signed long long x3の宣言のところでwarningが出てしまいます。

#include<stdio.h>

volatile signed long long x4 = 1LL;

int main(void) {
unsigned long long x1 = 1LLU;
signed long long x2 = 1LL;
signed long long x3 = -9223372036854775808LL;
volatile unsigned long long x5 = 109690884550LLU;

x5 = (((x1+x2)+x3)+x4);

if (x9 != 9223372036854775811LLU) { printf("NG\n"); } else { ; }

return 0;
}
0854デフォルトの名無しさん2014/11/14(金) 09:27:50.38ID:3ASGNoMR
>>853

if (x5 != 9223372036854775811LLU) でした。
すみません。
0855デフォルトの名無しさん2014/11/14(金) 11:15:44.32ID:+rkmRu6a
>>848
組み込みソフトの分野だと分からんでもない。
専用のヘッダー、例えばram.hとかを作って使用する変数すべて、というか全てのRAM領域のアドレス(〜1KByte程度)を
マッピングしたファイルを作り、すべてのcファイルで共有することをやったことはある。
変数宣言の際にすべて先頭に特別な識別子、例えばEXTERNなどを付与しておき実体宣言と外部参照宣言は
マクロで切り分ける。
例えば、
#ifdef RAMDEFINE
#define EXTERN
#else
#define EXTERN extern
#endif

RAMDEFINEは何処かで1回のみ宣言して、このヘッダーを取り込むことで変数の実体の定義を行う。
(ヘッダーに対応させてram.cとかが分かりやすい)

まあ、OSも何もなくて全てを自前で準備しなければいけない小規模組み込みソフトの世界でのみ使えるテクニックだとは思うけどね。
蛇足だけど、組み込みソフトの分野では使用するチップによってはメモリアドレスによって、使用できるアドレッシングモードや
所要クロック数が異なることがあるため、メモリマップそのものを自分で全て把握して管理しないといけない。
変数を一つのファイルに纏めるのはアドレス管理を容易にするため。場合によってはvolatile宣言も必須。
0856デフォルトの名無しさん2014/11/14(金) 11:55:59.25ID:qPlOgKHi
>>853
signed long long x3 = -9223372036854775807LL - 1;

ここを読むといい(かも)
http://www.kijineko.co.jp/tech/creintro/integer-representation.html
0857デフォルトの名無しさん2014/11/14(金) 16:54:30.91ID:9h3dP9ft
>>848
複数の *.c で参照する内容を *.h に記述すると考えればいいのでは?
こういうときに仮定義は合理的なんだけれども、あまり賛同してもらえない、extern は要らない子!
0858デフォルトの名無しさん2014/11/14(金) 23:01:47.78ID:jkhIdRmy
組み込みって言っても、組み込みLinuxもあるからなぁ。
PICみたいにメーカーのお膳立てがしっかりしていると
アドレスも一々調べないで済むし。
0859デフォルトの名無しさん2014/11/15(土) 00:33:25.90ID:oIW00eXK
>>856
読んでみます!!
ありがとうございます。
0860デフォルトの名無しさん2014/11/15(土) 02:00:33.84ID:AgCJAqY5
>>848
この本でそのブログの人とだいたい同じことを言ってる。
この筆者も組み込み関係みたいで、ひとつの*.cソースにひとつの*.h
でというやり方。グローバル変数はexternで、ヘッダーに出さない関数はstaticで。

C言語 入門書の次に読む本 [改訂新版]
http://www.amazon.co.jp/dp/4774146129/
0861デフォルトの名無しさん2014/11/15(土) 02:08:31.40ID:6Z/ZPh8x
FILE構造体とその関連APIの設計も参考になるよね
0862デフォルトの名無しさん2014/11/15(土) 03:28:50.05ID:mJKZ+fx9
>>858
家電分野とかだとコスト至上主義で、ROM容量が数KB、RAM容量1KB未満とかで
入出力ポート数や内蔵タイマ数に特化した上にLCDやモータドライバなどの
特殊機能を取り込んだチップが普通に使われてる。
汎用のOSやチップとか使えたものじゃない。
0863デフォルトの名無しさん2014/11/15(土) 09:04:40.16ID:qc7doK9Y
>>862
家電系組み込みエンジニア発見。先の発言してた人と同じ人かな。
昔、同じようなことしてたことがあるから、大体やっていることは想像できる。
複数のタイマを並行して走らせて、外部の制御対象のデバイスのタイミングに合わせて
内部割り込みを発生させ、タスク管理でもしてるのだろう。
以前はリソースの制約が厳しいので、メモリを1バイト単位、処理時間を1クロック時間単位で
調整していた記憶がある。
最近は、やり方も変わっているのかと思っていたがあまり変わってないのだな。
0864デフォルトの名無しさん2014/11/15(土) 10:57:51.63ID:lm0Ap3/W
いつも疑問なのは
そのチップのコストダウンによっていくら安くなり
それによる1点特化の開発コストアップによりいくら高くなってるのか
ホントに安くなってるのか?ということ
0865デフォルトの名無しさん2014/11/15(土) 11:02:14.03ID:BCiMTvXD
廉価版な環境ではタスクとか走らせる余裕はないと思いますよ
もっと低レベルな泥臭いことやらないと
0866デフォルトの名無しさん2014/11/15(土) 11:30:27.15ID:mZUmkatx
組み込みがどうのってより、コンパイルとリンクがどう行われるか説明した方がよくね?
0867デフォルトの名無しさん2014/11/15(土) 11:32:50.73ID:BCiMTvXD
C言語でやれるようになっただけまし、家電系とか
ツールに使われてる人、多くなったし
説明しても...
0868デフォルトの名無しさん2014/11/15(土) 11:34:50.75ID:2nz92jze
>>865
組み込み系だと、扱う対象が外部デバイスだけだからタスクと言ってもそれ程大層なものじゃない。
単に処理モジュールを切り替える程度。
ただ、廉価版とはいえリアルタイム制約が厳しい組み込み系チップは、内部に複数のレジスタセットを持っていて
スタックを介さずに実行環境を切り替えるなど、意外にタスクスイッチングの機能は優秀だったりする。
0869デフォルトの名無しさん2014/11/15(土) 11:36:33.44ID:BCiMTvXD
それで、バギーな環境にならないなら
やってる人が優秀なのかも
0870デフォルトの名無しさん2014/11/15(土) 13:09:32.42ID:KvmYAgyz
>>864
例えばテレビの販売台数は 40万台/月ぐらい
シェア 10% で一年売れば約 50万台
10円安く作れれば 500万の利益だから
0871デフォルトの名無しさん2014/11/15(土) 14:02:12.91ID:vYFtI7/G
>>864
相対的なものじゃなくて絶対なものだと思うよ
0872デフォルトの名無しさん2014/11/15(土) 14:49:13.69ID:ZvNVTtLD
>>864
チップ単体のコストというよりは、システム全体のコストとのバランスだな。
大抵、ハードウェアの開発コストとソフトウェアの開発コストはトレードオフの関係になることが多い。
新しいLSIの採用と周辺回路の設計を行ったり、メカ周りの金型を起こすより安上がりに済むと判断すれば、
チップを含め新しくソフトを開発することによって(ソフト)開発コストが増加することになっても、
製品としては安くなる。
チップそのもののコストは安いに越したことはないがあまり大きな意味はない。
大抵の場合、現場ではハードウェアの付けをソフトウェアが払うことになる。
現場の身分制度を比喩した
「士農工商・メカ・エレ・ソフト」
の言葉がこの現状をよく示している。
0873デフォルトの名無しさん2014/11/15(土) 16:08:35.76ID:lm0Ap3/W
テレビのソフトって500万とかそんなオーダーなのか・・・
突貫工事甚だしそうだな

確かにチップ以前に周辺HWのコストも関係してきそうなのは少しわかった
でもチップもなぜか安くしたがってその結果ソフト開発費が膨れてるよなあ
0874デフォルトの名無しさん2014/11/15(土) 16:27:23.06ID:ZvNVTtLD
経営側からすれば、まず材料費などの直接費を抑えることを現場に要求するからなあ。
結果は余裕のない開発になり、手直し、後戻りなど現場が耐えられなくなって、人件費などの間接費が当初の見積りより膨れ上がる、と。
分かってはいるけど止められない、まあ、経営側のリスク管理の甘さだわな。
0875デフォルトの名無しさん2014/11/15(土) 17:30:43.92ID:kPlUCcYE
>>862
趣味工作でも汎用OSはめんどい。
汎用OSが動作する最小単位がモジュール化出来てないと基板設計からやるハメになるし、
Linuxくらいまで行くとタイミング制御とかめんどくさくなるからワンチップマイコンのほうが楽。
というか>>858は汎用OSが楽とか使いやすいと言ってるわけじゃないと思うんだが。

>>864
汎用OS使うと状態遷移が管理しきれなくなってテストのコストが膨大になるし、
8ビットマイコンとか個人でも数十円で買えるんだから、業務で仕入れたらもっと安くなるだろ多分。
汎用OS走らせられるほどのチップや周辺機器はそんなに安くない。
0876デフォルトの名無しさん2014/11/15(土) 17:46:23.55ID:KvmYAgyz
>>873
> テレビのソフトって500万とかそんなオーダーなのか・・・

お前馬鹿ってよく言われないか?
0877デフォルトの名無しさん2014/11/15(土) 17:59:51.70ID:UMRs7bgo
>858だけど、私は最近は1~数千台しか売らない装置の組み込みをやっている。
コストに関しては、数千万円の装置の制御部分なんてけちっても何の足しにもならないよ。
PICにしろ他のワンチップCPUにしろ、メモリ量に関わらず数出ているものは安いし。
数出ないものは何年間生き延びるか分からないから怖くて使えないしね。
0878デフォルトの名無しさん2014/11/17(月) 18:55:07.59ID:ga8uKdRQ
>>867
C言語の前の主流は?
アセンブリですかね
0879デフォルトの名無しさん2014/11/17(月) 19:22:50.87ID:ACjfM/vu
COBOL,FORTRAN
0880デフォルトの名無しさん2014/11/17(月) 19:37:02.90ID:4KBshbVy
アセンブリとかマニアックな呼び方する人は久しぶりに見た。
最近は殆んどアセンブラと呼ぶのが主流になってると思ってた。
意外にアセンブリという言葉もまだ使われてたんだな。
0881デフォルトの名無しさん2014/11/17(月) 20:40:36.82ID:oWS5dSpx
>>878
組み込み機器で使われると言う意味でなら、アセンブラ一択だろ。JK
0882デフォルトの名無しさん2014/11/17(月) 21:38:49.39ID:ga8uKdRQ
アセンブリは言語でアセンブラはコンパイラじゃないの
Google先生にはそう教わったけど
0883デフォルトの名無しさん2014/11/17(月) 21:45:52.32ID:JjmH5had
アセンブラは結局、何のアセンブラができるのよ?
って話になる
0884デフォルトの名無しさん2014/11/17(月) 21:47:17.36ID:ACjfM/vu
アセンブリ
アセンブル
アセンブラ

言語ツールをアセンブラと言っていたけどいつしか言語自体をアセンブラと言う様になった。
0885デフォルトの名無しさん2014/11/17(月) 21:57:53.43ID:ga8uKdRQ
確かにその三つの中で語呂がいいのはアセンブラですよね
いつのまに淘汰されたし
0886デフォルトの名無しさん2014/11/17(月) 22:11:13.37ID:PRhQCGe9
>>878
たぶん
C、なにそれ、美味しいの状態の人
おおかったから
0887デフォルトの名無しさん2014/11/17(月) 22:13:01.57ID:PRhQCGe9
というより
C使って作れるマイコン少なかった
ここ10年ぐらいでは、C使ってつくれるようになったのは
0888デフォルトの名無しさん2014/11/17(月) 22:49:47.05ID:WwamNeuQ
C言語が一般的になる前に、アセンブラとC言語の中間みたいな、構造化アセンブラというのを使ったことがある。
記述そのものはアセンブラのニーモニック表記だけど、Cライクな選択構造や繰り返し構造が使えるようになってた。
0889デフォルトの名無しさん2014/11/17(月) 22:56:50.50ID:PRhQCGe9
C言語に対応できないような舞子んで
C作らせようとしてた会社あったな
できたのかな
0890デフォルトの名無しさん2014/11/17(月) 22:57:49.80ID:PRhQCGe9
あ、コンパイラを作らせようとね
COBOLでCOBOLコンパイラとかとんでももあったようで
0891デフォルトの名無しさん2014/11/17(月) 23:00:03.97ID:oWS5dSpx
逆に暫らく前だと、Cのサブセットみたいなのは見掛けるね。
PIC見る限り、クロス開発ならCで充分だと思うけどね。
0892デフォルトの名無しさん2014/11/17(月) 23:14:08.22ID:+nMX5TA2
PL/M とか使ってたやつはいないのか
組み込みも範囲が広いから、業務用のプリンタとかだと、20年前からCで書いてるし
0893デフォルトの名無しさん2014/11/17(月) 23:21:43.05ID:PRhQCGe9
逝ってるさんが放棄した言語ですね
メインフレーム系ではまだ生き残ってることも
0894デフォルトの名無しさん2014/11/18(火) 03:58:44.85ID:fmsMXjf6
>>888
懐かしいな…確か1990年頃のトラ技かインターフェースで見た覚えが
0895デフォルトの名無しさん2014/11/18(火) 06:06:39.69ID:gVM8kF5f
>>894
そこまで遡らなくても、2000年過ぎ頃までは使われてた。
確か、当時NEC(現ルネサス)のチップの開発環境だったと思う。
その後はC言語に移行したが。
0896デフォルトの名無しさん2014/11/18(火) 07:01:07.13ID:Tz+Y+PUH
NECのマイコンとか懐かしいな
78Kシリーズか?
今までNEC、東芝、松下、富士通と色々使ってきたが
個人的には78Kシリーズが一番扱いやすかった。
扱っている内蔵デバイスの種類にもよるのだろうが。
0897デフォルトの名無しさん2014/11/18(火) 07:09:24.80ID:9qwkdrcP
ステマ・・・?
0898デフォルトの名無しさん2014/11/18(火) 07:19:42.33ID:bd7T6iUR
ただの回顧厨の昔語りだろ。
それより、いい加減スレチなんだが。
0899デフォルトの名無しさん2014/11/19(水) 00:26:04.30ID:44PVjppF
医療プログラマーが超高難易度の免許制に / フリーソフトやオープンソースの無作為配布も全面禁止
http://fox.2ch.net/test/read.cgi/poverty/1416286592/
0900デフォルトの名無しさん2014/11/21(金) 01:52:18.08ID:F9pcfIr3
業務系のUnixでCやってたけど(昔ね)
最近のCは組込み一択なのかな・・・・・

いや 組込みの話題多いから・・・・・

AIX(IBM製OS)はxlcというIBMが作ったコンパイラを使用してたけど、
OSの無い組込みってどこの製品を使ってるんだろうか・・・・
0901デフォルトの名無しさん2014/11/21(金) 08:03:37.92ID:tDfQtZmK
組み込みとか面白くねえわ
とにかく動作確認がやりにくい
VC#で作るGUIアプリみたいに実行ボタン押したら
すぐ結果が確認できるみたいな手軽さがない
プログラムをビルドしてターゲットのROMに実行ファイルを書き込んで
ターゲットの電源を入れなおすとかしないといけないそれも毎回毎回だ
画面が付いてる製品ならまだいい通信機器とか制御プログラムとか画面の無い製品は
オシロスコープで信号線を流れてる電圧をチェックして仕様書どおりか確認とかしないといけない
第一コーディングがほとんどやらない業務時間の9割はドキュメント作成と仕様検討会議とかプレゼン
俺はソースコードを読み書きしたいだけなんや
大体組み込みなんかハード屋が設計した時点でソフトの仕様もほぼ決まってしまう
テレビの画質なんかほぼLSIで決まるしソフト屋が頑張ったところで表面的な部分をいじってるだけにすぎないわ
それが面白いか俺はノーサンキューだわ少なくとも画面が出るプログラムじゃないと面白くないわ
0902デフォルトの名無しさん2014/11/21(金) 08:28:59.91ID:iFQePu0O
>>901
だからそれが全てじゃないってば。
組み込みLinuxでセルフ開発なんてケースもあるし、
ハードの調整用パラメータをソフトで制御するケースもあるんだから
いろんな意味で的を外しているぞ。

>>900
PICとかMSPとか普通、OSなんて入れない。
そうそう、ArduinoもノンOSだな。
クロス開発だから、ノンOS環境で開発するわけじゃないよ。

って書いてて思ったが、どの途C++コンパイラを使っているなぁ。
0903デフォルトの名無しさん2014/11/21(金) 09:07:36.45ID:6E4JnwC6
>>901
いちいちターゲットのROMにプログラム書き込んで動作確認とかしてるのは趣味の電子工作だけだろ。
少なくとも業務で開発するのなら、ターゲットの試作ボードとICE繋いで開発マシンの画面上で動作確認するだろ。
当然オシロスコープ使って試作ボードが駆動するモータやソレノイドの電圧波形とか確認もするが。

>>902
AndroidはノンOSではないよ。
Linuxのカーネルをベースにgoogleがカスタマイズしたものが
その正体。
AndroidのJVMもその上で動いてる。
0904デフォルトの名無しさん2014/11/21(金) 09:13:10.92ID:6E4JnwC6
>>902
AnduinoとAndroid見間違えた。勘違い。
09059022014/11/21(金) 12:27:42.97ID:p7Zbghyf
あー吃驚したw

デジタルサイネージなんかでAndroidの開発もないではないけど、
あれはあれでJavaだなぁ。純粋なCはどんどん少なくなってくる。
0906デフォルトの名無しさん2014/11/21(金) 12:40:56.31ID:iKlnST6s
デジタルサイネージは殆どWindowsでC#。
0907デフォルトの名無しさん2014/11/21(金) 12:48:18.44ID:p7Zbghyf
んじゃ、わたしのやっているのは「全体」から「殆んど」を除外した例なんだね。
それにしても、やはりCじゃないのかw
0908デフォルトの名無しさん2014/11/22(土) 00:38:37.03ID:DH1Wp7sH
>>901
Arduinoはその方向でかなり手軽になってるよ。
printfじゃないので書式付き出力は出来んけど、Serial.println()でprintfデバッグみたいなことも出来る。
0909デフォルトの名無しさん2014/11/22(土) 23:09:58.16ID:vTT4MJd/
超初心者です
#include <stdio.h>

int main(void)
{
int cont;

do {
int no;

printf("整数を入力:"); scanf("%d",&no);

if (no % 2)
puts("その数は奇数");
else
puts("その数は偶数");

printf("もう一度? [yes...0/no...9]:");
scanf("%d",&cont);

} while (cont == 0);

return (0);

}

参考書の例文を丸写ししたプログラムなんだけど
"コンパイラに内部エラーが発生しました。
file 'do.exe' not found"
ってエラーが出てしまう。なんでかな?
0910デフォルトの名無しさん2014/11/22(土) 23:11:31.61ID:FNFLDgFX
contを初期化しない参考書がどこにあるんですか
0911デフォルトの名無しさん2014/11/22(土) 23:24:34.72ID:vTT4MJd/
http://i.imgur.com/O0NtuXu.jpg
どっか読み落としてんのかな

int cont = 0;
にすればいいの?
0912デフォルトの名無しさん2014/11/22(土) 23:57:16.71ID:sSjpbQou
>>911
contを初期化しないのは余り宜しくないな。
まぁ、問題はそこにはないので、取り敢えず使ったコンパイラを書いてくれ。
0913デフォルトの名無しさん2014/11/23(日) 00:17:41.35ID:39EBzanl
フリーの学習C言語開発環境ってやつ使いました
0914デフォルトの名無しさん2014/11/23(日) 01:09:12.44ID:o0fOyf3/
>>909
コピペしてコンパイルしてみたが何の問題もなく
通って、実行結果もおかしくなかったぞ
0915デフォルトの名無しさん2014/11/23(日) 01:14:50.92ID:q/BdwCC0
file 'do.exe' not found"
「do.exe というファイルが見つかりません」

コンパイラの設定が間違ってるんじゃないの?
ネットからダウンロードしてインストールした?
学校のPCからコピーして持ってきたとか?
0916デフォルトの名無しさん2014/11/23(日) 01:26:08.12ID:qpRfZ2AJ
>>914
え???なんでだろ

>>915
ネットからダウンロードしました
そういえばそのままで設定いじってなかったな…
0917デフォルトの名無しさん2014/11/23(日) 01:41:46.80ID:3jCJoN6y
>>909
コンパイラによっては容認するものもあるけど、厳密にはCプログラムとしては文法的に誤りがある。
Cでは、変数宣言は全ての実行文の前に行なわなければいけない。
変数noがdo whileループ内部で宣言されているのは、C++の文法だと問題ないけど、Cの文法だと間違い。
0918デフォルトの名無しさん2014/11/23(日) 02:23:02.91ID:o0fOyf3/
>>917
そういえばそうか。でも Cygwin gcc で
gcc -Wall -ansi -pedantic をつけてコンパイルすると

#include<stdio.h>
int main(void){
for(int i=0;i<10;i++)
printf("%d\n",i);
return(0);
}
はちゃんと

エラー: 'for' ループ初期化宣言は C99 モード内でのみ許可されています
for(int i=0;i<10;i++)

と言われるのだが、上の例は言われないんだよな・・・なぜだろう
0919デフォルトの名無しさん2014/11/23(日) 02:24:29.77ID:Pyfj4pkz
どうせgccとかででa.outとかa.exeとして生成されてるのを
$ do
し続けてないよないよ言ってるだけというオチじゃあ

>>917
あまりgccで言うstdオプション使わないから間違ってたらごめん
-std=C99でもダメだっけ?
0920デフォルトの名無しさん2014/11/23(日) 02:29:24.70ID:Pyfj4pkz
>>918
Cの仕様上変数は{〜}で囲ったなかの一番上で宣言されてればいいから

void func(void){
int i=0;
printf("%d", i);
{
int j;
j=2;
}
}

とかは妥当なコード
0921デフォルトの名無しさん2014/11/23(日) 02:44:00.56ID:QHZ/jO6T
>917は間違い。
古いcであってさえ、ブロックの先頭で変数を宣言するのは問題ない。
c99であれば、ブロックの先頭である必要さえなくなる。
0922デフォルトの名無しさん2014/11/23(日) 05:16:16.04ID:qPVLpYB9
1. Hello world を確認
2. do...while を while... に書き直す
0923デフォルトの名無しさん2014/11/23(日) 07:14:26.32ID:fnmzg+1n
エラーメッセージからして
ソースコードの文法的なエラーとは別の問題が出てるよね
0924デフォルトの名無しさん2014/11/23(日) 08:02:28.94ID:/RofDeyq
まあ俺ぐらいのレベルになると構ってチャンが釣りをしてるとしか思えないな
0925デフォルトの名無しさん2014/11/23(日) 08:17:12.17ID:YMriJYw/
>>913の学習C言語開発環境って調べてみたら、β版の怪しいコンパイラみたいだな
しかも2011年から更新止まってるし
フリーにしても、もう少しまともな環境使えよ
0926デフォルトの名無しさん2014/11/23(日) 08:56:06.60ID:VB4k/RY7
Visual Studio Express 2012 for Windows Desktopは無料ですか?
0927デフォルトの名無しさん2014/11/23(日) 09:04:17.79ID:VB4k/RY7
>>926
自己解決しました。
09289092014/11/23(日) 09:12:02.34ID:39EBzanl
おお…よくわからないけどアドバイスありがとうございます

>>923
それとあと日本語ポップアップで
"オブジェクト参照がオブジェクト インスタンスに設定されていません。"
とも出てたわ

>>925
検索してみて1番上の方に出てきたから大丈夫かと思って…
visual studioは重くてダメだった
0929デフォルトの名無しさん2014/11/23(日) 09:44:33.05ID:QHZ/jO6T
>>928
なんでそうやって情報を小出しにするの?
馬鹿なの? 間抜けなの?
0930デフォルトの名無しさん2014/11/23(日) 09:49:21.26ID:yVuYMGtk
馬鹿で間抜けなのは間違いない、しかも無知だという事も確定だな…
0931デフォルトの名無しさん2014/11/23(日) 10:13:13.19ID:/RofDeyq
コミュニケーションが目的なんだよ
0932デフォルトの名無しさん2014/11/23(日) 10:53:53.94ID:FBxIR6RM
なんかgccを仕事で使うのって抵抗あるなぁ
仕事におもちゃ使うのが流行ってんのかねぇ
(gccの完成度の話ではなく、野良という意味)

いくら安いからってお客さんて馬鹿なのかな?
いや、メーカ品のコンパイラをずっと使ってたもんで・・・
0933デフォルトの名無しさん2014/11/23(日) 10:55:38.70ID:FBxIR6RM
>>929
>>930
こういうやつらマジ要らんわ
コンテンツから人遠ざけるだけだろ
0934デフォルトの名無しさん2014/11/23(日) 11:03:11.40ID:yVuYMGtk
>>932,933
「普通の入門者」は遠ざからないから安心しろwww
お前のような似非プログラマは実際必要ないから来なくなるのは正しいwww
0935デフォルトの名無しさん2014/11/23(日) 11:12:34.87ID:LxrnNrb8
メーカー製は保証があるから使ってるんでしょう
何を保証してくれるのかなと思いますが
作る人のミスまで見つけてくれるとかかな
0936デフォルトの名無しさん2014/11/23(日) 11:13:29.98ID:D8Ghfy88
>>928
おれもはじめたばかりで学習C言語開発環境使ってたけど
エラーが出るからやめたよ
あのサイトに載ってる範囲のプログラムだと確か大丈夫だけど
プログラムが長くなってくるとエラーが起きるようになってきた

ただ、そのプログラム、今こぴぺして
学習C言語開発環境に貼り付けてみたけどちゃんと動いたよ
ちなみに俺はその辺の学習内容だと全く大丈夫だった
むしろ手軽に使えるから重宝してた
動的配列だったかな?ずっと学習が先に進んだあたりで
はじめてエラーが起きるようになったからvisual studioに変えた
0937デフォルトの名無しさん2014/11/23(日) 13:00:34.14ID:Pyfj4pkz
>>932の人が言ってるのは
ゲームでよくオプソのコード使う事例増えてるけどそれも納得行かない感じでしょ
スレチだけどjQueryも使うなって話でしょ

とりあえず情報小出しにすると答えられないと諌めてる人をコンテンツから遠ざけるとか言って
自分はフリーコンパイラ使ってる奴はアホとか自分以外の考えの人バカにしてるだけでしょ
09389092014/11/23(日) 14:20:40.04ID:39EBzanl
>>936
うーん…
なんでだろ

他のコンパイラ使ってみるか
0939デフォルトの名無しさん2014/11/23(日) 17:46:29.19ID:0PqgWOdE
>>909
「コンパイラ内部エラー」=「コンパイラのバグを踏んだ」
コンパイラを変えれる状況なら変えてしまえ。

>>912
条件分岐に辿り着く前にscanfしてるから、そっちよりもscanfの戻り値見ないことを問題視したい。

>>917
C系の変数宣言が許される場所のバリエーションは
「スコープの先頭」「ブロックの先頭←古いC」「任意←最近のCやC++等」がある。
>>909はブロックの先頭だから普通は問題ない。
>>918はfor文自体の中で、ブロックの中ではないから古いCの基準ではダメ。

>>923>>925
この手の学習用のCコンパイラやインタプリタってバギーなのが多いんだよね。
小型軽量でJIT実行できれば良いってのが大半だし、TCC使うのが一番だと思う。

>>932
GCCとかclangとかICCとか>VCとか>マイコンなどの専用コンパイラ>胡散臭い学習用Cコンパイラ
個人的な評価だけど…マイコンメーカが自社製品用に作ってるコンパイラは余り信用出来ない。
メーカ製だとユーザ少ないし腰も重いことが多いが、オプソの方は何人かがバグを踏めば修正が入る。
まぁ一度メーカ製コンパイラのバグで痛い目見るといい。アセンブラですら信用ならんからな…

>>935
バカ高いサポート契約結んでれば、自社製品のバグを踏まないように顧客のコードに修正指示を出してくれるんじゃないかな。
そして//コメント禁止とか名前の文字数制限とかの腐れたコーディング規約が生成される…と。
0940デフォルトの名無しさん2014/11/23(日) 18:59:08.21ID:fnBJfGZE
intelかpgi使うだろ。普通。gcc(笑)
0941デフォルトの名無しさん2014/11/23(日) 20:27:58.30ID:QHZ/jO6T
SBC(Single Board Computer)なんかだと、しばしばクロスコンパイラがgccなんだよね。
gccを否定している人達は現実が見えてないとしか思えない。
0942デフォルトの名無しさん2014/11/23(日) 20:44:21.17ID:pl8PYAOz
メーカー製のコンパイラ使ってる俺って偉い君でしょ
スルーでいいよ
0943デフォルトの名無しさん2014/11/23(日) 22:06:57.11ID:fnmzg+1n
軍事宇宙向けはgcc
0944デフォルトの名無しさん2014/11/24(月) 00:14:05.86ID:ALHBj7yp
f何とか社さんのコンパイラに合わせてc++11のコードを03仕様に治すのが辛いっていう日記がqiitaにあったな

学習用ならtccは確かにいいかも
0945デフォルトの名無しさん2014/11/24(月) 04:28:34.07ID:ejUX+ggI
iccの元になってるのはなんでしょうね
0946デフォルトの名無しさん2014/11/24(月) 05:13:35.34ID:oCsnChH4
>>943
軍事だとCじゃなくてADAだったりして
0947デフォルトの名無しさん2014/11/24(月) 07:26:20.08ID:fEDkGqiu
clang/LLVMに収束
0948デフォルトの名無しさん2014/11/24(月) 12:41:53.42ID:vb0rebZq
LLVMは無駄に機能が増えるという罠にハマりつつある気がするから命を預けるには足らない
0949デフォルトの名無しさん2014/11/24(月) 12:56:24.02ID:00mMx8o2
LLVMは仮想アセンブラだろ。
インテルなど実アセンブラも拡張命令とか出し続けて無駄に機能が増えても損はないだろう。
0950デフォルトの名無しさん2014/11/24(月) 17:22:24.44ID:+YhL1jR3
cで重複の無い順列のパターンを表示するプログラム作ってます。
スライド形式

abcdの内 bcdを3回スライド、その前にcdを2回スライド、その前にdをスライド
ってやる方法だと重複が出ます。


なので樹系図的に表示すれば重複は無いと思うのです。

どうすればいいですか?

再帰でやると、データ構造が全然分からなくなります。
再帰で配列使ったら、配列=ポインタだから滅茶苦茶になります。
0951デフォルトの名無しさん2014/11/24(月) 17:50:38.49ID:+YhL1jR3
c言語にシグナチャという機能が無いから再帰関数難し過ぎ
0952 ◆QZaw55cn4c 2014/11/24(月) 18:09:46.71ID:SQsB+YJ2
ちょっとコード書いてみてよ
0953片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/24(月) 18:21:13.32ID:cxOxEmtO
C++のstd::next_permutationのソースにアルゴリズムがあるから、俺が書くまでもない
0954デフォルトの名無しさん2014/11/24(月) 18:26:44.44ID:43udTiuR
>>950
https://github.com/ampl/gsl/tree/master/permutation
0955デフォルトの名無しさん2014/11/24(月) 18:42:27.74ID:qSgsCHeq
>>950
再帰でいいとおもうよ
http://ideone.com/3CWKVR
0956デフォルトの名無しさん2014/11/24(月) 19:24:31.49ID:dugjCC7i
>>955
ありがとうございます!!
でも仕組みが分からない…
教えて下さい
0957デフォルトの名無しさん2014/11/24(月) 20:10:01.48ID:oNJsluPP
>>956
      ハ,,ハ
     ( ゚ω゚ )  お断りします
    /    \
  ((⊂  )   ノ\つ))
     (_⌒ヽ
      ヽ ヘ }
 ε≡Ξ ノノ `J
0958デフォルトの名無しさん2014/11/24(月) 20:33:17.07ID:qSgsCHeq
>>956

関数 f は、文字列 str[] の start <= i < end の部分を入れ替えてできる順列を表示する関数です
str[] の中のデータは内部で書き換えますが、リターンするときには元と同じにして戻ります

例題の場合、最初の呼び出しでは
先頭の文字を a→b→c→d→a とローテートしながら、その途中途中で再帰コールしています
ツリーで言うなら枝が4本できたってこと。
こうして次々に再帰コールで枝分かれしていって、最後に分岐しなくなったところで表示します
0959デフォルトの名無しさん2014/11/24(月) 20:50:31.37ID:S++9Igbs
App Storeの激問というアプリを解くプログラムを作ったのですが、総当たりで探していっているため、1つの問題を解くのに10日くらいかかってしまいます。どうすればいいのでしょうか?
0960デフォルトの名無しさん2014/11/24(月) 21:08:09.72ID:qSgsCHeq
えーと、ねたでしょうか?自分で答え言っちゃってますよね
0961デフォルトの名無しさん2014/11/24(月) 21:12:50.86ID:S++9Igbs
>>960
どういう意味でしょうか?
どうすれば改善できるかを聞いております。
0962デフォルトの名無しさん2014/11/24(月) 21:31:50.61ID:ALHBj7yp
スマホのクロックアップ
性能のいいパソコンを使う
総当りをやめる

好きなの選べ
0963デフォルトの名無しさん2014/11/24(月) 21:45:36.44ID:/Xnwup+Z
・頭のいい奴に飯を奢って改善してもらう
・諦める
も、追加で
0964デフォルトの名無しさん2014/11/24(月) 21:50:46.08ID:VEx2A02b
総当たりで探すのをやめましょう。
0965デフォルトの名無しさん2014/11/24(月) 21:52:36.39ID:ALHBj7yp
>>963
却下
0966デフォルトの名無しさん2014/11/24(月) 22:26:51.93ID:Yz9Tit6A
つーか、10日で解いたってのは最適解なのか?
0967デフォルトの名無しさん2014/11/24(月) 22:28:12.59ID:S++9Igbs
>>962
いいスペックのでやっても数日かかるとおもうのですが...
>>964
総当たり以外の方法が浮かばないです
0968デフォルトの名無しさん2014/11/24(月) 22:29:01.84ID:S++9Igbs
>>966
一応最適解です
0969デフォルトの名無しさん2014/11/24(月) 22:30:16.36ID:cxOxEmtO
ソースアップップ
0970デフォルトの名無しさん2014/11/24(月) 22:36:23.63ID:DZ0ISr8h
まだアプリ公開から10日たってなくね?
0971デフォルトの名無しさん2014/11/24(月) 22:39:01.46ID:ALHBj7yp
それは厳格にやる必要はあるのか?
時間と相談した結果の近似解じゃダメなのか

それとそのアプリ知らないんだが、簡単にでも説明とかないんだ
0972デフォルトの名無しさん2014/11/24(月) 22:39:01.74ID:Yz9Tit6A
まじかよww
0973デフォルトの名無しさん2014/11/24(月) 22:59:50.33ID:SQsB+YJ2
>>959
ルールがわからないよ‥
�@問題領域は 8x8?
�A上下左右どのスワイプでどの駒(□)が動くのかが今ひとつ見えない(最初の問題を解いたかぎりでは)
0974デフォルトの名無しさん2014/11/24(月) 23:03:18.25ID:S++9Igbs
>>970,972
少ない手数からの総当たりなので最適解は必ず見つかると踏んでおります。
ちなみに10日というのは、1秒で約900手としたときのおおよその時間です。
>>971
http://www.youtube.com/watch?v=7wi9f8VudSA/
こちらを見ていただければ理解出来ると思います。
0975デフォルトの名無しさん2014/11/24(月) 23:07:04.50ID:84Bp5Ajb
例題くらい欲しいな
0976デフォルトの名無しさん2014/11/24(月) 23:11:33.19ID:Yz9Tit6A
方針決めて絞り込むしか無いんじゃないの?
障害物を通過したときの理想的な形状を定義するとか。
0977デフォルトの名無しさん2014/11/24(月) 23:16:10.68ID:dugjCC7i
>>958
ローテ以外の方法ないですかね?
ローテのプログラムはすでに作りました。

樹形図を辿る方法です。
0978デフォルトの名無しさん2014/11/24(月) 23:22:57.36ID:qSgsCHeq
>>961
すまん、問題見てきました。結構難しいね。
比較的短い手数を探索して点数付けて、正解に近いいくつかを再度探索、を繰り返すのはどうかな?
0979デフォルトの名無しさん2014/11/24(月) 23:34:59.02ID:S++9Igbs
現状のコードです。
見るに堪えないコードだと思いますが、ご容赦ください。
http://codepad.org/LvK4Bk4N
0980デフォルトの名無しさん2014/11/25(火) 00:34:23.56ID:uMipTR6D
自分の手で解いてみたらなにか見えるかもね(無責任)
0981デフォルトの名無しさん2014/11/25(火) 01:10:16.99ID:qBXs+9tQ
>>978
まずその比較的短い手数のものすら見つけることができないです。
0982デフォルトの名無しさん2014/11/25(火) 01:18:49.04ID:uMipTR6D
>>981
いくつか候補が出てきてその候補の評価関数の出力が最もいいものを出力してるなら
得られた解が最も良いわけではなくともなんとなくよさそうな解を出力すればってことでしょ
話から察するに総当たりでやって一番初めに見つけたものを出力って感じだろうけど

いっそ遺伝的アルゴリズムみたいなサイコロ振って出た目によって適当に動かし方決めるやり方で実装してみるとか(無責任)
0983 ◆QZaw55cn4c 2014/11/25(火) 01:26:15.51ID:N0BVx0oQ
A* あたりでヒューリスティック関数をでっちあげれば、近似解くらいはでるかも
0984デフォルトの名無しさん2014/11/25(火) 01:43:11.47ID:ySd7D+hF
よく見てないけど、途中で変形が数段階あるわけでしょ。
その全部の段階の形状を先に求められれば早そうだけどな。
0985デフォルトの名無しさん2014/11/25(火) 02:07:05.26ID:rPvMoqx2
>>959
並列化は?
0986デフォルトの名無しさん2014/11/25(火) 02:46:39.96ID:uMipTR6D
ところでこれなんでturn_fieldさせてるの?
回転させないで直接移動させたほうが計算コスト減らないか

270度回転が必要な時なんて90度回転を3回やってから
動けるブロックだけ下に移動なんてしてるの無駄だよね
0987デフォルトの名無しさん2014/11/25(火) 03:01:52.00ID:uMipTR6D
firstだけいじってみたが多分評価関数が正しくないんじゃないかこれ
http://codepad.org/hcs2kRzk
0988デフォルトの名無しさん2014/11/25(火) 05:57:20.17ID:fATWhlU/
総当りにしとけ。
予想ではこのくらいのマスだったら1秒以内で解けると思うんだが。
スタート、終わりどちらから始めてもいいので、交互に一手づつ全パーンを生成して、進めた局面はキャッシュして
スタート、終わりのキャッシュは個別にもっておいて、反対のキャッシュにヒットした時が正解だ。
0989デフォルトの名無しさん2014/11/25(火) 05:58:38.64ID:0UX0vxRL
>>987
なんか違うっつーか29回目でおかしな最適解出しちゃってるやん
0990デフォルトの名無しさん2014/11/25(火) 06:30:17.92ID:fATWhlU/
例題としてこれが解ければいいか。やってみるか。

http://applitown.com/wp-content/uploads/2014/11/IMG_4602-233x350.jpg
http://applitown.com/puzzle/8943

01100000
01102000
01002033
01002033
11000030
11020030
00020330
00020330
0991デフォルトの名無しさん2014/11/25(火) 06:32:22.27ID:usPvVGxo
>>986
4方向について長々と書くよりは、移動させる方向は固定してフィールド自体を回転させたほうが簡潔に書けるかと思ったためです。
>>987,989
一度最初の方は当たらなくしようと思い、10手目くらいから当たるようにしたのですがほとんど変わらず、どうせなら最初から当たるように元に戻したのですが、どこか1つの値を戻し間違えたみたいです。
そこさえ直せばちゃんと動きます。
>>988
1つのマスに1つのブロックが対応する訳ではないので、膨大な数になると思われます。
0992デフォルトの名無しさん2014/11/25(火) 06:46:50.14ID:usPvVGxo
最初のfor文のiの初期値を修正し、さらに最適解の出力は不要と判断し削りました。ら
http://codepad.org/WlW1bUIi
0993デフォルトの名無しさん2014/11/25(火) 06:51:44.89ID:usPvVGxo
>>983,985
調べてみたのですが、イマイチよく理解できませんでした。すみません。
>>984
単に形状が変わっていくのではなく、さらに分裂や結合が頻繁に起こりうるので、それは難しいかと思われます。
0994デフォルトの名無しさん2014/11/25(火) 07:31:08.00ID:KGUPIGkG
あ
0995デフォルトの名無しさん2014/11/25(火) 09:25:20.42ID:fATWhlU/
>>991
やってないけど、最大4手でスタート、エンドから10手(計20手)進める場合の局面数は、
1048576×2以内。回転で対称な配置はエンドからの展開は不要。
手数が増えるとわからないけど、そんなに時間かからない気が。
0996デフォルトの名無しさん2014/11/25(火) 09:28:34.72ID:fATWhlU/
間違った。スタートとエンドの動作が対称的ではなかったか。
壁にぶつかってるやつの動作が、直前にぶつかったか、ぶつかってステップ食ってるかで動きが違うか。
0997デフォルトの名無しさん2014/11/25(火) 09:56:02.56ID:NsIg3ARf
20手でクリアできる局面なら995の通り両側探索総当たりでもよさそうだけど
40手必要になったらもう無理だねえ
誰か実装してみてw
0998デフォルトの名無しさん2014/11/25(火) 10:12:51.12ID:OORXmuq/
次スレはありますか?
0999デフォルトの名無しさん2014/11/25(火) 10:23:56.94ID:oMA0ONCn
そんなものはない by 関羽
1000デフォルトの名無しさん2014/11/25(火) 11:22:34.75ID:/YcGydE4
次スレ建てました。

C言語なら俺に聞け(入門編)Part 127 [転載禁止]©2ch.net・
http://peace.2ch.net/test/read.cgi/tech/1416882087/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。