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

C言語なら俺に聞け(入門編)Part 131 [転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2015/11/22(日) 17:49:08.07ID:+9G59Pl/
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 130
http://peace.2ch.net/test/read.cgi/tech/1439071526/
★過去スレ
C言語なら俺に聞け(入門編)Part 129
http://peace.2ch.net/test/read.cgi/tech/1432674955/
http://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++の宿題片付けます 168代目
http://peace.2ch.net/test/read.cgi/tech/1408962564/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
【重要】
当たり前の事ですが、2chではコピペ荒らしは禁止されています
0002デフォルトの名無しさん2015/11/22(日) 18:25:54.05ID:a00B+hc9
C言語でWindowsのフォルダやファイルの検索プログラムを作っています。
疑問なんですが何故エクスプローラだとファイル探索に時間がかかるんですか?
N個のファイルがあった場合、全部調べても計算量はO(N)だと思うのですが、
何秒、何十秒とかかるのは何故でしょう?
C言語の文字列操作関数使ってエクスプローラに変わる機能が作りたいんですが
そもそも何故こんなにエクスプローラが使えないのか分かりません…
僕の使い方が悪いのかもしれませんが
0003デフォルトの名無しさん2015/11/22(日) 18:26:37.05ID:a00B+hc9
ちなみにエクスプローラ作成は大学の冬の自由課題です。
これ作れたら結構便利なんじゃないかと。
0004デフォルトの名無しさん2015/11/22(日) 18:51:07.88ID:zgumCplV
エクスプローラで何すると遅いって言ってるの?
ウィンドウ右上にある検索ボックスでの検索?

まあ何であれ自分で作ってみれば原因もわかるんじゃない
CUIで作るだけじゃ分からんかもしれんけど
0005デフォルトの名無しさん2015/11/22(日) 18:54:04.16ID:dFORHBUS
前スレ最後盛り上がってたなー
0006uy ◆Qawu9.2l1E 2015/11/22(日) 19:16:19.32ID:hFpqZnLD
Windowsは10になっても作りがおかしい
新規アカウント作るとその後数日間だけは速い
でも、どこかにキャッシュが蓄積されてんだろうね
少しずつエクスプローラーが重くなる
もう大容量ファイル以外はSSD推奨の流れ
0007デフォルトの名無しさん2015/11/22(日) 19:20:17.51ID:ISFyIiRr
>>2
あの検索はファイル名のみを検索してるわけじゃないから
0008デフォルトの名無しさん2015/11/22(日) 19:29:21.11ID:vggKhYqJ
>>2
プログラムが完成したあたりでEverythingの存在を知って愕然とするが良い
コンマ何秒でリアルタイム検索が出来るWindows最強の検索ソフト
これ使ったこと有ったら自分でつくろうなどと言う発想は最早出てこない

>>3
Vista以降であればIExplorerBrowserってのが有るから
殆ど何も書かなくてもエクスプローラ風のファイラーが作れる
http://oldworldgarage.web.fc2.com/programing/tip0010-1_IExplorerBrowser.html
http://eternalwindows.jp/shell/explorerbrowser/explorerbrowser01.html

ツリービューがほしい場合はINameSpaceTreeControlを使うらしい
http://eternalwindows.jp/shell/explorerbrowser/explorerbrowser04.html
こちらに関しては使ったことがないので良く知らない
0009デフォルトの名無しさん2015/11/22(日) 19:50:08.20ID:yPUHF/WV
>>5
ちょっと理解力の足りない子が暴れてたからね
0010デフォルトの名無しさん2015/11/22(日) 19:53:44.91ID:yPUHF/WV
>>7
むしろファイル名だけの検索に戻して欲しい
ファイルの中身を検索したい時はエディタとかでやるし
0011デフォルトの名無しさん2015/11/22(日) 20:01:06.71ID:ISFyIiRr
ファイル名だけで検索したけりゃコマンドプロンプトから検索するだけの話だろ
0012デフォルトの名無しさん2015/11/22(日) 20:05:04.34ID:/loq94Ox
>>9
そういうことにしたければそういうことにすればいいんじゃ…

VLAとは関係ないpush/pop最適化の話をやぶから棒に振っておきながら、
そんな最適化はループ状況でスタックオーバーフローを起こすと突っ込まれたとたん
話題を最初からTCCのVLAの実装の話であったかのように捻じ曲げた醜態はdatと皆の記憶に残ったであろう…
0013デフォルトの名無しさん2015/11/22(日) 20:09:00.46ID:vggKhYqJ
お前もう出てくんな
0014デフォルトの名無しさん2015/11/22(日) 20:31:44.48ID:dHfinU55
>>12
まだ言ってるのかよ…
マジ、お前の理解力が無さすぎ
0015デフォルトの名無しさん2015/11/22(日) 20:41:53.91ID:/loq94Ox
>>14
ID:dHfinU55が何と主張しようとも、>>12と次の3点が事実なわけだが…
 ・ループ状況におけるpush/pop最適化がうまく働くケースと、スタックオーバーフローを引き起こすケースについては漏れが述べた(特に否定されず
 ・VLAについて、ループ内でサイズが増える場合は都度新たな領域の確保が必要であることも漏れが述べた(特に否定されず
 ・gotoでいかに関数ないジャンプしようとも、VLAの開放は関数を抜ける際に問題なく行えることも漏れが述べた(特に否定されず
この上何を理解せよというのか
傷ついたID:dHfinU55の心?

>>13
(以下略
0016デフォルトの名無しさん2015/11/22(日) 20:52:05.39ID:yPUHF/WV
>>12
> VLAとは関係ないpush/pop最適化の話をやぶから棒に振っておきながら

VLA も push/pop もスタック操作であることも理解できないのかよ…

> そんな最適化はループ状況でスタックオーバーフローを起こすと突っ込まれたとたん

元々その話なんだが…
ひょっとしてスタックオーバーフローは自分が最初に指摘したとか思ってたりするのか w

> 醜態はdatと皆の記憶に残ったであろう…

確かにそうだな
誰の醜態とは言わないけどさ
0017デフォルトの名無しさん2015/11/22(日) 20:54:00.98ID:dFORHBUS
議論点は若干ズレ気味だったけど、個人的にはいい気付きになったなー
可変長配列がスタックオーバーフローの原因になり得るって、言われてみればわかる話だけど、そこに目がいかなかったからね

でも次からはその可能性も検討材料にできるので、傍観者だったけど俺は成長出来たな
0018デフォルトの名無しさん2015/11/22(日) 21:09:49.71ID:yPUHF/WV
>>17
> 可変長配列がスタックオーバーフローの原因になり得るって

いやいや、ブロックの終端で普通に解放すればいいだけ
個人的には TCC の実装がおかしいと思う
どこかのアホが約一名勘違いしてるみたいだけど w
0019デフォルトの名無しさん2015/11/22(日) 21:12:54.40ID:/loq94Ox
>>16
>VLA も push/pop もスタック操作であることも理解できないのかよ…
素人カヨ…
1. 藻前が出したpush/popはcallerが準備する(引数領域の)話
本来は領域を残すことは必須では無い
2. VLAはcalleeが中でやる話であって、対象となるスタックフレームの位置が違う
なおかつ、ループ状況かつサイズ増大する配列が複数のときは、領域を残すことが必須となる。

これらが一緒とか、TCCの話にすり替えた件といい、話の捻じ曲げはお得意のご様子で…

>> そんな最適化はループ状況でスタックオーバーフローを起こすと突っ込まれたとたん
>元々その話なんだが…
>ひょっとしてスタックオーバーフローは自分が最初に指摘したとか思ってたりするのか w
語るに落ちた?
本来のpush/pop最適化はスタックオーバーフローなんて起こしません
スタックオーバーフローを起こすぐらいなら、ループ内でSPをオフセットして帳尻を合わせるインストラクションを1発実行する方がまだマシだからだ
(>>15の箇条書きの一発目、または前スレ>>998の「ワカル」2発目

どっちがより深く理解して喋ってるのか衆目に明らかになったってカンジ?
0020デフォルトの名無しさん2015/11/22(日) 21:23:33.30ID:vggKhYqJ
だから、ループ内で毎回allocaして、かつ、ループ毎にSPをリセットしない環境があって
allocaしまくってスタックオーバーフローしましたってだけの話だろ
お前が一人で勝手にもつれさせているだけ
https://www.youtube.com/watch?v=BKorP55Aqvg
↑これの「赤い線なのに君が書いた線は青いせんじゃないか」
とかいってるやつがお前
0021デフォルトの名無しさん2015/11/22(日) 21:32:00.55ID:/loq94Ox
スマン漏れも半分語るに落ちてたわorz
>>19の前半のは撤回
ループ内でサイズ増大するVLAが複数あっても、ループの終わり(そのVLAがスコープを抜けたとき)にSPリセットすれば済むわ;

それはそうとして、
>>20
んまーそんな感じやね
ただ「実体を残す事にはパフォーマンス上の理由がある。 」と言い出した
(SPリセットしないことを言い出した)のは前スレの>966であって漏れジャナーイ
0022デフォルトの名無しさん2015/11/22(日) 21:35:19.68ID:zgumCplV
20の動画面白いな こういうのを起点に英語リスニングしてみるかな
でも今回は一人だけおかしい側だったから動画の状況とは違うな
0023デフォルトの名無しさん2015/11/22(日) 21:50:13.11ID:zgumCplV
直角にできるのは2本の線だけ というのは間違いだな
3次元空間なら3本お互いに直角にできる
もっと多い次元の空間とか考える方向があるのならもしかして7本もできるのかも?(よくわからん)

背景色と当てる光の色をうまくすれば緑のインクで赤い線を書くこともできるような気がしなくもない
と思ったが緑のインクの時点で赤い光は吸収されるからどう頑張っても無理か
0024デフォルトの名無しさん2015/11/22(日) 21:57:25.25ID:yPUHF/WV
>>19
> なおかつ、ループ状況かつサイズ増大する配列が複数のときは、領域を残すことが必須となる。

はあ?
何のために領域を残すことが「必須」なのか説明してからほざきなよ w
ちなみにそんなアホな主張をしてるのは君だけだから
0025デフォルトの名無しさん2015/11/22(日) 22:01:48.36ID:yPUHF/WV
ああ、すでに書いてあったか

> ただ「実体を残す事にはパフォーマンス上の理由がある。 」と言い出した
> (SPリセットしないことを言い出した)のは前スレの>966であって漏れジャナーイ

そいつはパフォーマンス上「やることが」あるって書いてる
「必須」と勘違いしたのは君だけ
0026デフォルトの名無しさん2015/11/22(日) 22:16:32.92ID:wAq+seW6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char byte;

int main(void) {
&nbsp;for (size_t a = 4; a; --a) {
&nbsp;&nbsp;size_t size = sizeof(size_t);
&nbsp;&nbsp;byte b[size + a * 16];
&nbsp;&nbsp;fprintf(stderr, "%p %u\n", b, sizeof(b));
&nbsp;&nbsp;memcpy(b, &a, size);
&nbsp;&nbsp;printf("%u\n", *(size_t *)b);
&nbsp;}
&nbsp;return 0;
}

>>18も勘違いしてないか?
こんな風に"ちゃんと"可変長配列にするとgccでもアドレスずれるよ。
http://www.c-tipsref.com/words/stackframe.html の2番目の図を拝借させてもらうと、
ローカル変数領域が途中結果領域を超えてしまうから必然的にallocaし直すハメになる。
スタックに取らずにvectorみたいにヒープに取れば無問題なんだけど。
とにかく一時変数のスコープは短くってのとループ内のvlaは気をつけたほうがいい。
0027デフォルトの名無しさん2015/11/22(日) 22:22:36.57ID:wAq+seW6
TCCのケースはあくまでも「固定長配列とみなせる場合の最適化」の話だからね。
0028デフォルトの名無しさん2015/11/22(日) 22:33:39.14ID:/loq94Ox
>>25
>そいつはパフォーマンス上「やることが」あるって書いてる
漏れがスコープを抜けた変数の実体を残す必要は無い、と書いたのに対して
なんかスゲー剣幕で、実体を残す奴はバカいわんばかりに(実際には「アホウ」と書いてた;
「実体を残す事にはパフォーマンス上の理由がある。 」と書いてた気がするYO

ていうかやっぱあんまりVLAに関係ない発言だったのねん(そもそも>>966のときはまだbが通常の自動変数というスレの流れだったし、
0029デフォルトの名無しさん2015/11/22(日) 22:58:13.24ID:vggKhYqJ
>漏れがスコープを抜けた変数の実体を残す必要は無い、と書いたのに対して
                     ~~~~~~~~~~~~~~~~~~~~~~~~
>なんかスゲー剣幕で、実体を残す奴はバカいわんばかりに
              ~~~~~~~~~~~~~~~~~~~~~
この時点で日本語としてのつながりがおかしいでしょ
他人の文章を読み取ったり表現したり論理的に考える能力が無いから
話がもつれるんだよ
0030デフォルトの名無しさん2015/11/22(日) 23:06:28.73ID:vNSTGRzm
マ板から移動してきました。
https://github.com/kazz0117/LED-Displaay-Digital-Clock-Using-H8-3694F
始めてマイコンボードで作った作品です。
ソースレビューをお願いします。
29歳のアマチュアPGです。
0031デフォルトの名無しさん2015/11/22(日) 23:34:21.20ID:/loq94Ox
>>29
ちょっそれtypoだから
>>28訂正
誤: 実体を残す奴はバカいわんばかりに
正: 実体を残さない奴はバカいわんばかりに
0032デフォルトの名無しさん2015/11/22(日) 23:54:10.80ID:vNSTGRzm
すまませんurl間違えました。
https://github.com/kazz0117/H8-3694F-Digital-Clock
これでプロとして通用する見込みがあるか判定もお願いします。
0033デフォルトの名無しさん2015/11/23(月) 00:10:09.36ID:b98i53Mh
いいねー、このカオス感
これぞ2chだって感じだなー
0034デフォルトの名無しさん2015/11/23(月) 00:10:57.31ID:AALv4lAu
>>18
gotoでスコープ外れる時も解放しなきゃならんが、
GCCの拡張でラベルのアドレスをvoid *変数に入れた間接gotoだと、実行時までブロックの外に抜ける事が
決定しないので、解放できなくなる。
0035デフォルトの名無しさん2015/11/23(月) 00:31:50.54ID:fxSBPtHV
>>32
さっと見た感じ読みやすいコードだと思います。
気になった点としては、
1. せっかくtypedef unsigned char _UBYTEとかで型を隠してるのに使われてない
2. #define hoge 0とか1とかは可能な限りenumを使いたい
3. そのファイル内でしか使われない関数はstaticを付けてスコープを制限したい
4. 3の結果グローバルな関数のプロトタイプ宣言は.hに移す
5. main()とか若干長いのでもうちょっと短くしたい(冒頭の処理をhoge_init()にまとめるとか)
あまり細かく見てないけどこんな感じです。
0036デフォルトの名無しさん2015/11/23(月) 00:33:56.81ID:fxSBPtHV
>>35の補足
アンダースコアで始まるシンボル名はコンパイラ側でリザーブされているので使わないように。
インクルードガードとかもね。どうしても付けたいなら末尾に。
0037デフォルトの名無しさん2015/11/23(月) 00:50:28.55ID:m2YBTfVY
>>35
>>36
見ていただいてありがとうございます。
ご指摘の改善点、のちほど適用させていただきます。
0038デフォルトの名無しさん2015/11/23(月) 00:51:27.18ID:VAY4UJYX
【 オンラインTCGエディター 】 >>1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正。
↓
機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。
↑
下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1447639727/-18
0039デフォルトの名無しさん2015/11/23(月) 07:52:00.20ID:UOHAVa5A
>>23
グラムシュミットの正規直交化ってまさにそれじゃないの?
0040デフォルトの名無しさん2015/11/23(月) 19:33:30.67ID:1C9r5blK
ラズベリーパイをPCからリモート接続して、ビルドしてる時に以下のエラーが出ました。
何故でしょうか。
最初のうちは、問題なくビルドできていたのですがヘッダファイルを追加した際に
発生しています。
なので、ヘッダファイル関連の部分をコメントアウトしても同様のエラーになるます。
ビルドはPC上のNetBeansを使って、ラズベリーパイ上に転送してラズベリーパイ上でコンパイルしています。
ちなみにMAKEは良くわからないので、NetBeans任せです。

「main.c:(.text+0x1c): `softPwmWrite' に対する定義されていない参照です」
0041デフォルトの名無しさん2015/11/23(月) 19:59:18.70ID:7jQqFmWD
>>32
これ、プロとして通用以前にまともに動かないだろ?
メインのループの中でLED表示もキー読み取りもしてないじゃんwww
0042デフォルトの名無しさん2015/11/23(月) 20:19:49.24ID:4hTn3ZTz
>>41
詳しく見たわけじゃないけど、タイマ割り込みを使ってLED表示とキー入力のルーチンを
呼び出しているように思える。
組み込み系のタスク管理処理だと一般的なやり方のような気がするけど。
0043デフォルトの名無しさん2015/11/23(月) 20:27:30.18ID:+Ddm9172
ただ、短すぎてプロとして通用するかどうかは判断つかないよねー
題材もちょっとねー
大学生でもこれぐらいは書くからねー
0044デフォルトの名無しさん2015/11/23(月) 20:38:46.63ID:7jQqFmWD
>>42
OK,OK.理解した。俺がちゃんと読んでなかったわ(恥
DispDigit()の中で自分自身をSetTimer()で登録しているから
周期的にDispDigit()が呼ばれるってわけね
わかりずれーww
0045デフォルトの名無しさん2015/11/23(月) 20:46:54.29ID:fxSBPtHV
>>40
エラーメッセージそのままだよ。定義(実装)の前に参照しようとしている。
関数ならプロトタイプ宣言を先にしておく、もしくは関数ブロック自体を使うより前に配置する。
ファイルの上から下へ流れることを思い出すべし。
0046デフォルトの名無しさん2015/11/23(月) 20:58:25.33ID:1C9r5blK
>>45
ありがとうございます。
確認してみます。
0047デフォルトの名無しさん2015/11/23(月) 23:28:30.23ID:1C9r5blK
解決しました。
色々調べてみたら、wiringPiをgccのリンクオプションで指定しなければならなかったようです。
全然関係ない普通の関数でビルドエラーが出まくるので、原因特定に時間が掛かってしまった。。
0048デフォルトの名無しさん2015/11/24(火) 10:58:57.10ID:tJqlgFat
>>37
いいからhoge厨は二度と来るな。
0049デフォルトの名無しさん2015/11/24(火) 11:42:48.48ID:d6tP0hfQ
最近c言語を学び始めた者ですが、自動販売機のお釣りと枚数を表示するプログラムを作ろうとしていておつりの表示までは何とか書けましたが、枚数の計算をどう書けば良いのかイマイチ分かりません。
どうかお願い致します
0050デフォルトの名無しさん2015/11/24(火) 12:15:08.25ID:2IyJeQ15
500で割って、余りを100で割って、余りを50で割って、余りを10で割って、余りを5で割って
ってすれば出来るよ
0051デフォルトの名無しさん2015/11/24(火) 12:46:17.07ID:WDNAFAEr
>>49
その聞き方だとCってよりアルゴリズムの話になる
どういう計算、判断をCで書きたいか書いてくれ
0052デフォルトの名無しさん2015/11/24(火) 13:15:35.66ID:cksHvZaS
>>49
まず1000円札と1円玉だけで練習
それができたら紙幣と硬貨の種類を増やしてやり直し
0053デフォルトの名無しさん2015/11/24(火) 17:03:51.24ID:zj3pUKBA
金額を指定して最小枚数の貨幣の組み合わせを求める方法なら
アルゴリズム(というほど大げさでもないか)の話題だが…。

C特有の整数の除算結果や剰余を得る演算子の質問かも知れぬ。
0054デフォルトの名無しさん2015/11/24(火) 19:07:30.92ID:UGtu2+cg
#define ATC=6;
const int coin[ATC]={1,5,10,50,100,500};

bool tsuri(int x, const int *stok, int *r) { // int stok[ATC], int r[ATC]
int i=ATC;
while (i--){ if (stok[i]>=(r[i]=x/coin[i])) x-=r[i]*coin[i]; else r[i]=0; }
return x==0; }
0055デフォルトの名無しさん2015/11/24(火) 23:37:59.56ID:GksIIF6P
>54にとっては、お札の使える自販機は想定の範囲外らしい。
それはさておき、定数6が余りにダサ過ぎる。
0056デフォルトの名無しさん2015/11/24(火) 23:53:59.47ID:UGtu2+cg
難癖つけるにも最低限の知識と洞察力さらに注意力が必要だとわかる一例
0057デフォルトの名無しさん2015/11/25(水) 00:01:30.37ID:DK24seVo
折角だから俺はsizeof演算子を選ぶぜ!
0058デフォルトの名無しさん2015/11/25(水) 00:19:25.37ID:Sra0FKsR
いやおまえ、難癖つけても良いと思うぞ
そのコード、例えば、おつりが400円でストックの100円玉が3枚のとき
100円玉はスキップされて一枚も使われないぞ
0059デフォルトの名無しさん2015/11/25(水) 00:35:40.61ID:Zpo4a/J3
んなん書いた本人が書き込むボタン押した時点で気付いて壁ドンしてるつのw
0060デフォルトの名無しさん2015/11/25(水) 00:44:00.54ID:d8/Xbbzt
山田太郎かいな
0061デフォルトの名無しさん2015/11/25(水) 01:19:42.11ID:Vd1+RMMI
const int coin[=6;]={1,5,10,50,100,500};
0062デフォルトの名無しさん2015/11/25(水) 01:35:50.94ID:rAklTrAk
どうでもいいけど自販機に1円5円は入れなくね
0063デフォルトの名無しさん2015/11/25(水) 01:40:29.76ID:wwtRzQvg
ニッポンの平均最低月給と人口の都道府県別、市町村別ランキング
求人情報113,957件の平均最低月給196,400円 ♬

あなたの住む街は第何位?平均最低月給はいくら??
http://jobinjapan.jp/area/
0064デフォルトの名無しさん2015/11/25(水) 07:43:59.70ID:7xFqT66+
>>58
横から失礼。
>>54 が何だか複雑な処理をしてるなぁと思ったが、
おつり用の小銭ストックの残数を調べてたのか。


すると客が金を投入して商品を選択した時点で
(商品を出す前に)おつりを払い出せるか確認しないといかんな。

「おつりが出せません。あと3本買ってください」とか
表示される自動販売機ができちゃうな。
0065デフォルトの名無しさん2015/11/25(水) 07:48:49.66ID:vDBW4/m6
つり切れランプとランプ点灯時の挙動
0066デフォルトの名無しさん2015/11/25(水) 14:58:04.94ID:IJD2vpFF
ついでにストックがゾロ目になると当たりでもう一本出るんだぜ
0067デフォルトの名無しさん2015/11/26(木) 07:14:29.70ID:KF/aoe7N
Cではなくアルゴリズムの用語について
正しいスレはわからないためここで質問します
ふさわしいところがあれば誘導お願いします
「Cプログラマのためのアルゴリズムとデータ構造」という本を読んでいるのですが
237ページからのヒープソートのセクションで
ヒープ=半順序木を配列に実装にしたもの
というようなことが書かれていますがgoogleする限り
ヒープ=半順序木
という意味でつかわれていることが多いようです
実際のところヒープの定義はなんですか?
0068デフォルトの名無しさん2015/11/26(木) 07:52:24.60ID:cMOPjOrt
Cでヒープというとヒープ領域のこと
https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97%E9%A0%98%E5%9F%9F
0069デフォルトの名無しさん2015/11/26(木) 08:19:55.65ID:egDOh8oE
>>67
このスレには文法バカの言語オタクしかいません
というか真面目な質問を今の2ちゃんねるでする方が間違っています
まだ、某知恵袋とかで質問した方がまともな回答がもらえるでしょう
0070デフォルトの名無しさん2015/11/26(木) 09:19:41.42ID:8/48+RLP
>>67
半順序木とヒープは別物
ヒープはその本にある通り、半順序木を配列に実装したもの
Cには半順序木というデータ構造がないので、Cで半順序木を実装するにはヒープとして実装する必要がある
0071デフォルトの名無しさん2015/11/26(木) 15:01:07.41ID:3WTjKhoC
>>70
ありがとうございます

しかしwikpediaには「ヒープの実装」のセクションにて

古典的な二分木データ構造を使って、二分ヒープ木を構築することは完全に可能である。

中略

しかし、より普及しているやり方は、配列に写す方法である。
以下のように、ほとんど完全な二分木の要素に番号を付けてみる。
まず、根元の要素に 1 という番号を付ける。
以下幅優先で順番に番号を振ってゆく(図を参照)。

https://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E3%83%92%E3%83%BC%E3%83%97

しかし実際現場または一般では(私は学生です)
あなたや本の言う通り「ヒープ」と同義ということになっているのであれば
Wikipediaが間違っているのでしょうか?
それともヒープの実装が現実的には配列しか選択肢がないために
実質的に「配列の実装」とうことになっており学術的な定義では半順序木と等価なのでしょうか?
(はたまた私の(Wikipediaについて)日本語の解釈が間違っているのでしょうか?)
0072デフォルトの名無しさん2015/11/26(木) 15:03:02.52ID:3WTjKhoC
どうかんがえても私の日本語おかしいですね。すみません
なんとか意味わかります?
0073デフォルトの名無しさん2015/11/26(木) 17:49:14.82ID:bZdq0+/9
そりゃいくらでも出来るだろうけど挿入とか削除が遅くなるからじゃないの?
配列上だとキャッシュに乗りやすくて速いだろうし
0074デフォルトの名無しさん2015/11/26(木) 19:31:11.82ID:AipKzKjF
>>71
正直何を聞きたいのかよくわからない。

ヒープソートで半順序木を使っている。
半順序木は配列で実装できる。
半順序木は配列と等価なのですか?

って言ってるんだよね。
実装するものとされるものだから、明らかに等価じゃない。

「配列以外の実装ってありますか?」とか
「配列で実装するとこういう問題があると思うんですけど・・」とか
聞きたいことを明確にすべき
0075デフォルトの名無しさん2015/11/26(木) 19:41:04.28ID:KF/aoe7N
>>74
すみません
最終的に知りたいこと(聞きたい事)はヒープの定義です。
それにあたって本とWikipediaの説明の記述の食い違いについても説明がほしいのです
本の記述ではヒープとは半順序木の配列を使った実装だとあります。
しかしWikpediaによればその定義は半順序木と等価であるような説明(実際に半順序木とは書かれていないが)です。
0076デフォルトの名無しさん2015/11/26(木) 19:58:00.51ID:ofQuFmMz
>>75
Wikipediaなら出典も書いてあるはずだからあたってみたら?
0077デフォルトの名無しさん2015/11/26(木) 20:19:11.22ID:QqGRNt0R
>>75
セジウィックのアルゴリズム本でも読め
Wikipediaに書いてある事が怪しいと思うんなら自分で編集しなおせよ
ロックされてない項目なら
編集合戦になるかもしれないけどな
0078デフォルトの名無しさん2015/11/26(木) 20:24:40.74ID:QqGRNt0R
ちなみに今

https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97

ここを読んでるんだけど、
>ヒープ(英: heap)とは、「子要素は親要素より常に大きいか等しい(または常に小さいか等しい)」という制約を持つ木構造の事。

という定義になってる

https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97%E3%82%BD%E3%83%BC%E3%83%88
上のリンクにもここにも「半順序木」という言葉は見つからない

だから木構造でいいだろ
たまたま配列表現も可能でそちらの方が実現も楽だし速度も速いし、現在のCPUのアーキテクチャに
とっては都合がいいってだけの話

なんならヒープを二分木で書いてそれでヒープソートを書いてそれを講師に見せて「こういう事ですか」
とでも聞いてみりゃいいじゃん
007922015/11/26(木) 20:25:03.78ID:IxMwzK+N
>>7
Windowsのエクスプローラーがファイル名だけ検索してないってどういうことですか?
ファイル名で検索してるのにそれ以外の事って検索しようがなくないですか?
例えばファイルの中身を調べても何の意味もないかと…
実際何してるんでしょう?
0080デフォルトの名無しさん2015/11/26(木) 20:30:46.59ID:KF/aoe7N
レスありがとうございます
ヒープは半順序木の配列をつかった実装ということで決着です!
決まりです!ありがとうございます!
0081デフォルトの名無しさん2015/11/26(木) 20:31:10.47ID:ofQuFmMz
>>79
C言語スレだぞここは
ファイル名だけで検索してるって具体的にどういう方法で検索してるのかも書かずによく言い切れるな
008222015/11/26(木) 20:37:34.42ID:IxMwzK+N
>>81
Winndowsの仕組みが分からないんですよね
あのエクスプローラの検索機能って何を目的としてるんでしょうか?
0083デフォルトの名無しさん2015/11/26(木) 20:43:21.67ID:xvh9rNnd
受け答えになってない
重症患者
0084デフォルトの名無しさん2015/11/26(木) 20:49:25.70ID:ofQuFmMz
>>82
ファイル名だけで検索させているのかどうかも分かりませんってことか
お前の使い方が悪い
0085デフォルトの名無しさん2015/11/26(木) 21:30:45.65ID:uW3Onm83
「ヒープ」の指す意味は本や文脈によって変わる。

一義的な定義は木構造だと思うけど、
配列を用いた実装が有名なので、
その実装方法や、特定の実装自体のことをヒープと呼ぶこともある。

wikipediaをwikiと呼ぶようなもんだ。
0086デフォルトの名無しさん2015/11/26(木) 21:36:01.67ID:KF/aoe7N
>>85
すごい安心する
回答ありがとうございます!
0087デフォルトの名無しさん2015/11/26(木) 21:37:40.68ID:R9Nnr2R1
>>85
嘘こけ
木構造はtreeって呼ぶし二分木もbinary tree
お前が言ってるのはtreeとheapが同じってことだぞ、わかってんのか
0088デフォルトの名無しさん2015/11/26(木) 21:41:03.68ID:KF/aoe7N
正解がわからん!!!!!!!!!!!!!!!!!!!!!!
0089デフォルトの名無しさん2015/11/26(木) 21:54:42.91ID:uW3Onm83
第一義としては、

> ヒープ(英: heap)とは、「子要素は親要素より常に大きいか等しい(または常に小さいか等しい)」という制約を持つ木構造の事。

が正しい。ただし、実装方法や特定の実装のことをヒープと呼ぶこともある。
「ヒープ」と言って実際に何を指しているかは、文脈から判断するしかない。
0090デフォルトの名無しさん2015/11/26(木) 21:59:33.46ID:KF/aoe7N
「子要素は親要素より常に大きいか等しい(または常に小さいか等しい)」という制約を持つ木
とは半順序木と同じことではないのですか???
0091デフォルトの名無しさん2015/11/26(木) 22:11:00.55ID:uW3Onm83
>>90
同じ
0092デフォルトの名無しさん2015/11/26(木) 22:18:50.31ID:KF/aoe7N
だったらやっぱり
半順序木==ヒープってことですよね?
んで文脈によってヒープは半順序木の配列による実装を指すことがあるということですね?
0093デフォルトの名無しさん2015/11/26(木) 22:20:50.93ID:gSiocztQ
スタックとヒープ
0094デフォルトの名無しさん2015/11/26(木) 22:29:31.14ID:uW3Onm83
>>92
その理解でいいと思う

ただ、「ヒープ==半順序木」が本当に第一義かというと異論あるかも。
おそらく世界で最初にプログラムとして実装された半順序木は
配列を使ったものなので、明確に区別されていなかった可能性はある。
広義と狭義だと考えといた方がいいかもしれない
0095デフォルトの名無しさん2015/11/26(木) 22:33:27.35ID:R9Nnr2R1
>>89
自分で第一義をコロコロ変えるなよw
0096デフォルトの名無しさん2015/11/26(木) 22:35:47.83ID:R9Nnr2R1
木構造を簡単に実現できるのはリストだろ
最初は配列とか知ったか振り恥ずかしいぞ
0097デフォルトの名無しさん2015/11/26(木) 22:41:24.58ID:KF/aoe7N
>>94
ありがとうございます
いまのところこれが一番他の文章と矛盾せず納得できるものです
コロコロ回って申し訳なく思いますが現状はこの形で頭に入れます
ほかの方も意見をありがとうございます

またひっくり返りそうな文章がみつかればここへ凸するつもりです!
そのときはまたよろしくお願いします!
ではおやすみなさい!
0098デフォルトの名無しさん2015/11/27(金) 07:43:46.38ID:OSV5eH1L
実装の要素を元に名称を付けたからといって
名称に含まれる要素全てが実装に含まれるとは考えてはいけない。
0099デフォルトの名無しさん2015/11/27(金) 22:17:07.99ID:p4Ja58Mt
>>84
あれってまさかファイル内のテキストまで検索してるんですか?
余計な事しなくていいのに…
0100デフォルトの名無しさん2015/11/27(金) 22:39:28.89ID:TNfNeR16
>>99
そのまさか
副次ストリームなんかも含めて読む
逆にアホな実装すると副次ストリームのデータ考慮しないでいろいろやらかす
0101デフォルトの名無しさん2015/11/27(金) 23:21:25.77ID:FVkBDZy0
やらかすっても実行ファイルの警告ぐらいにしか使ってないじゃん
0102デフォルトの名無しさん2015/11/27(金) 23:31:51.41ID:ncYhuR0u
中身まで検索するのはインデックス登録してるところだけでしょ
0103デフォルトの名無しさん2015/11/27(金) 23:38:23.30ID:TNfNeR16
>>101
え、お前まだWindows XPなの?
0104デフォルトの名無しさん2015/11/27(金) 23:41:04.12ID:TNfNeR16
>>102
Windowsのこと知らないならWindowsスレで聞いて来いよ
0105デフォルトの名無しさん2015/11/28(土) 10:30:18.07ID:kQYUqWPa
printf()などのフォーマットで小数点2桁までを表示する際、
最下位の桁が0だったら省略するということをしたいです。

123.450… → "123.45"
123.451… → "123.45"
123.400… → "123.4"
123.000… → "123"

"%.2f"などではできないかと思うのですが、
これを実現できる書式はありますか?
簡単になるのなら、最後のものは"123.0"でも構わないです。
0106デフォルトの名無しさん2015/11/28(土) 10:45:24.44ID:tW/rjk30
>>105
sprintfして、
for (i = strlen(s) - 1; i > 0; i--) {
if (s[i] == '0') {
s[i] = '\0';
} else {
break;
}
}
とかじゃ駄目なの?

というか物理工学の分野だと最後の0にも意味があるから(誤差やら不確かさやらがどうたら)
省略してはいけない筈。
0107デフォルトの名無しさん2015/11/28(土) 14:09:52.79ID:Fac7bhmL
%g のなげっぱなしジャーマン
0108デフォルトの名無しさん2015/11/28(土) 21:06:13.19ID:Net63fUy
C経験はほとんど無いが、次の案件で求められてるのだけど、
ここで皆さん話されているような職人のようなCらしいことが
できなくても平気だろうか。
そもそも自分で開発はしないと思うけど、設計やテストや解析
でこのスレのような高度なことをされると、自分には理解する自信がない。
0109デフォルトの名無しさん2015/11/28(土) 21:42:45.40ID:mRjH+OFo
Cが書けない人が設計、テスト設計、解析をしたものってどうなの
0110デフォルトの名無しさん2015/11/28(土) 22:13:50.81ID:M/Wigktg
>>108
> C経験はほとんど無いが、次の案件で求められてるのだけど、

> そもそも自分で開発はしないと思うけど、

君が一体なにを求められてるのかをきちんと確認した方がいいんじゃね?
0111デフォルトの名無しさん2015/11/28(土) 22:51:51.80ID:/Rhs9J/i
すみません教えてください。
char** argvとchar* argv[]が同じになる理由が分かりません。
それと
int main(int argc, char** argv) {
  int a = atoi(argv[1]);
         ↑
  この部分がわかりません。どうして*argv[1]じゃないんでしょうか?
0112デフォルトの名無しさん2015/11/28(土) 23:15:32.76ID:Iy/WtbZ6
>>111
文字ではなくて、文字列が欲しいからでしょ


…って答えでは納得してもらえないだろう事は予測している
0113デフォルトの名無しさん2015/11/28(土) 23:25:50.43ID:/Rhs9J/i
>>112
はい。分かりません。
&argv[1][0]とかいろいろやってみてます。

argvって配列へのポインタですか?
0114デフォルトの名無しさん2015/11/28(土) 23:30:34.51ID:/Rhs9J/i
自分、javaから入ってるからアドレスとかポインタとかようわからん。

*arvg[0], &[argv][1]0, *(argv + 1)
&やら*やら[]やら適当に書いて動けばよし!
ってな感じなんですよね。

どこか有益な情報へのリンクないですか?
0115デフォルトの名無しさん2015/11/28(土) 23:40:20.50ID:KLYDsHNy
>>114
http://kmaebashi.com/programmer/pointer.html
の"Cの宣言を解釈するには、・・・"以下を読むといいかも。
0116デフォルトの名無しさん2015/11/28(土) 23:47:55.29ID:/Rhs9J/i
>>115
ありがとうございます。まさにオレのための記事ですね。
0117デフォルトの名無しさん2015/11/29(日) 02:36:07.68ID:zxYmQd3n
>>116
>ありがとうございます。まさにオレのための記事ですね。
何おぅ?!
0118デフォルトの名無しさん2015/11/29(日) 13:19:12.38ID:AVw7OQAA
いや、オレのための記事だよ
知らなかった?
0119デフォルトの名無しさん2015/11/30(月) 05:11:20.33ID:qSWjFIuy
いやいや、俺のためのk(ry
0120デフォルトの名無しさん2015/11/30(月) 06:24:30.81ID:CAXF3MtW
どうぞどうぞ
0121デフォルトの名無しさん2015/11/30(月) 11:14:19.00ID:ArO4KIJP
>>106
>>107

ありがとうございます。
printf()の中で指定することは諦めて、作成した文字列に対して、
「右端の文字が0なら削除」を繰り返し、最後に「右端の文字が.なら削除」を行うようにしました。
0122デフォルトの名無しさん2015/11/30(月) 12:33:33.82ID:GeGeh89v
C言語で関数の存在チェックを行う場合、以下の方法のどちらが一般的なのでしょうか。

if (privateFunc) {
  privateFunc();
}

if (*privateFunc) {
  privateFunc();
}
0123デフォルトの名無しさん2015/11/30(月) 12:51:55.08ID:luHPgjr1
>>122
それだけだとどちらも一般的とは言いがたい
ただLinuxカーネルなんかでよく使われるxxx_opsみたいな構造体の場合はだいたい前者
0124デフォルトの名無しさん2015/11/30(月) 12:52:00.45ID:rAoyarnG
前者じゃねーの?
どうがんばっても privateFuncが保持してるのはポインタだし
未設定な NULL に対して * で参照先をほぐすのは良くない手だとおもうが

実呼び出しにおいて
(*privateFunc)() を privateFunc() と記述してよいことにしてるのはその後の話かと
0125デフォルトの名無しさん2015/11/30(月) 13:08:49.31ID:uig6cR0c
※をほぐす?
0126デフォルトの名無しさん2015/11/30(月) 13:55:47.19ID:xo2paQEJ
関数の存在チェックってことはprivateFuncは関数ポインタなんでしょ
だったら前者しかないんじゃないの
0127デフォルトの名無しさん2015/11/30(月) 16:57:30.00ID:GeGeh89v
すみません、privateFuncはプライベートメソッドという意図です。
SDKやAPIが非公開にしているメソッドを実行するケースを想定しています。
0128デフォルトの名無しさん2015/11/30(月) 17:03:32.32ID:xo2paQEJ
意図はどうあれ関数ポインタでしょ?
あるかどうかわからない関数名を書いたらない場合はコンパイルエラーになるし
0129デフォルトの名無しさん2015/11/30(月) 17:04:28.41ID:rAoyarnG
実行時じゃないと存在するか否かがわからない動的リンクで
関数ポインタ以外の方法で提供きているのってある?

存在しない場合にランタイムが判断してエラーで終わるのとは別
0130デフォルトの名無しさん2015/11/30(月) 17:25:45.70ID:GeGeh89v
>>128
前提条件が少なくてすみません。
もともとプライベート関数としていたものを同名でパブリック宣言(extern)しています。

名称が同じであれば、古い時代の実行環境でも、存在確認さえできれば実行できるのかなと思っていたのですが。
0131デフォルトの名無しさん2015/11/30(月) 20:07:43.96ID:luHPgjr1
>>130
ポインタじゃなかったの?
コンパイルできる最小限のコードで示してよ
0132デフォルトの名無しさん2015/11/30(月) 22:08:03.78ID:GeGeh89v
>>131
こんなイメージになります。

/* libtest.c */
#include <stdio.h>
void privateFunc() { printf("ok!\n"); }

/* app.c */
#include <stdio.h>
extern void privateFunc();
int main() { if (privateFunc) privateFunc(); }

$ clang -shared libtest.c -o libtest.so
$ clang -I./ -L./ app.c -o app -ltest
$ ./app
$ ok!
0133デフォルトの名無しさん2015/11/30(月) 22:19:36.25ID:GeGeh89v
ちなみにlibtest.cは動的ライブラリです。
試しにlibtest.cのprivateFunc()未実装版と一緒に実行もしてみましたが、
なぜか「lazy symbol binding failed: Symbol not found: _privateFunc」という実行時エラーが発生してしまいました。
0134デフォルトの名無しさん2015/11/30(月) 22:32:01.16ID:98iBsahC
起動時にランタイムローダーが解決する。
解決できなけりゃエラーなので無理。
遅延ロードは初めはスタブのアドレスにしといて初回のコールで、スタブが実際のアドレスに変更する。なので、これも無理。

dlsymで取得するしかない。
0135デフォルトの名無しさん2015/11/30(月) 23:59:42.62ID:GeGeh89v
>>134
dlsymで想定していた用途の実現が可能になりました。ありがとうございます。
0136デフォルトの名無しさん2015/12/01(火) 06:13:33.85ID:bfm5WjOE
>>135
これでようやく家に帰れるな……
0137デフォルトの名無しさん2015/12/01(火) 09:54:34.47ID:m5SsaW1T
if (privateFunc) privateFunc();やif (&kTextAlignLeft);の書き方って、
GUIプログラミングでの互換性チェック処理としてよく見かけるんだけど。
あれ古いバージョンのOSでもちゃんと動くのだろうか。

http://git.io/vBFBJ
0138デフォルトの名無しさん2015/12/01(火) 18:31:09.36ID:wfTLHpyu
>>137
Objective-Cだと標準的なやり方なのかも

知らんけど
0139デフォルトの名無しさん2015/12/03(木) 21:18:23.89ID:5585omJg
Windowsの改行コードをファイルに書き出したいんだがうまく行かない

FILE *fp;
fp=fopen("a.txt","wb");
fprintf(fp,"ABC %02x%02x", 0x0a,0x0d);
fclose(fp);
どうして???
0140デフォルトの名無しさん2015/12/03(木) 21:19:12.24ID:5585omJg
OSはLinuxね。
0141デフォルトの名無しさん2015/12/03(木) 21:24:56.13ID:/xqyH1ID
>fprintf(fp,"ABC %02x%02x", 0x0a,0x0d);
出落ちすぐる…
0142デフォルトの名無しさん2015/12/03(木) 21:28:54.62ID:q2v1B9Om
16進じゃなく文字として書き込む
0143デフォルトの名無しさん2015/12/03(木) 21:29:50.67ID:vntsHvc0
順番も0x0d, 0x0aね
0144デフォルトの名無しさん2015/12/03(木) 21:33:46.20ID:MeAB/UFS
>>139
\r\n使いなよ
0145デフォルトの名無しさん2015/12/03(木) 21:33:54.07ID:v/Q0KO/B
assert(printf(なんか));
これ便利だね
まったくのスレチだけど
0146デフォルトの名無しさん2015/12/03(木) 21:53:48.74ID:5585omJg
ありがとw
出来たわ
0147デフォルトの名無しさん2015/12/03(木) 21:54:15.59ID:+xl+clky
どんな用途か知らないけど CR+LF でなければならない事情があるの?
そうだとしても、そのプログラムの外で
sed 's/$/\r/'
とかする方が安全だと思うよ。
0148デフォルトの名無しさん2015/12/03(木) 21:58:05.38ID:q2v1B9Om
ネットワークをやりとりするtextの改行コードはそういう決まりになってなかったか?
0149デフォルトの名無しさん2015/12/04(金) 05:27:51.81ID:ypRhf+PQ
どこの何という決まりですか?
0150デフォルトの名無しさん2015/12/04(金) 06:15:36.49ID:GzeAUkqU
RFC2822とかかな。
0151デフォルトの名無しさん2015/12/04(金) 08:47:13.33ID:4C4dhHoE
電文本体の決まり事なんて
オープンなものじゃなきゃ、中身は・・・・
0152デフォルトの名無しさん2015/12/05(土) 00:48:35.11ID:RCWMYbfh
>>137
問題あるから
a=GetProcAddress();
if(!a) goto hell;
とかQueryInterfaceなんだろ
0153デフォルトの名無しさん2015/12/05(土) 03:01:58.22ID:NRX1k+Is
改行コードをどうするかとかプレゼンテーション層かアプリケーション層で任意に取り決め可能なんじゃないの(適当
0154デフォルトの名無しさん2015/12/08(火) 12:09:23.06ID:h2gKlU3s
てす
0155デフォルトの名無しさん2015/12/11(金) 16:54:30.37ID:VzNoaKJQ
入門用に苦Cを使おうと思うんだけど、書籍とWEBサイトどっちがおすすめ?
0156デフォルトの名無しさん2015/12/11(金) 17:19:05.31ID:omtdZIcm
俺はWebサイトで勉強したけど、読んだことはないが書籍がいいんじゃないかな
執筆の比重としてはWeb<書籍になると思うから、書籍の方がクオリティは高くなってるはず
0157デフォルトの名無しさん2015/12/11(金) 17:42:05.54ID:wJLmTi/k
webでいいよ
分からんことあって聞くときも、どれが分からんってポインタ示せるだろ
でもリファレンス本は一冊買っておけ
0158デフォルトの名無しさん2015/12/11(金) 18:56:15.20ID:AuU75Yh5
C言語は今もメジャーで使われている実用的な言語の中では飛び抜けてシンプルな言語だから
Webだけで十分だと思うよ
0159デフォルトの名無しさん2015/12/11(金) 21:10:42.15ID:C8NouVc8
Cよりもシンプルな言語といわれて,はてそれが実用的なのかとしばし一考‥
0160デフォルトの名無しさん2015/12/11(金) 21:59:03.72ID:f+RTKPNq
他の言語で詳しく知っているものがあるならwebで十分
プログラミング自体も初心者なら本買っとけ
0161デフォルトの名無しさん2015/12/11(金) 23:00:23.61ID:MQP/fuYv
そもそも苦cって段階で……
0162デフォルトの名無しさん2015/12/12(土) 07:17:34.14ID:Ul6e9221
K&R < 呼ばれた気がした
0163デフォルトの名無しさん2015/12/12(土) 18:06:58.90ID:pNUoYZP0
サンプルコードのコピペ考えるとWebの方がいい。
あとC言語を深く知りたいならK&R買っておけ。
0164デフォルトの名無しさん2015/12/12(土) 19:00:58.75ID:VrLvS+wi
K&Rお薦めしてるけど、1つ目の参考書に買うと死ねると思うよ
昔の人はこれで勉強したんだろうが

本屋でじっくり選びながら自分に合ったのを買うといいと思うけど、最近はC言語の品揃えは寂しいだろうな
0165デフォルトの名無しさん2015/12/12(土) 19:43:36.96ID:bw/xX943
web見られないのならK&Rだけってのは薦めないけど、webで補完できるならいい
英語できるなら原書買うべきだよな
訳者がクソ
0166デフォルトの名無しさん2015/12/12(土) 21:33:40.49ID:7G0ybzbE
ハーバートシルト先生の独習cだろ
俺もこの本から初めて今では立派なIT奴隷さ
0167デフォルトの名無しさん2015/12/13(日) 14:12:28.56ID:etBxJcNE
苦CのWebでいいじゃん。入口は簡単な方がいい。
あとは使ってるうちに覚えるもんだ。
0168デフォルトの名無しさん2015/12/13(日) 15:26:12.76ID:qLuXuixr
猫でも分かるってまだあるの?
0169デフォルトの名無しさん2015/12/13(日) 19:42:27.46ID:X0iYpvwV
個人的にサンプルソースが数ページに渡るほどでかい本は地雷だと思っている
そういう意味では猫でも分かるのWebサイトは自分には合わなかった
勉強したのはCじゃなくてWinAPIの方だけど
0170デフォルトの名無しさん2015/12/14(月) 01:46:39.82ID:tJK5Al3K
gcoreでとったコアダンプを再起動することってできます?

https://ja.wikipedia.org/wiki/%E3%82%B3%E3%82%A2%E3%83%80%E3%83%B3%E3%83%97
0171デフォルトの名無しさん2015/12/14(月) 02:51:02.40ID:R2ktMZMc
ブルースクリーンを舐めるなよ
0172名無しさん@そうだ選挙に行こう2015/12/14(月) 11:45:30.54ID:3juNniWh
>>170
できない。実行ファイルではない
0173名無しさん@そうだ選挙に行こう2015/12/14(月) 13:25:56.38ID:vCFPKOAB
TeXとか昔はunexecで実行形式作ってた
不可能ではないがunexecはもう誰もメンテしてないだろうから自分で対応しなきゃならん
0174名無しさん@そうだ選挙に行こう2015/12/14(月) 13:59:08.72ID:m5o8tph8
gdbで読めば再実行でもなんでもできるでしょ
0175名無しさん@そうだ選挙に行こう2015/12/14(月) 14:24:46.97ID:7u6mTfK6
http://i.imgur.com/9QO75NV.jpg
分かりません 助けて
0176名無しさん@そうだ選挙に行こう2015/12/14(月) 14:38:11.70ID:AFi/i5CF
金払って学校行ってるんだろ?
対価として得る知識を与えるのは教師だ
教師に聞け
0177名無しさん@そうだ選挙に行こう2015/12/14(月) 16:34:34.52ID:VJuIJuYL
わかるところだけでも書け。
丸投げなら宿題スレ行け。
0178名無しさん@そうだ選挙に行こう2015/12/14(月) 16:43:41.19ID:ZfnvEW4e
>>172
実行ファイルもあれば可能ですか?
0179デフォルトの名無しさん2015/12/14(月) 22:32:42.63ID:bvFbtQ0R
ここまでやったんですが期待通りの結果が表示されません
どこがおかしいのでしょうか

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

void myStrTrans(char *str)
{
for(;(*str=toupper(*str))!=0;str++)
;
}

int main()
{
char moji[20];
printf("文字入力-->");
scanf("%s",moji);
myStrTrans(moji);
printf("処理後の文字は、%c です\n",moji);
return 0;
}
0180デフォルトの名無しさん2015/12/14(月) 22:36:26.89ID:vOSXDJab
× printf("処理後の文字は、%c です\n",moji);
→ printf("処理後の文字は、%s です\n",moji);

表示のしかたが間違ったね
1文字だけを書くのなら %c にしつつ moji[0] を渡す
文字列を書くのなら %s で moji を渡す
0181デフォルトの名無しさん2015/12/14(月) 22:44:03.62ID:bvFbtQ0R
%sにしたら表示されました! ありがとうございました
0182デフォルトの名無しさん2015/12/15(火) 19:53:22.37ID:8itc1+dp
FILEポインタって結局何が入ってるの?
0183デフォルトの名無しさん2015/12/15(火) 20:01:22.58ID:3HIEMBwM
f〜関数郡を機能し実現させる為に必要なもの
0184デフォルトの名無しさん2015/12/15(火) 20:16:41.71ID:B8igkfF6
>>182
K&Rを読むといい
FILEがどういった構造になっているか書かれている
普段気にせず使っている標準関数がどう実装されているのかとかもね
勿論、Cのことは一通り身に付けてからでないと厳しいだろうけど
0185デフォルトの名無しさん2015/12/15(火) 20:47:21.15ID:ED1k4Paq
ポインタはアドレスを格納する変数でしかない
32ビット環境だったら4バイトのデータを格納しているだけの存在でしかない
0186デフォルトの名無しさん2015/12/15(火) 22:41:33.72ID:EyQbsWt1
4バイトのデータを格納しているだけでそれ以上の情報をもってないなら
void * x;
char *a = x;
int *b = x;
で、printf("%p %p¥n", a+1, b+1);
二つは同じになるはずだよね。でもならない。
0187デフォルトの名無しさん2015/12/15(火) 23:07:02.03ID:qzRWqMaa
a b のアドレスは違うのでは
誰に教わってるの?
独学?
0188デフォルトの名無しさん2015/12/15(火) 23:11:19.46ID:EyQbsWt1
なんで、a,bのアドレスが違うの? 誰に教わってるの? 独学?
0189デフォルトの名無しさん2015/12/15(火) 23:15:22.55ID:DSeHdp2+
コンパイラは変数をメモリーの特定アドレスに割り当てる。

同じ席に二人は座れない。

異なるポインタ変数に同じアドレスを指定したいと言うのと勘違いしてないか?
0190デフォルトの名無しさん2015/12/15(火) 23:21:41.74ID:DSeHdp2+
済まん、勘違いしているな。
189は間違ってるごめんな
0191デフォルトの名無しさん2015/12/15(火) 23:24:12.14ID:DSeHdp2+
a+1 と  b+1 は、コンパイラが変数の型を見て、
型に応じてアドレスを計算するからじゃないか?
0192デフォルトの名無しさん2015/12/15(火) 23:47:04.70ID:Iepi85fF
>>185
型がある

p++;
アドレスが1バイト増加するか、4バイト増加するか
型によってことなる
0193デフォルトの名無しさん2015/12/16(水) 00:17:23.55ID:/GcouSm1
簡単なコードで
最適化なしで変数少し書き換えて、コンパイルして、できたファイルがどう変化したか、ちまちま調べたら、機械語の知識すこしあれば、Cがどういうものか理解しやすい、かった。
プロテクトかかる仕事以降のものではいちいちやってない。
0194デフォルトの名無しさん2015/12/16(水) 00:28:46.71ID:Pu5ssxxv
これtってどういうプログラム?
436 名前:774ワット発電中さん[sage] 投稿日:2015/12/15(火) 03:11:12.11 ID:56tRv1JH
>>424 こういうのは?
// 状態変数
typedef enum {
State1;
State2;
....
} State;

State st;

// 受信電文解読関数 戻り値は st = State1 みたいな感じで

// 動作分岐関数
void onEvent(State st)
{
switch (st) {
case State1;
// 処理1;
break;
case State2;
// 処理2;
break;
....
default:
// デフォルト処理;
break;
}
}
0195デフォルトの名無しさん2015/12/16(水) 00:32:13.77ID:Gbc4VAtQ
数学とかいっしょで
習うより慣れろですよ
0196デフォルトの名無しさん2015/12/16(水) 01:21:20.63ID:/d+HK7e1
暇なら
a+2 b+2
でできたものとfcとかしたら簡単かと思う。
0197デフォルトの名無しさん2015/12/16(水) 02:04:42.11ID:finNVuoB
>>>185
>型がある

>p++;
>アドレスが1バイト増加するか、4バイト増加するか型によってことなる

型を判定するのはコンパイラであって、
アセの段階で既に185の言うとおり。
c++などならその限りではないこともある。
0198デフォルトの名無しさん2015/12/16(水) 02:20:33.65ID:finNVuoB
ポインタに加算する前にキャストしたら
int * ip;
char* cp;
((char*)ip)++;/*カッコ過剰かも知れんが一応*/
cp++;
これでまあ普通は同じ分アドレスは増える。
Cは実行時に型など判別しない。
0199デフォルトの名無しさん2015/12/16(水) 02:23:37.62ID:finNVuoB
ID:finNVuoB(野中)って2chmateに表示されるな。
野中って何?
0200デフォルトの名無しさん2015/12/16(水) 02:46:19.98ID:OpCUYLL/
声優さん
0201デフォルトの名無しさん2015/12/16(水) 03:10:34.16ID:finNVuoB
>4バイトのデータを格納しているだけでそれ以
上の情報をもってないなら
普通はもってないよ。
void * x;
char *a = x;
int *b = x;
>で、printf("%p %p¥n", a+1, b+1);
>二つは同じになるはずだよね。でもならない。

printf("%p %p¥n", ((int*)a)+1, b+1);
とかすれば同じになると思うよ。
+1の1は共にsizeof(int)、32bitなら定数4に置き換わる。
キャストしないとコンパイラは4と1に置き換える。
同じにならないのは当たり前。
0202デフォルトの名無しさん2015/12/16(水) 03:49:03.87ID:finNVuoB
アセンブルコード吐かせたら
すぐわかることだと思う。
(最近の(昔もか)処理系は大概できるよね)
ポインタとは何か。
Cだけやってると本質を理解できてるとは
限らない。

もしすべてのポインタ等に型情報ついてたら、
メモリ食う、実行時にチェックしたら処理速
度低下、、、。
メリットなど何もない。
0203デフォルトの名無しさん2015/12/16(水) 05:36:56.17ID:eyla9c4j
>>197
おばかさんですねえ。
ソースコードの段階で「それ以上の情報」をもってるでしょ。

オブジェクトにおちたら、
「全ての変数はsizeof 変数のデータを格納してるだけの存在でしかない」
とでも言いたいのだろうか?
C++や他の全ての言語でも同様。型情報だって単なる何バイトかのデータだよ。
0204デフォルトの名無しさん2015/12/16(水) 06:51:48.35ID:GHcX74lG
ヴァリアント型を持つ言語なのかの実装のように
メモリイメージ上に 型情報+実体 があるもの以外は
型情報は無い (ミクロな視点)

言語仕様のふるまい的には アドレスだけじゃなく型もセットになってるべ (マクロな視点)

Cのインタープリタはどっちに見えるんだろうね
0205デフォルトの名無しさん2015/12/16(水) 08:55:16.66ID:kWyL6TIC
普通のcインタプリタの実装では、一行ずつ逐次コンパイルする作りにならざるを得ない。
従って、コンパイラと同じように振る舞うと思われる。
0206デフォルトの名無しさん2015/12/16(水) 09:18:38.63ID:GOyFzD2S
ソースの最後の方に文法エラーあってもそこを実行するまでは動くのかな?>Cインタプリタ
0207デフォルトの名無しさん2015/12/16(水) 09:42:21.94ID:finNVuoB
>>203
>おばかさんですねえ。
>ソースコードの段階で「それ以上の情報」をもってるでしょ。

メモリ上に展開された実行形式の変数等に型などない。
あると思うなら探せばいいよ。

>オブジェクトにおちたら、
>「全ての変数はsizeof 変数のデータを格納してるだけの存在でしかない」
>とでも言いたいのだろうか?
>C++や他の全ての言語でも同様。型情報だって単なる何バイトかのデータだよ。

型情報はCには拡張機能でもないと存在しない。
(sizeofも変数ではないし。定数。)
コンパイラのみが型を必要とする。
そうしないと定数に置き換えられないものが
あるから。
ポインタ+数などもその一つ。
0208デフォルトの名無しさん2015/12/16(水) 10:18:24.33ID:finNVuoB
例 : ポインタ+数値。

ポインタの型が特定できないとコンパイル
できない。
逆に言えば型が必要なのはコンパイル時のみ。
同じshort* ptrに対して、
((int*)ptr)+1←ポインタにsizeof(int)加算。
((char*)ptr)+1←ポインタにsizeof(char)加算。
sizeofも一般的には数値(定数)に置き換える。
キャストもあるので型情報持たせても意味がない。
0209デフォルトの名無しさん2015/12/16(水) 11:27:45.66ID:eyla9c4j
>>207
>メモリ上に展開された実行形式の変数等に型などない。
>あると思うなら探せばいいよ。
おばかさんですねえ。

> ポインタはアドレスを格納する変数でしかない
自分でソースコードの話ふっておきながら、後付けで「実行形式」に限定ですかあ?

実行形式の変数ってなんだろ? 謎。
0210デフォルトの名無しさん2015/12/16(水) 11:34:57.70ID:GOyFzD2S
ID:eyla9c4j が見てるものって俺達と違うんだろうなぁ。
0211デフォルトの名無しさん2015/12/16(水) 11:38:09.11ID:finNVuoB
>>209

ソースコード以外では型など存在しない。
コンパイルするためにのみ型は必要とされる。
constとかも同じ。
0212デフォルトの名無しさん2015/12/16(水) 11:50:32.58ID:eyla9c4j
>>211
ようやくそこに辿り着いた?
そうだよ。変数とはソース上の概念でしかない。
⇩は変数について述べている。実行形式に変数なんて無い。すなわちソース上の話。
> ポインタはアドレスを格納する変数でしかない

なので、⇩は大ウソ。
> 32ビット環境だったら4バイトのデータを格納しているだけの存在でしかない
0213デフォルトの名無しさん2015/12/16(水) 12:17:29.88ID:finNVuoB
>>212
相手しないほうが良いかな。

>そうだよ。変数とはソース上の概念でしかない。
>⇩は変数について述べている。実行形式に変数なんて無い。すなわちソース上の話。
>> ポインタはアドレスを格納する変数でしかない
変数が存在しなかったら一体何ができるというのか。

>なので、⇩は大ウソ。
>> 32ビット環境だったら4バイトのデータを格納しているだけの存在でしかない
じゃあ他に何を格納してるの?
0214デフォルトの名無しさん2015/12/16(水) 12:26:07.94ID:ZVfdq9M1
fopenして、それをfcloseせずにプログラム終了させた場合とfcloseしてプログラム終了させた場合では具体的にどんな違いがあるのですか?
0215デフォルトの名無しさん2015/12/16(水) 12:39:58.50ID:y7Ri551N
お前ら凄いな
何の話をしてるのかさっぱりだぜ
0216デフォルトの名無しさん2015/12/16(水) 12:56:37.16ID:/+z9g2H6
プログラミング言語のメタな世界でポインタという概念
(コンパイル中のコンパイラがやっていることも考慮に入れるかもしれない)
 vs
実装やコンパイル後に得られるもの(機械語等)ではこうなってるじゃん

後者の言ってることもわかるけど、前者寄りの意見でああるが、
強弁するとトラブルかなぁぐらいの弱気

Q. ポインタって何?
A. ポインタはポインタ
アドレスを格納するだけの変数ならば整数変数だけでも良いのに
言語の枠組みで別途用意してるんだし、、、、
0217デフォルトの名無しさん2015/12/16(水) 13:11:18.23ID:finNVuoB
もうはるか昔のものではあるが
過去のCPUはポインタ用の命令がなかった
気がする。(実アドレスが格納されてた)

仮想メモリ等を実現するためには、
必要かも知れないが、無駄が多い気もする。
0218デフォルトの名無しさん2015/12/16(水) 13:17:22.59ID:IT3U5Wv/
>>217
どういうこと?昔からmoveとかload命令はあるけど。
仮想メモリとポインタは関係ないよね
0219デフォルトの名無しさん2015/12/16(水) 13:25:23.93ID:IT3U5Wv/
>>214
JIS C規格に適合していれば、ホスト環境なら同じ
0220デフォルトの名無しさん2015/12/16(水) 13:29:23.21ID:finNVuoB
>>218
>仮想メモリとポインタは関係ないよね
仮想メモリ等を実現するためにCPUの構造が
複雑になってる。
実メモリアドレスのみを用いてのプログラミングは
不可能な環境が多い。
過去の処理系のポインタは実メモリアドレス。
0221デフォルトの名無しさん2015/12/16(水) 13:45:42.63ID:finNVuoB
昔と言っても、ポインタと
実メモリアドレスが一致していた頃のこと。
メモリアクセスにバイオレーション等も
ない時代のもの。
マルチスレッド対応以前のもの。
0222デフォルトの名無しさん2015/12/16(水) 13:55:20.86ID:AzqBkmNw
お花畑か
0223デフォルトの名無しさん2015/12/16(水) 13:55:59.12ID:Gbc4VAtQ
仮想メモリを勘違いしてる方が
0224デフォルトの名無しさん2015/12/16(水) 14:37:21.99ID:finNVuoB
ああ、多分仮想メモリ→仮想アドレスかな。
0225デフォルトの名無しさん2015/12/16(水) 14:53:29.46ID:eyla9c4j
>>213
メモリ上にあるのは変数じゃなくて単なるビット列だろ。おばかさん。専門卒には高度すぎるかい?
0226デフォルトの名無しさん2015/12/16(水) 15:04:34.70ID:finNVuoB
変数←→定数だと思うのだが。
その判別はメモリ上にあっても可能。
0227デフォルトの名無しさん2015/12/16(水) 15:12:55.17ID:finNVuoB
調べたら、
プログラミング言語においてのみ
変数と呼ぶのか。
0228デフォルトの名無しさん2015/12/17(木) 01:14:09.55ID:K2MykLOH
>>155
『プログラミング言語C』だけ熟読すればおk
0229デフォルトの名無しさん2015/12/17(木) 01:17:20.63ID:K2MykLOH
変数っていやー何が入るのか最初に完全には仮定しないプレースホルダのことであって
プログラミング言語内に限った話じゃないんじゃ…
0230デフォルトの名無しさん2015/12/17(木) 01:41:20.16ID:ybxRpiqY
>>228
K&Rの本を初心者に薦めるのは止めようぜ
0231デフォルトの名無しさん2015/12/17(木) 02:50:14.04ID:EKc7MmCc
> その判別はメモリ上にあっても可能。
未だ世迷言ほざいてるのか。このばかは。Wikipediaですら、
https://ja.wikipedia.org/wiki/%E5%A4%89%E6%95%B0_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
> プログラミングにおいて、変数(へんすう、variable)とは、プログラムのソースコードにおいて、扱われるデータを一定期間記憶し必要なときに利用できるようにするために、データに固有の名前を与えたものである。
と書かれているのに。
「メモリ上に展開された実行形式の変数等」がどんなにどんなに噴飯ものの発言だかわかってないんだろうな。

理解したつもりになってて全く理解してない専門卒の低学歴は性質が悪い。
0232デフォルトの名無しさん2015/12/17(木) 10:53:20.02ID:WsxUU2uk
>>230
いい本だと思うけどな
あれで分からない部分はwebで補完すりゃいい
特にコンパイル環境はwebのほうがわかりやすいからな
0233デフォルトの名無しさん2015/12/17(木) 11:12:13.43ID:4KY33HOW
K&Rは2冊目以降に推したい
0234デフォルトの名無しさん2015/12/17(木) 11:22:24.79ID:mR3QQ7jE
>>233
書籍のみでの学習ならそう思うけどサイト見られるならそれ一冊でよさそう
0235デフォルトの名無しさん2015/12/17(木) 11:54:12.83ID:8SZtl6dN
部分的に見ようとしてハマる
たまには全体の流れ等を見てみることも
0236デフォルトの名無しさん2015/12/17(木) 12:07:26.31ID:T2aqugd0
K&Rは当時のコンピュータ関係の技術者が
他の言語からCに乗り換えるためのリファレンスだから
今みたくプログラム言語を初めて学ぶ人が読む本じゃない
0237デフォルトの名無しさん2015/12/17(木) 12:37:07.11ID:CLoQ9apk
プログラミング自体初めてって人にハードルが高いだけで、
C言語の初心者には決して悪くない。
自分が何の初心者か分かってないのが騒いでるだけ
0238デフォルトの名無しさん2015/12/17(木) 22:46:15.68ID:FeM+ks96
自分が初心者脱して中級者になったと錯覚したときに読むK&Rは別格だな
0239デフォルトの名無しさん2015/12/18(金) 11:14:11.85ID:Oc3YU1tZ
初心者に勧めようとは思わないが、C言語の議論するならK&Rへの理解前提は必須だな。
初心者でも読めなくはないがな。
講義や研修を一通り終えたくらいのレベルの人にはちょうどいい気がする。
0240デフォルトの名無しさん2015/12/18(金) 12:37:55.76ID:hIsxkBeg
DOS時代は大学で買わされた「はじめてのC」と「C言語の非常識」、あとアセンブラ系(日高とか)とPC-9801マスターバイブルで勉強したわ。
Windows時代はVC++の入門書とAPIの本で。
0241デフォルトの名無しさん2015/12/18(金) 23:18:38.32ID:xTRH7Sui
プログラマはMacを使ってるってマジ?
http://hayabusa3.2ch.net/test/read.cgi/news/1450395043/
0242デフォルトの名無しさん2015/12/18(金) 23:40:17.88ID:GSLUIhyT
俺もmac使ってるぜ
0243デフォルトの名無しさん2015/12/19(土) 08:11:41.53ID:zHA4DGTi
macの何が良いのかさっぱり分からない
あの薄っぺらいペチペチ言うキーボード
ディスプレイは光沢液晶
起動音は簡単に消せる仕組みがなくイライラさせられる
既にiphoneのシェアはAndroidに負けてて将来性も薄い

Linuxを使ってるって言うならすげえってなるけど
macとかオシャレグッズの一つだろ
0244デフォルトの名無しさん2015/12/19(土) 09:05:50.45ID:C76ftQjv
Macはお手軽UNIX互換環境
(その他UNIX互換環境と比べて)手厚いサポートとシェアだけが利点
0245デフォルトの名無しさん2015/12/19(土) 09:11:24.65ID:P/E9W26M
MacはMagic Trackpadが神
でもUbuntuがプリインストールされてるいい感じのノートがあればそっち使うな
Winはシェル面倒くさくて無理
0246デフォルトの名無しさん2015/12/19(土) 10:14:54.78ID:AtJf5ENE
おまえらの中にラップトップにLinux入れてC書いてるヤシいるの?
いるなら機種教えてくれ。何買おうか迷ってるんだよ。
0247デフォルトの名無しさん2015/12/19(土) 12:38:53.28ID:UjV/9p/C
大概の機種で出来るだろう
もっと条件を絞って
ていうかラップトップって今もあるのか?
0248デフォルトの名無しさん2015/12/19(土) 12:40:50.65ID:dNXWfsX0
ラップトップって普通のノートパソコンのことだぞ
どこにでも売ってるだろ
0249デフォルトの名無しさん2015/12/19(土) 12:45:58.40ID:AtJf5ENE
>>247
安くて程々な性能
0250デフォルトの名無しさん2015/12/19(土) 13:19:20.82ID:9J93sV9+
>>245
Trackpadってどの辺が神なの?Trackpointより神?
0251デフォルトの名無しさん2015/12/19(土) 13:22:03.32ID:T0IQ8Alq
>>246
Macでいいだろ
インストールするの面倒だし
0252デフォルトの名無しさん2015/12/19(土) 13:28:13.65ID:UjV/9p/C
単にLinuxが動かせればいいというだけなら
それこそ1万円を切る中古ノートでも良いかもしれない
販売価格(税込): 9,800 円 メーカー: DELL
OS: ubuntu 14.04LTS CPU: Atom N455 1.66GHz
メモリ: 1024MB チップセット: インテルNM10 Expressチップセット
HDD: 250GB ディスプレイ: 10.1インチ 1024x600
http://www.panamedia.co.jp/products/detail.php?product_id=294

開発で使いたいなら、画面もそれなりに広くないと嫌だろうな。
3万〜4万程度で探してみたら良いんじゃない?
XPが動かせていたPCなら、問題なくインストールできると思うよ。
デストリビュータも色々あるけど、メジャーな所を選択すれば
情報も多いし後々楽じゃないかな?
0253デフォルトの名無しさん2015/12/19(土) 13:56:44.92ID:AtJf5ENE
>>252
ありがとう。中古は考えてなかったけど予算少ないしいいかも。

>>251
MacBook高いんだよね。中古ならそれなりのありそうだけど。
それならLinux入れたい。
0254デフォルトの名無しさん2015/12/19(土) 14:08:20.72ID:UjV/9p/C
最初、今使えるPCで仮想環境を作って勉強してみるといいかも
0255デフォルトの名無しさん2015/12/19(土) 14:53:33.18ID:HmYuvDMq
PCなんて中身はどれも同じだろ
見た目と操作感で決めるならMacBook Proがダントツで最強
ノートで他の選択肢はないよ
0256デフォルトの名無しさん2015/12/19(土) 14:58:59.40ID:UjV/9p/C
そりゃMacは良いのかも知れないけれど
同程度の環境を2,3万で作れるわけだし
0257デフォルトの名無しさん2015/12/19(土) 15:06:52.83ID:l5OQFCIp
MacのことはよくわからんけどMacOS上でC言語利用した開発って一般的なの?
gccとか標準で使えるの?
0258デフォルトの名無しさん2015/12/19(土) 18:25:03.86ID:LCiUeeSk
GCCが恐れおののくLLVMの主要開発メンバーがアップルにいるからな
0259デフォルトの名無しさん2015/12/19(土) 18:53:04.74ID:jx2/7ryw
>>255
操作感ならThinkpadだろ
7列キーボード時代の
0260デフォルトの名無しさん2015/12/19(土) 19:38:02.09ID:UjV/9p/C
ThinkPadは600まで使ってたな。
IBMが手放して以降は買ってない。
気に入っていたんだけどな。残念。
0261デフォルトの名無しさん2015/12/19(土) 23:24:23.65ID:25MZJC6Y
X1は12インチ時代の専用カバンに入らないから捨てた。
MacBookProだと破れそうだけどギリギリ入るのに。
0262デフォルトの名無しさん2015/12/20(日) 18:05:44.71ID:Xz71BWpz
最近はスティックPCなんてのもあるぞ
ポケットに入れられるくらいのサイズで、出先にHDMI対応のモニタと入力端末があれば済む
0263デフォルトの名無しさん2015/12/20(日) 18:28:15.56ID:ZYmGF2Jz
>>262
> 入力端末
て何。ノートなりデスクトップなりが要るてこと。
0264デフォルトの名無しさん2015/12/20(日) 18:33:20.89ID:Ny1JRpvZ
USBキーボードとかマウスとかでしょ
0265デフォルトの名無しさん2015/12/20(日) 18:34:15.10ID:aWZnirdW
せつこそれ入力端末ちゃう、入力装置や!
0266デフォルトの名無しさん2015/12/20(日) 18:35:43.03ID:+xSCMvYa
>>263
USBキーボード(とUSBマウス)
(Bluetooth経由の無線はどうだろう?)
0267デフォルトの名無しさん2015/12/23(水) 03:14:07.67ID:/wOBmLFi
>>257
一般的かどうか知らんが、Apple製のXcodeという統合開発環境(無料)があって、
それでC言語による開発は普通に可能。
gccは今試しにgcc -vやったら普通に入ってた。

まあでもMacはObjective-Cで開発するときにしか使ってないな。
C言語での開発は基本的にWindows。
0268デフォルトの名無しさん2015/12/24(木) 02:22:47.34ID:rZX6jm4/
C言語について質問です
テキストファイルを行毎に読んで
その行のスペース毎に配列に分けたいのですがどうすればいいですか?
例:あ り が と う
char s[5];
でs[]にひとつひとつ入れていく感じです
0269デフォルトの名無しさん2015/12/24(木) 02:23:52.06ID:rZX6jm4/
あ り が と う
ど う も
ま た ね
の時も教えてください
うまく説明できなくてすみません
0270デフォルトの名無しさん2015/12/24(木) 02:28:15.57ID:h3JTIwaN
>>268
つまりその例だと、
s[0] = 'あ';
s[1] = 'り';
s[2] = 'が';
・
・
・
になるようにしたいってこと?
無理だよ。
0271デフォルトの名無しさん2015/12/24(木) 02:32:06.99ID:rZX6jm4/
>>270
え?無理なんですか?
strtokとか使えば行けそうな気がするんですけど厳しいですかね
0272デフォルトの名無しさん2015/12/24(木) 02:35:40.52ID:KuEGn2vc
strtokはなるべく使わないようにしたほうがいい
0273デフォルトの名無しさん2015/12/24(木) 02:38:45.81ID:rZX6jm4/
そうなんですか
使わないとでも出来なくないですか?
使っても出来るのか分かりませんが…
0274デフォルトの名無しさん2015/12/24(木) 03:09:03.20ID:ZIvzfH3j
日本語はそもそも1バイトじゃないからね
charではあらわせん
0275デフォルトの名無しさん2015/12/24(木) 03:53:25.99ID:O43DKcKR
>>273
「あ」が普通の文字コードだとcharに入らない件は置いといて
訊きたいことがstrtokの使い方だとすると、まあこんな感じ
http://codepad.org/2UiXlEUT
0276デフォルトの名無しさん2015/12/24(木) 04:10:40.93ID:nzmFeWJc
オニグルマだか何だかの正規表現ライブラリ使ってsplitすればよいのでは?
どのみち格納には一文字2バイト要るけど。
それかC++11の<regex>使って、std::wregex_token_iterator(std::wsregex_以下略でもよい。好み)を用意し、

std::wregex_token_iterator witr( wstr, wstr + size, "(\\s*)", -1 );

for( ;witr != std::wregex_token_iterator p(); ++witr )
{
  if( *witr != L"" )
  {
    array.push_back( *witr );
  }
}

とでもする。
0277デフォルトの名無しさん2015/12/24(木) 05:54:44.54ID:ZDpdO5sC
>>268 に書かれた質問が、実現したい問題を正確に表してないのかも。

char s[5]; という変数名や strtok() に目をつけたあたりからの推断だが
本当は char *s[5]; に、各トークンの先頭番地を格納したいんじゃないか?

入力: "Monday Tuesday Wednesday Thursday Friday"
結果:
s[0] 'M'の番地
s[1] 'T'の番地 (Tuesday の 'T')
s[2] 'W'の番地
s[3] 'T'の番地 (Thursday の 'T')
s[4] 'F'の番地
0278デフォルトの名無しさん2015/12/24(木) 06:40:19.50ID:r56a6lxQ
>>272
> strtokはなるべく使わないようにしたほうがいい
何故?
0279デフォルトの名無しさん2015/12/24(木) 06:50:15.66ID:2ShnOfV/
c11の標準strtok_sを使えば良い
0280デフォルトの名無しさん2015/12/24(木) 08:38:13.34ID:VDgCwlJn
>>278
内部に状態を持っているからじゃないか?
最近の実装だとスレッドローカルな変数を使う事が多いみたいだから、環境によっては問題ないみたい
ただ、規格ではスレッドセーフ保証は無いんじゃなかったかな?

>>279
それマイクロソフト以外の開発環境で採用してる処理系あるの?
0281デフォルトの名無しさん2015/12/24(木) 09:13:10.25ID:rm8rK8Gg
Linux なら strtok_r() かな
0282デフォルトの名無しさん2015/12/24(木) 09:26:07.89ID:ycxxjW+c
>>277
strtok は元文字列書き換えもやってるし 先頭番地の記録だけじゃ足りないんだよね

入力: "Monday Tuesday Wednesday Thursday Friday"
処理後: "Monday\0Tuesday\0Wednesday\0Thursday\0Friday" (\0 はバイナリの 0)
puts(s[0]) で 「Monday」
puts(s[1]) で 「Tuesday」
puts(s[2]) で 「Wednesday」
puts(s[3]) で 「Thursday」
puts(s[4]) で 「Friday」
0283デフォルトの名無しさん2015/12/24(木) 11:14:29.15ID:i6Lb1xpy
例が悪かったですね
すいません適当すぎました
ぶっちゃけると
3.5 2.1 + 4.0 * 1.4 -
みたいなものをchar配列に入れて数字に変換して計算したいんですけど
行ごとの計算とスペースごとの読み込みが上手くできなくて困ってます
0284デフォルトの名無しさん2015/12/24(木) 11:34:47.04ID:Zs2o0pyD
>>283
その場合は使うのはchar*ではなくchar**じゃないかな。
つまり、ある型Tがあって、T* s;としたときに
s[0]が"3.5"
s[1]が"2.1"
s[2]が"+"
みたいになればいいって事でしょ?
この場合、T型がchar*型になるから、全体としてはchar** s;になると思う。
0285デフォルトの名無しさん2015/12/24(木) 11:41:09.44ID:i6Lb1xpy
>>284
すいませんC言語なんですけど
char*とchar**
よく分かりません
普通のcharと違うんですか?
0286デフォルトの名無しさん2015/12/24(木) 12:17:21.16ID:Zs2o0pyD
>>285
違う。
charはASCII文字を1文字だけ格納できる整数型
char*はcharへのポインタ
char**はchar*へのポインタ、つまりcharへのポインタのポインタ

今3.5なり2.1なり複数の「文字」から構成される「文字列」を格納したいんだよね?
Cだと文字と文字列は別のものなんだ。
0287デフォルトの名無しさん2015/12/24(木) 12:26:55.24ID:2ShnOfV/
ポインタをマスターしてない段階で>>283を作るのは無理だと思うよ
0288デフォルトの名無しさん2015/12/24(木) 12:40:25.62ID:r3VNG3Ob
ポインタはアドレスを格納する変数でしかない
32ビット環境だったら4バイトのデータを格納しているだけの存在でしかない
0289デフォルトの名無しさん2015/12/24(木) 12:56:52.90ID:JSDN82+y
忘れがちだが、ポインタはただデータ格納しているだけの存在ではなく「型」を持った立派な変数だぞ
charのポインタとintのポインタ、格納しているデータ長は同じかも知れんがポインタ演算の挙動は型によって変わる
0290デフォルトの名無しさん2015/12/24(木) 13:20:56.87ID:HM5VQL2N
>>283
ほら、ここに答えがあるぞ
http://web.cc.yamaguchi-u.ac.jp/~fukuyo/prog2/404.html
0291デフォルトの名無しさん2015/12/24(木) 14:17:55.43ID:rZX6jm4/
>>286,287 ポインタ習ったんですけどそこまで詳しくはやってないですね
勉強しときます

>>290
ありがとうございます
似てますけどちょっと違いますね
僕はファイル読み込みでやりたいんですよね
参考にさせて貰います
0292デフォルトの名無しさん2015/12/24(木) 16:18:06.73ID:egycav5a
>>23
四次元の理屈が分かっている奴がいるぞ。
0293デフォルトの名無しさん2015/12/24(木) 21:13:50.99ID:r3VNG3Ob
Cはオワコン
もう仕事では誰も使ってへん
0294デフォルトの名無しさん2015/12/24(木) 21:19:18.62ID:KuEGn2vc
君の会社はCが出来ないと思われているんだよ
0295デフォルトの名無しさん2015/12/24(木) 22:35:38.37ID:2ShnOfV/
>>288
それ言い出したバカはとっくに逃走してる
0296デフォルトの名無しさん2015/12/25(金) 00:28:46.68ID:RyGgxdqZ
>>288
その理解では説明が付かないこともある。
http://melpon.org/wandbox/permlink/FBUjSTXysU1mQBVM
0297デフォルトの名無しさん2015/12/25(金) 07:54:17.80ID:Zo4woatr
なんかそのコンパイラが規格に沿ってるのか疑問も出るんだけど。
0298デフォルトの名無しさん2015/12/25(金) 08:51:06.09ID:b5WU2Fqh
>>297
ポインターに1加算したら、型に応じたアドレス分だけ加算される。

1だけ加算したかったら、キャストするしかない。
0299デフォルトの名無しさん2015/12/25(金) 12:51:48.77ID:OtKF+aYO
>>297
少なくとも >>296 のコードの範疇では沿ってるだろ

int x;
int *p = &x + 1;
*p = 10;

鼻から悪魔が出てきても文句を言えないクソコードで >>296 が何を主張してるのかはよくわからんけど
0300デフォルトの名無しさん2015/12/25(金) 16:24:06.77ID:tivSlsf4
>>296
これって初期化と代入で何が変わってるの?最適化?
http://melpon.org/wandbox/permlink/hauqYsmBwJX49DAX
0301デフォルトの名無しさん2015/12/25(金) 16:32:25.11ID:sHNvOw5/
int x, y と宣言したとき
x と y のメモリ上の配置がどうなるかなんて
最適化とか 使ってる環境とかで簡単にゆれる
0302デフォルトの名無しさん2015/12/25(金) 19:26:32.47ID:OtKF+aYO
>>300
その if 文は単に x と y を比較してるだけだから成立しないよ
0303デフォルトの名無しさん2015/12/25(金) 19:28:15.89ID:wx0vRYD+
それが嫌ならこうしろゴミ

struct position{
int x, y;
};
position pos;
0304デフォルトの名無しさん2015/12/25(金) 19:29:31.67ID:wx0vRYD+
>>302
オメー邪魔だぞ
このタイミングで間に割り込むんじゃねーよ
ゴミクズ
0305デフォルトの名無しさん2015/12/25(金) 20:27:50.09ID:0xMqAn7x
structに入れたところでpaddingされない保証はないから無意味
0306デフォルトの名無しさん2015/12/25(金) 21:02:07.82ID:OVOClXE2
実際にこういうことがあるから人生面白い
いろいろ応用できそうだな
http://ameblo.jp/jinakuwan/
0307デフォルトの名無しさん2015/12/26(土) 01:06:34.09ID:nrKOtgfC
Cはオワコン
もう誰も使ってへん
0308デフォルトの名無しさん2015/12/26(土) 01:21:23.87ID:6+NqK2ZW
衰退気味ではあるがトップランク
http://news.mynavi.jp/news/2015/01/08/221/
0309デフォルトの名無しさん2015/12/26(土) 12:26:41.12ID:oIXuKyHb
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
2015年12月のデータだとJavaが抜いてCは2位になったみたい。
アセンブリが増えてるのが興味深いね
0310デフォルトの名無しさん2015/12/26(土) 12:38:41.28ID:KD7gR2Cz
>>309
高速通信生かそうとしたら、ドライバー部分をアセンブラで組むしかない。
0311デフォルトの名無しさん2015/12/26(土) 13:09:18.29ID:wDqylk+t
>高速通信生 かそうとしたら、ドライバー部分をアセンブラで組むしかない。
0312デフォルトの名無しさん2015/12/26(土) 13:19:15.27ID:6+NqK2ZW
Javaの伸びっぷりが凄いな
今年何かあったっけ?
0313デフォルトの名無しさん2015/12/26(土) 13:30:53.57ID:nrKOtgfC
スマホアプリも作れるしウェブアプリも作れる
オープンソースの賑わいもある
javaFXを使えばプラットフォームを問わずGUIアプリも作れる
Cはオワコン
もう誰も使ってへん
0314デフォルトの名無しさん2015/12/26(土) 13:42:19.50ID:oIXuKyHb
>>313
ランキングは2位に落ちてるけどレーティングは16.460%と6〜7プロジェクトに1つの割合で使われてるぞ
君と君の知り合いがC#やVBしか使ってなくて、Cを使ってる人を聞いたことがないとしても
世界的にはC#は4%、VBやrubyは2%しか使われていない。
0315デフォルトの名無しさん2015/12/26(土) 14:11:57.71ID:7WO4+JzY
これの評価基準って検索エンジンだっけ?
業務ユースのJavaがトップになるのは当然だな。
オープンソースリポジトリも考慮すればまた違ってくるんじゃないか?
0316デフォルトの名無しさん2015/12/26(土) 14:34:02.68ID:RP14UPme
CとC++の区別どう判断してるのだろうな
処理系の普及度からいえばC++とCが逆転するような気がするんだが…
0317デフォルトの名無しさん2015/12/26(土) 17:33:38.48ID:6Xz/DXW5
CとC++を区分するのが分からん
0318デフォルトの名無しさん2015/12/26(土) 18:20:07.14ID:Mh3LsY+/
Cは組み込みがある限りずっと上位でしょう
C++に抜かれるなんて考えられない
0319デフォルトの名無しさん2015/12/26(土) 18:24:39.86ID:EXUTS9i+
C++はC++であると同時にCでもあるのになんでCに負けうるんだ
0320デフォルトの名無しさん2015/12/26(土) 18:34:15.06ID:X0XEda8C
C++で書いたら、Cコンパイラ通らないじゃないか
0321デフォルトの名無しさん2015/12/26(土) 18:39:49.64ID:WET3gKUy
Cでかいとけば、ふるいパソコンでむかしのコンパイラで、つかえる
0322デフォルトの名無しさん2015/12/26(土) 19:04:57.57ID:oIXuKyHb
ざんねん、そのパソコンに とうさいされているのは K&RのCコンパイラだった!
ANSIスタイルの かんすうの せんげんが とおらない!

main(argc, argv)
int argc;
char* argv[];
{
 return 0;
}
0323デフォルトの名無しさん2015/12/26(土) 19:20:04.29ID:pmQb/XIR
Cで書いたら、C++コンパイラで通るじゃないか
0324デフォルトの名無しさん2015/12/26(土) 19:20:35.79ID:X0XEda8C
通るとは限らないぞ
0325デフォルトの名無しさん2015/12/26(土) 19:22:19.98ID:pmQb/XIR
Cで書いても、C++コンパイラで通るじゃないか
0326デフォルトの名無しさん2015/12/26(土) 19:24:45.67ID:6Xz/DXW5
Cで書いても、C++コンパイラで通るじゃないか
0327デフォルトの名無しさん2015/12/26(土) 19:32:38.64ID:6AGjzFRF
new や delete 等 C++で増えた予約語を使ってるケースで通るのかな
0328デフォルトの名無しさん2015/12/26(土) 20:07:17.02ID:YV12MLKo
「Cで書いても」
0329デフォルトの名無しさん2015/12/26(土) 20:40:58.44ID:6AGjzFRF
× C++で増えた予約語を使ってるケース
○ C++で増えた予約語を識別子に使ってるケース

int new; とか C言語なら合法
0330デフォルトの名無しさん2015/12/26(土) 21:14:32.22ID:oIXuKyHb
Cとc++の11以降とで意味の変わるautoも注意が必要だよね
0331デフォルトの名無しさん2015/12/26(土) 21:25:09.13ID:pVKld/fI
C++11のautoはCだと単にコンパイルエラーじゃね?
0332デフォルトの名無しさん2015/12/26(土) 21:40:22.22ID:WauQYE2g
int main() {
auto a = 0;
return a;
}
あれ? 同じじゃんw
0333デフォルトの名無しさん2015/12/26(土) 21:50:24.04ID:LYATmO+u
auto intの略なんだよ
0334デフォルトの名無しさん2015/12/27(日) 07:57:50.06ID:A9mtyxze
Cで許されてた void* からの暗黙の型変換もC++だとダメだね。
malloc() の返り値でエラー出まくり。
0335デフォルトの名無しさん2015/12/27(日) 10:25:07.84ID:pr/2a1JC
C言語は*.c
C++は*.cpp

VC++においてはね。
0336デフォルトの名無しさん2015/12/27(日) 11:16:26.61ID:LZ1P+G9z
>>335
オプションで変えられる
プロパティ──ペ──ジからだと
[構成プロパティ]→[C/C++]→[詳細設定]→[コンパイル言語の選択]
0337デフォルトの名無しさん2015/12/27(日) 16:33:00.03ID:6NYNO2+5
>>334に関連してだけど
CとC++でNULLの定義が違っている場合もあるよね
Cはvoid*からの暗黙の変換が許されているから
#define NULL ((void *)0)
な環境があるけど
C++はvoid*からの変換がダメだから
#define NULL 0
だよね
0338デフォルトの名無しさん2015/12/27(日) 16:34:51.54ID:6NYNO2+5
まぁこれも言われていたのは昔の話で
今ももちろん問題なんだけど
それ以前に最近のC++とCは完全に別々の道を歩んでいて
互換性なんか全然ない状況なんだけどね
0339デフォルトの名無しさん2015/12/27(日) 17:04:46.46ID:bldDGb7M
Cはオワコン
誰も使ってへん
WEBもデータベースも碌に使えない
GUIアプリも使えない
こんなオワコン言語誰が使うのよ
組込みで使われてる?
あんなものはソフトウェア開発じゃねえよ
ハード屋が設計した時点でソフトの仕様もほぼ決まる
ハード屋の設計ミスはソフト屋に押し付けられる
半田ゴテとオシロスコープでデバッグする人間なんかソフトウェア技術者じゃねえよ
0340デフォルトの名無しさん2015/12/27(日) 17:30:33.70ID:HgS+DUOa
ICE使えよ
0341デフォルトの名無しさん2015/12/27(日) 17:45:06.68ID:OS6eeKxO
HW寄りのドライバ部分について言えば合ってるともいえるけど
そのドライバを使って作られるものもCなんですよ
そんな視野の狭いこと言ってないで一度は社会に出て働いてみたらいいよ
0342デフォルトの名無しさん2015/12/27(日) 19:17:22.40ID:7NjrpkLV
>>339
それをCスレでいう奴はC言語以上に使えない存在だけどね
0343デフォルトの名無しさん2015/12/27(日) 20:12:46.46ID:kNkpHWWg
使ってる言語に振り回されてる変なのが不満ぶちまけてるのか?
0344デフォルトの名無しさん2015/12/27(日) 20:22:55.78ID:tVVclFon
そもそも言語自体が大抵Cで作られてるんですがそれは
0345デフォルトの名無しさん2015/12/27(日) 23:38:33.21ID:5oYvOMbQ
Cに限って言えば、レガシーなコンパイラでも動作するようにソースを
作ってくれた方がうれしいことは結構ある。

うちのソースはC99の範囲で作成してて、環境依存性が低くなってるぜ!(ドヤッ

でもいいんだけど。古いコンパイラでビルドできないから、実際には環境依存性が
拡大してんだよね(ノ∀`)

必要性はともかく、MS-DOS用コンパイラでも通る libjpeg のソースはカッコイイとは思う。
0346デフォルトの名無しさん2015/12/29(火) 19:08:52.54ID:B86ZwWUs
可搬性を確保するのむずかCよね
0347デフォルトの名無しさん2015/12/29(火) 19:59:56.63ID:Kpb8+VpB
2chのread.cgiも、Cだっけ?DBって何使ってんだんすかね?
0348デフォルトの名無しさん2015/12/29(火) 21:46:02.81ID:q8X2dkwQ
>>347
2chやそれ以前の古のCGIは元々DBではなくファイルで管理が一般的
現在のおーぷんなんかはDBされているらしいが(いまはここもDBなのかもしれない)
0349デフォルトの名無しさん2015/12/29(火) 22:55:27.03ID:Kpb8+VpB
>>348
まぁ始まりは、あめぞう掲示板だもんね
いまもファイル管理かな  可能ならファイル管理が一番負担少ないんだよね鯖には
0350デフォルトの名無しさん2015/12/30(水) 02:58:42.64ID:umSXLTLc
linuxでc言語の環境組んで勉強したいです。
ついでにvimとか使えるようになりたいんですが、vimって関数とか補完してくれるんですか?
0351デフォルトの名無しさん2015/12/30(水) 03:29:06.94ID:c25CJwGc
>>350
挿入モードでC-pとかC-nとかで補完できると思う
0352デフォルトの名無しさん2015/12/30(水) 09:20:55.40ID:wAoiK+Ar
Ctagがなんか使ってないとあんまり使いやすい補完は出来なかったような
0353デフォルトの名無しさん2015/12/30(水) 09:37:10.79ID:dF3jkthq
vimのキーバインドに慣れると通常の操作にはもう戻れなくなるから注意しろよ!
なんでもvim化したくなる病気にかかるぞ。
vsvim、vimperatorちょーきもちいいし
0354デフォルトの名無しさん2015/12/30(水) 14:47:38.87ID:ugBw4vew
nviも思い出してあげてください
0355デフォルトの名無しさん2015/12/30(水) 23:21:31.16ID:ZlOQB/u7
>>339
では、どんなものがソフトウエア開発なんだ? おまはんの理解では。
ハード屋の設計ミスを押しつけられるのをそんなに不満がるおまはんが、
いったいソフトウエアとは何だと思っているのか、ぜひぜひ聞いてみたいもんだねえ。
半田ごてもオシロスコープも使えないクルクルパーがソフトウエア技術者なのか?
頭おか・・・いや変わってるねえ。
0356デフォルトの名無しさん2015/12/30(水) 23:57:50.55ID:umSXLTLc
>>351
ありがとうございます。
ちょっと試してみます。

ちなみに、linuxでcやる場合どういう環境がスタンダードなんでしょうか?
0357デフォルトの名無しさん2015/12/31(木) 00:03:50.41ID:Rg3p4l8E
コンソールでvimでgccでmakeだろ
0358デフォルトの名無しさん2015/12/31(木) 00:09:26.32ID:n9A3edra
emacsですべて済む
0359デフォルトの名無しさん2015/12/31(木) 01:53:24.89ID:Rg3p4l8E
そもそもCで何を作るんだ
画面が出るプログラムの方が面白くないか
0360デフォルトの名無しさん2015/12/31(木) 02:05:15.22ID:6jpuja+H
>>359
> 画面が出るプログラム
は使いにくいじゃん。
0361デフォルトの名無しさん2015/12/31(木) 02:56:04.46ID:CRKJz/nv
Cには苦C思い出しかない C++、C#然り
おれは余生はPHPのみで過ごします
0362デフォルトの名無しさん2015/12/31(木) 06:25:21.15ID:i33x2L8P
俺はコンソール上でvim、vim中から :make する人。
QuickFix機能が大好きなんだよ。

でも >>351 の補完操作は知らなかった。なかなか便利だね。
0363デフォルトの名無しさん2015/12/31(木) 08:53:09.06ID:N9IVqlb8
ちゃんと用意を整えればclangベースの完成度の高い補完が受けられるはず
0364デフォルトの名無しさん2015/12/31(木) 12:52:11.32ID:Rg3p4l8E
補完もしらないとか
ctags使ってタグジャンプとか常識だろ
0365デフォルトの名無しさん2015/12/31(木) 13:56:35.64ID:a5VWzLto
>>361
Perl 6が先日爆誕した今、PHPもRubyもPythonもみなPerl 6の前にひれ伏すのみ!
全てのLL言語は道を空けろ
0366デフォルトの名無しさん2015/12/31(木) 14:28:24.51ID:HlqOeDMb
すいません、picマイコンのプログラムを行っているのですが、
int型の数値をchar型のascii文字列に変換する方法はないでしょうか?

int a=31なら
char b='1'

int a=41なら
char b='A'
に変換する方法です。

どなたかわかりましたら、お願いします。
0367デフォルトの名無しさん2015/12/31(木) 14:45:02.76ID:E/Q2xqoe
>>366
asciiコード表をググる
0368デフォルトの名無しさん2015/12/31(木) 14:53:25.60ID:n9A3edra
>>366
b = (char)a;
0369デフォルトの名無しさん2015/12/31(木) 15:09:58.06ID:fJbh+cCl
>>366
int a=31なら
char b='1'
31って、10進数じゃなく、16進数なの?
0370デフォルトの名無しさん2015/12/31(木) 16:34:24.08ID:a5VWzLto
>>366
「質問の意味不明。再入力せよ
「無人化すべきである
0371デフォルトの名無しさん2015/12/31(木) 19:17:49.74ID:wE66IW8z
いや、>>368がすべてだろ
これ以上はどうしようもない気がするが…
0372デフォルトの名無しさん2015/12/31(木) 19:22:29.15ID:SKwNZ+jx
文字列って言ってるし

char b[2];
b[0] = (char)a;
b[1] = 0;

かもしれんじょ
0373デフォルトの名無しさん2015/12/31(木) 20:58:42.08ID:a5VWzLto
>>371
(char)31が何で(char)'0'になんの?
ASCIIコード表によれば31はUnit Separatorだって書いてあるが…
0374デフォルトの名無しさん2015/12/31(木) 21:16:31.63ID:SlDcEVNz
>>373
asciiコード表って10進だと思う?
0375デフォルトの名無しさん2015/12/31(木) 21:30:15.73ID:a5VWzLto
>>374
それ漏れよりも>>371に聞いてくれ
0376デフォルトの名無しさん2015/12/31(木) 21:31:14.84ID:h8iGf5UY
0x31 '1'
0x41 'A'
0377デフォルトの名無しさん2015/12/31(木) 21:32:42.94ID:SlDcEVNz
>>375
ごめんね早漏で
0378デフォルトの名無しさん2015/12/31(木) 21:34:45.49ID:CPFiItNL
>>366
おそらく16進表記なんだろう…と意図を汲むことはできるけどさ。
まず最初に、プログラムは
0379デフォルトの名無しさん2015/12/31(木) 21:34:51.00ID:h8iGf5UY
int i;
char b;

i=1;
b=1+'0';
0380デフォルトの名無しさん2015/12/31(木) 21:36:44.73ID:h8iGf5UY
int i;
char b[10];

i=31;
b[0]=i/10+'0';
b[1]=i%10+'0';
b[2]=0;
0381デフォルトの名無しさん2015/12/31(木) 21:38:22.33ID:CPFiItNL
>>366
おそらく16進表記なんだろう…と意図を汲むことはできるけどさ。
まず最初に、プログラムは"書いたとおりに動く"ってことをきちんと認識すべきだ。
その上でなお>>366のままの処理を実現したいならルックアップテーブルを使うのが簡単。
0382デフォルトの名無しさん2015/12/31(木) 21:41:23.01ID:a6Iii3M/
超エスパーすると、sprintfの使えない処理系で同等のことをしたいんじゃないかと
0383デフォルトの名無しさん2015/12/31(木) 21:43:19.09ID:h8iGf5UY
素人さんに組み込み系やらせてるだけだから
ご本人様に仕事紹介した方がなんとかしてくれるのでは
0384デフォルトの名無しさん2016/01/01(金) 05:37:57.59ID:6x5pHkP6
>>366
最初の2行の質問部分と、欲しい結果の例示が矛盾してるんだ。

int a=31 なら char b='1'
int a=41 なら char b='A'
... bは文字列じゃない。char変数。

おまけに値31から文字'1'に変換する文字コードが不明瞭。
値0x31(10進数で49)が'1'なら一般的なASCIIコードだと分かるけど。

というわけで、答える人も >>366 の矛盾をそれぞれの視点で
解釈してるんで様々な答案が現れる。
もう一度、正しい質問を出し直すのが良いかと。
0385デフォルトの名無しさん2016/01/05(火) 01:22:26.29ID:dvg1UNQj
初心者です
int c=1;
main()
{
    int b=2,c=3;
    {
    int a=4,b=5;
    printf("c=%d",c);
    }
}

こんなときにprintfで表示するcはmainの外にあるcですか?mainの中にあるcですか?
0386デフォルトの名無しさん2016/01/05(火) 01:30:27.66ID:9P9OP9TU
一番近いスコープで宣言されてるヤツ。
この場合に表示されるのは 3 だね。
0387デフォルトの名無しさん2016/01/05(火) 11:48:25.98ID:3x6aqfzI
>>385
http://codepad.org/fVWmtQM5

ここにソースを貼って聞くより、
codepad使って試してみる方が速いし
君のためにもなると思う。
0388デフォルトの名無しさん2016/01/05(火) 11:59:21.74ID:uJ085arg
テキスト GCC 最強
0389デフォルトの名無しさん2016/01/05(火) 15:49:49.90ID:LDSV25Qv
コンパイルして試すって方法では
移植性のある動作か環境依存かは判断できないからなぁ。
規格についての質問だったんじゃないかしら。
0390デフォルトの名無しさん2016/01/05(火) 16:22:25.15ID:KbFq7Je6
それならたとえば gcc でやって見たらこうなったんだけど、
これは規格で決まっているのか?という質問の仕方をするぞ。ふつーなら
まあ。そんな質問の仕方ができるのなら、自分で規格書にあたるだろうがな

ソフト関係一般、試してみてから質問しろって質問大杉
0391デフォルトの名無しさん2016/01/05(火) 19:28:12.81ID:W/DE25A2
再現できる最小コードに切り詰めてくうちに問題点を自分で発見してしまう
0392デフォルトの名無しさん2016/01/05(火) 19:40:01.60ID:3x6aqfzI
何かを学習するのなら、そう言うのって大事じゃないかな
0393デフォルトの名無しさん2016/01/05(火) 21:16:04.59ID:QofW8aPu
>>391
あるあるネタだよね
0394デフォルトの名無しさん2016/01/08(金) 01:58:52.78ID:Sl02QCfR
>>387
double型の配列x.int型のcがあるとする
printf("x[%d]=",c);

x[%d]の%dはcがint型だからという考え方で良いんですか?
0395デフォルトの名無しさん2016/01/08(金) 02:06:54.04ID:gvhAKgDA
そう
0396デフォルトの名無しさん2016/01/08(金) 02:23:22.67ID:Sl02QCfR
>>395
ありがとうございます
0397デフォルトの名無しさん2016/01/08(金) 16:33:51.39ID:jv1GyZfR
c言語よりアセンブリのほうが早いらしいけど、コンパイルしたのを逆アセンブリして、アセンブリコンパイラでコンパイルしたら早くなったりする?
0398デフォルトの名無しさん2016/01/08(金) 16:58:44.64ID:lSaO5zOy
コンパイラにアセンブリソースを出力させれば良いだろう
0399デフォルトの名無しさん2016/01/08(金) 17:13:59.66ID:sptetxO+
かわらん
0400デフォルトの名無しさん2016/01/08(金) 17:15:52.70ID:jv1GyZfR
>>398
そんな事出来るのか

>>399
何故?
0401デフォルトの名無しさん2016/01/08(金) 17:18:57.93ID:sptetxO+
逆アセして 再びアセンブラにより実行ファイルを作ったところで
同じ機械語で書かれた実行ファイルを書き直してるだけだし
0402デフォルトの名無しさん2016/01/08(金) 17:20:42.43ID:sptetxO+
逆アセしたのを人手で修正するとなると、実行速度が変わる可能性はあるけど
今時のコンパイラの最適化を超えることができるかは不明だぜ?
0403デフォルトの名無しさん2016/01/08(金) 17:27:10.00ID:jv1GyZfR
>>402
もしかしてアセンブラが早いんじゃなくて、詳細設定も出来るから上手い人が書いたら早いってこと?
つまり初心者がアセンブラ使ったらcより遅くなるってこと?
0404デフォルトの名無しさん2016/01/08(金) 17:35:34.33ID:sptetxO+
初心者が手を出すようなもんじゃない とだけ
0405デフォルトの名無しさん2016/01/08(金) 19:29:37.94ID:aMJ95Xns
>>403
コンパイラの能力と、アセ書く人の腕次第
0406デフォルトの名無しさん2016/01/08(金) 19:47:56.85ID:HKkiRRvQ
cpuのパイプラインまで考慮して命令並べる事もあるので、インテルとかにいる達人じゃなきゃ勝てない。
0407デフォルトの名無しさん2016/01/08(金) 23:07:20.42ID:9BLMKoY/
>>403
その通りと思って間違いない
0408デフォルトの名無しさん2016/01/09(土) 00:24:52.19ID:rnbze7si
コンパイラの最適化を超えるアセンブリは簡単にはかけないから、せいぜい逆アセを元に修正加えるのがせいぜいじゃない?
0409デフォルトの名無しさん2016/01/09(土) 01:51:05.94ID:ANqeYpuP
int i.j.k.m
double a[4][5].temp
ピボットがa[k][k]のとき二次配列a[4][5]のk行の要素とm行の要素を交換するプログラムを作りなさい

for(i=k;I<5;i++){
temp=a[k][i];
a[k][i]=a[m][i];
a[m][i]=temp;}

と答えがなっているのですが
for(i=0;•••;•••)とならないのはなぜですか?
0410デフォルトの名無しさん2016/01/09(土) 06:13:10.50ID:VKEzr4ni
>>409
ピボットがk行k列ということはk列より前の列は対角化が終了しているはずだから要素は0になっているので交換は不要
…とエスパーしてみる
0411デフォルトの名無しさん2016/01/09(土) 13:25:44.77ID:ANqeYpuP
>>410
答えが間違ってる可能性はありますか?
0412デフォルトの名無しさん2016/01/09(土) 13:40:26.34ID:DqPp/fff
>>411
ループの終了条件が間違っている可能性がある
多分最後の列ベクトルが列数のカウントに入っていない
0413デフォルトの名無しさん2016/01/09(土) 13:44:46.00ID:DqPp/fff
すまん、あってたわ
0414デフォルトの名無しさん2016/01/09(土) 13:51:12.35ID:aqFjvIcu
>>411
LU分解かガウスジョルダンか分からんけど上三角行列の行交換の部分だけなら特に間違ってないだろ
0415デフォルトの名無しさん2016/01/09(土) 14:16:34.01ID:ANqeYpuP
>>414
四次元連立一次方程式の配列a[4][5]をガウスジョルダンでm行とk行の要素を入れ替えなさい

みたいな感じです
0416デフォルトの名無しさん2016/01/09(土) 14:28:29.00ID:EC0TmpF1
>>415
ガウスジョルダンなら>>410のレスの通りだろ
下手にすべての要素を入れ換えると処理済みの対角要素まで要らんところに移動することになるぞ
0417デフォルトの名無しさん2016/01/09(土) 14:36:17.94ID:ANqeYpuP
>>416
整理して考えてみます
0418デフォルトの名無しさん2016/01/10(日) 02:03:02.80ID:KHsQJ2Yx
for(...;...;...)
printf(..........)
for(...;...;...)
となっていたら
上の二行だけを先に実行してそれが終わって次の文ですよね?
0419デフォルトの名無しさん2016/01/10(日) 02:07:57.34ID:KHsQJ2Yx
>>418
すみません解決しました
0420デフォルトの名無しさん2016/01/10(日) 03:58:11.89ID:KHsQJ2Yx
int main(void)#include <stdio.h>

{
int i ,a[3]={10,20,30}, b[3]={1,2,3};

func1(a);
for(i=0;i<3;i++) printf(
0421デフォルトの名無しさん2016/01/14(木) 15:18:15.64ID:+xO0ECJY
バイトオーダーの入れ替え(リトル <-> ビッグ)関数が必要なんだけど、
こうすると速くなる、こうするのが賢いってコードある?
特になければ素直に1バイトごとにビットシフトで処理しようかと思うんだけど。
0422デフォルトの名無しさん2016/01/14(木) 15:57:38.19ID:si8G2R6b
なんでビットシフト?
8ビット毎の並び順では バイトオーダー
違った?
0423デフォルトの名無しさん2016/01/14(木) 17:11:17.68ID:DrC+qJSa
例えば32bit分を一気に読み込んでビットシフトで生成したほうが
メモリアクセスが減らせて速いからでは?

バイト単位でアクセスしたコードが最適化でどうなるか分からんから、結果的に意味ないかもだが
それでも32bit分一気に読み込んで書き換えるコードより速くなることはないだろう

ほかには、ユニオンを使うやり方と、SSEを使う方法が考えられる
SSEを使う方法は、例えばこれ
http://qiita.com/nbjiao/items/12f90c734c0df31aec62
0424デフォルトの名無しさん2016/01/14(木) 18:52:06.53ID:si8G2R6b
バイト並びが
上位 下位
を
下位 上位
では
回路上でみると、ビットの入れ替えしないといけないように見えるから
やっぱり、俺が勘違いしてるのか
0425デフォルトの名無しさん2016/01/14(木) 18:54:35.61ID:nHVQKm3B
通信やグラフィック(ビットマップ)なんかではビット単位で全部ひっくり返す必要もあったりするね
何bit単位でさらに並びをどうするかってのはほんとは色々組み合わせがあるものよ
0426デフォルトの名無しさん2016/01/14(木) 19:19:36.95ID:jIuADbbb
a が 16bit整数だとして
union や キャストを使わずにやろうとすると、
バイトオーダーの入れ替えを作るのにビットシフトするのかな
((a << 8) & 0xf0) | ((a >> 8) & 0x0f)
0427デフォルトの名無しさん2016/01/14(木) 19:22:16.82ID:si8G2R6b
エンディアン 嘘つかない?
0428デフォルトの名無しさん2016/01/14(木) 20:36:54.02ID:os+tW4sX
>>426
それが普通でしょ
今時の CPU なら何ビットシフトしても1サイクルで終わるし
コンパイラーによっては、68000 の swap のような専用命令を使ってくれたりする
0429デフォルトの名無しさん2016/01/14(木) 20:56:46.88ID:si8G2R6b
ttps://linuxjm.osdn.jp/html/LDP_man-pages/man3/byteorder.3.html
0430デフォルトの名無しさん2016/01/14(木) 21:11:42.91ID:DrC+qJSa
ただし、>>426のコードは間違っているので問題外だがな
0431デフォルトの名無しさん2016/01/14(木) 21:48:03.06ID:jIuADbbb
うわ やっちまった
はずかしー
0432デフォルトの名無しさん2016/01/14(木) 22:47:53.67ID:Zc1b49I1
http://codepad.org/oeWG3Pe9
半年振りに int main() と書いたような気が

>>431 どんまい
0433デフォルトの名無しさん2016/01/15(金) 07:45:02.36ID:rbEYiMQp
32bit版は?
0434デフォルトの名無しさん2016/01/15(金) 08:09:04.37ID:kbAfmhMJ
>>433
それぐらい自分で考えろ
0435デフォルトの名無しさん2016/01/15(金) 09:06:47.46ID:L+SdYadB
>>432
16bit 値なら、& 取る必要無いだろ?
0436デフォルトの名無しさん2016/01/15(金) 09:34:48.02ID:CkLNaHVR
http://codepad.org/6qJztvx0
0437デフォルトの名無しさん2016/01/15(金) 09:39:17.10ID:CkLNaHVR
http://codepad.org/1IPWK31U
0438デフォルトの名無しさん2016/01/15(金) 15:22:44.57ID:F13ndxIM
次にお前は64bit版は?と言う
0439デフォルトの名無しさん2016/01/15(金) 16:26:33.96ID:fA3ibDHk
4bit版は?
0440デフォルトの名無しさん2016/01/15(金) 16:26:59.37ID:fA3ibDHk
64bit版は?
0441デフォルトの名無しさん2016/01/15(金) 16:47:29.87ID:CkLNaHVR
http://codepad.org/XMq1qSHq
0442デフォルトの名無しさん2016/01/15(金) 18:23:08.30ID:vW09T/Qw
>>441
なんでゼロが出てくるの?
0443デフォルトの名無しさん2016/01/15(金) 18:27:31.72ID:CkLNaHVR
http://codepad.org/tiL3KiRJ
0444デフォルトの名無しさん2016/01/15(金) 20:07:47.85ID:nz6sd5//
>>435
?
コードでいうと?
0445デフォルトの名無しさん2016/01/15(金) 20:12:06.86ID:XOSgYs/9
>>444
>>436見りゃわかるだろアホ
0446デフォルトの名無しさん2016/01/15(金) 20:15:07.23ID:nz6sd5//
>>445
unsigned short が 16bit であると決まっているのか?
0447デフォルトの名無しさん2016/01/15(金) 20:21:36.08ID:CsxQJ5lx
assert で跳ねるようにして確認してる   (けど1バイトは8bit確定なのだろうか?)

最上位ビットが立ってる状態での右シフトで
1を補ってしまうのを嫌うのに 符号なし にしてるっぽい
0448デフォルトの名無しさん2016/01/16(土) 08:11:13.95ID:WjMevUGd
>>421
エンディアネスの変換は素直に
hton/ntoh 系のPOSIX関数を使うのが無難でないか。
きっとライブラリ作者の方でチューニング済みだよ。

て言うか >>429 と同じ内容だな、こりゃ。
0449デフォルトの名無しさん2016/01/16(土) 09:03:42.72ID:K5qF020v
それじゃ任意の変換ができんがな
0450デフォルトの名無しさん2016/01/16(土) 09:14:24.57ID:PGyH0xCz
バイト織田の変更とかarchにあわせるためだから
暑中やるもんでもないような
0451デフォルトの名無しさん2016/01/16(土) 13:10:08.41ID:QU9s9ZKo
>>443
シフト8回、論理積6回、論理和7回か。

こう書けばシフト6回、論理積4回、論理和3回だからこっちの方が標準的なマシンなら速いぞ。
http://codepad.org/zLQuDOiU

あと型のサイズが気になる程古い環境だとunsigned long long型はそもそも存在しないので注意な。
0452デフォルトの名無しさん2016/01/16(土) 13:18:13.82ID:QU9s9ZKo
>>447
Cの仕様上は1バイトは7bit以上

・・・・・・だった筈
0453デフォルトの名無しさん2016/01/16(土) 15:54:07.40ID:K5qF020v
>>451
おれのはbswap2回になるわけだが
0454デフォルトの名無しさん2016/01/16(土) 16:12:42.07ID:K5qF020v
>>451
お前のもclangでやれば同じになるようだな
0455デフォルトの名無しさん2016/01/16(土) 16:17:28.40ID:FL+/Wrts
>>452
7bitで処理しているCPUってあるの?
0456デフォルトの名無しさん2016/01/16(土) 16:19:49.89ID:K5qF020v
1bitでもあるぞ
0457デフォルトの名無しさん2016/01/16(土) 17:31:03.53ID:QU9s9ZKo
>>454
頭が固くてごめんよ、Intel系で、最適化掛けたら、確かにbswap命令が1個か2個の超短い関数になるね。

俺が言った「標準的なマシンなら速い」ってのは
「ハッカーのたのしみ」って本で扱ってるような、およそどんな種類のCPUにも含まれている命令のみを使った場合に速いって話な。

実際、アーキテクチャ依存な最適化なんかを掛けずに比較するとこんな具合になる。
https://gist.github.com/pixie-grasper/74fcbd7d924cd99c570e

>>455
昔はあったってWikipediaには書いてあるな。
あとはFPGAでわざわざそういうCPU作るとか
0458デフォルトの名無しさん2016/01/16(土) 17:39:40.54ID:K5qF020v
>>457
今時gccやclangがサポートしてるCPUならおよそどんな種類のCPUにも含まれてるんじゃないか?
0459デフォルトの名無しさん2016/01/16(土) 17:40:17.63ID:QU9s9ZKo
clangで言語依存な最適化のみ最大限掛けたら、つまり
clang++ bswap.cc -o - -S -emit-llvm -std=c++1y | opt -O3
したら両方共
tail call i64 @llvm.bswap.i64(i64 %a)
になっちゃった。
最適化つえぇ・・・
0460デフォルトの名無しさん2016/01/16(土) 17:44:51.83ID:QU9s9ZKo
>>458
targetとしてサポートしてるCPUには8086から80386までを含む。
IntelのCPUにbswap命令が追加されたのは486になってから。
0461デフォルトの名無しさん2016/01/16(土) 17:46:41.12ID:K5qF020v
だから今時と言ってるだろ
0462デフォルトの名無しさん2016/01/16(土) 17:47:59.37ID:QU9s9ZKo
ああ!
今時のgccやclangが
ではなく
今時のCPUなら
か。

せやね
0463デフォルトの名無しさん2016/01/16(土) 21:27:19.76ID:tFEy8q4U
>>457
漢のフルカスタムへおいでませ
0464デフォルトの名無しさん2016/01/17(日) 22:55:07.68ID:h36PkqQ1
ランダムアクセスファイルって基本的にはメモリに乗せてから処理するより遅くなると見ていいんでしょうか?
開発中のアプリケーションで両方使っているんですが、ランダムアクセスの方が遅いんです。実装の問題でしょうか?
0465デフォルトの名無しさん2016/01/17(日) 22:59:54.79ID:hf3I1Sql
HDDを対象にランダムアクセスすれば、メモリーアクセスの方が遙かに速いでしょうね。
SSDを対象に同じ事をする場合は、相当の改善は見込めると思います。
0466デフォルトの名無しさん2016/01/18(月) 01:05:34.65ID:TR/YNlok
>>465
レスありがとうございます。
勘違いしてたみたいでランダムアクセスの方が速いと思ってました。
ちなみにSSDの環境で比べています。
ランダムアクセスの利点はメモリ消費の節約ぐらいですか?
0467デフォルトの名無しさん2016/01/18(月) 01:17:38.83ID:TR/YNlok
>>466 質問撤回します
利点はメモリ消費の節約と、レコード番号によるアクセスですね
実装では選択レコードの表示と、全レコードの表示が機能としてあるのですが、
選択レコードの表示はそれなりに速いので、ランダムアクセスファイルで
シーケンシャルアクセスすると逆に遅くなっちゃうということですかね
0468デフォルトの名無しさん2016/01/18(月) 02:58:27.22ID:F4LpYkVc
小さいファイルならメモリに載せたほうが格段に早い
大きいとメモリを圧迫するからバランス
0469デフォルトの名無しさん2016/01/18(月) 04:10:59.44ID:TR/YNlok
走査前にファイル容量を調べてアクセス方法を分岐するのは一般的ですかね?
0470デフォルトの名無しさん2016/01/18(月) 07:48:18.62ID:X1DF5hh1
メモリマップしてOSに任せとけ
0471デフォルトの名無しさん2016/01/18(月) 12:31:46.71ID:qMoQIRpx
メモリに乗せる云々は、ファイル全体をメモリに読み込むという意味さと解釈すると
一般的にはアクセス箇所が少ないならファイルを直接アクセスする方が有利
使わないところを読むのは時間的にも空間的にも無駄だから
0472デフォルトの名無しさん2016/01/18(月) 12:50:07.58ID:M94/HkrH
まず使用言語を聞かないと話が食い違ってる気がする
Basic とか COBOLやろか
0473デフォルトの名無しさん2016/01/18(月) 12:50:08.80ID:ICspl/0l
賢いDBあるのに
自前で実装?
0474デフォルトの名無しさん2016/01/18(月) 14:27:58.54ID:xk2uumt0
一応、ここはC言語入門編のスレな
0475デフォルトの名無しさん2016/01/18(月) 18:16:01.25ID:TYJ3w2rJ
そうだよな。
C言語でシーケンシャルファイルとかランダムアクセスファイルとかがどこの何者なのか先ず聞きたいわ。
0476デフォルトの名無しさん2016/01/18(月) 22:43:18.95ID:TR/YNlok
ありがとうございました。
0477デフォルトの名無しさん2016/01/19(火) 01:24:48.90ID:NnBd5aRZ
int m=−1;
main()
{
  func(3);
  func(2);
  printf(”%d¥n”,func(1));
}
int func(int a)
{
  if(a > m) m=a;
  return(m);
}

このときなぜmainの外に値がかえるのですか?
0478デフォルトの名無しさん2016/01/19(火) 01:35:33.28ID:kkfqYwuP
ここに書き込むためだと思うけど
色々とおかしくなってる所があって質問の意図が掴みにくい

まず>>1に書いてある実行環境で走らせてみてその結果を貼ってくれると嬉しい
http://codepad.org/
http://ideone.com/
0479デフォルトの名無しさん2016/01/19(火) 02:04:07.95ID:NnBd5aRZ
m=3

です
0480デフォルトの名無しさん2016/01/19(火) 03:00:42.81ID:NUykG/ue
http://ideone.com/e82xp6
こんな感じのを想定してみるけど
うーんすまんがイマイチ意図が読めん

とりあえずグローバル変数はどこの誰が触っても良い共有物なので
m=aの時点で値は変わってるしそれをmain()はちゃんと受け取ってるよ
もうちょい疑問点を出してみてくれ
0481デフォルトの名無しさん2016/01/19(火) 03:30:00.15ID:NnBd5aRZ
>>480
グローバル変数の値の変わり方
みたいなのが知りたかったので助かりました
0482デフォルトの名無しさん2016/01/19(火) 18:22:04.71ID:DwRras8D
整数を受け取って2からその数までの偶数の和を戻す関数
1以下または301以上の場合には0を戻すようにする
みたいなプログラムどうやったら組めますか
0483デフォルトの名無しさん2016/01/19(火) 18:43:59.03ID:eYkN5B6n
>>482
一般的にはif文とfor文の組合せで実現出来るものだと思う

それともそういった構文を使わずに、ということなのかな
0484デフォルトの名無しさん2016/01/19(火) 18:46:42.09ID:MH15YYPt
>>482
http://codepad.org/7e0f66gt
0485デフォルトの名無しさん2016/01/19(火) 21:24:24.21ID:20zNHCnh
>>482
宿題スレへ
0486デフォルトの名無しさん2016/01/19(火) 21:35:06.89ID:zhXlS8A2
配列に答えを予め格納しておいて配列のインデックスと与えられる整数とを結びつける
return ans[seisu];
で一発や
0487デフォルトの名無しさん2016/01/19(火) 22:03:16.08ID:dkAc/DrU
>>486
その「答え」を求める問題やろ
0488デフォルトの名無しさん2016/01/19(火) 22:10:15.26ID:dkAc/DrU
>>482
指定する数をint nとすれば
(1+n/2)*n/2
とかそんな感じで一発じゃね?
0489デフォルトの名無しさん2016/01/20(水) 17:03:54.37ID:UTQHsO+H
>>482 「2から指定された値までの偶数の和」という問題は
1. 足し算のループで答えを求める
2. 等差数列の和の公式を適用 (ループがなくなり計算一発)
3. 予め計算して表にしておく (計算もなくなり表引きだけ)
てな具合にアルゴリズムの洗練をたどれる良い問題だね。

それに加えてプログラミングの重要な心得も含んでいる。
0. 関数が正常に動作するべき値の範囲に注意をはらうべし
 (異常な入力値をチェックせよ)


質問の答えじゃなくて感想だけど。
0490デフォルトの名無しさん2016/01/21(木) 21:18:39.30ID:mV6gE67O
今度からC言語使わされることになったんですが、
バグが出やすい箇所みたいなの教えてください。

今学んでるんですが、何これ、そんなにバグ作りこみたいの?
って仕様ばっかで困ってます。
0491デフォルトの名無しさん2016/01/21(木) 21:25:33.12ID:rCIbkvUQ
アセンブラレベルの自由度を高級言語で再現した結果。
0492デフォルトの名無しさん2016/01/21(木) 22:43:31.48ID:aXQag5k7
>>490
で、何を教えて欲しいの?
0493デフォルトの名無しさん2016/01/21(木) 23:25:19.95ID:4xSfWFv3
ttp://sim.okawa-denshi.jp/teikokeisan.htm
こちらのサイトの一番上の抵抗分圧の抵抗の組み合わせを抽出するプログラム
をC言語で作りたいのですが、いまいちどういう風に作ったらいいか
わかりません。
このプログラムは与えられたV1とV2からV2に近くなるR1とR2の組み合わせ抽出するというプログラムです。
抵抗分圧の公式はV2=V1*R2/(R1+R2)です。
E24系列というのはRの基本値で、1, 1.2, 1.3・・という決まった値でそれの10倍値や100倍値も存在し、
MAXだと100万倍ぐらいまであります。(1MΩ10MΩ)
R1とR2の全組み合わから一度Voutを計算して、V2と一番近くなる組み合わせをだそう
かと思ったのですが、Rの組み合わせが膨大で現実的ではありません。
なにかいい方法はないでしょうか?
0494デフォルトの名無しさん2016/01/22(金) 00:05:58.23ID:Fkb5gpUk
規格の事はよく分からなけれど
理論抵抗比とやらからある程度組合せを選別出来ない?

理論比がR1:R2=3:1としたらR2=1.0(固定)に対してR1=3.0が最も近いのでV2を計算
そしたら次はR2=1.1に対してR1=3.3、R2=1.2に対してR1=3.6と双方左にずれてく

こうやって同じ間隔を空けて組合せを作っていけば保険に前後の値を入れたとしても
精々300通り位で済むんじゃないかな
0495デフォルトの名無しさん2016/01/22(金) 00:08:24.15ID:LSwKLHy0
>>493
おもしろそうだと思うんだけど
C言語入門スレで聞くよりも、
宿題すれか、プログラミングのお題スレで
出題として出してみると良いかも
0496デフォルトの名無しさん2016/01/22(金) 00:23:42.54ID:nDBVl/8L
>>490
例えばどの仕様をバグを作り込みたい仕様だと思うの?
0497デフォルトの名無しさん2016/01/22(金) 00:56:14.38ID:iy9dE6+2
>>493
お題すれで聞いてみますね。
0498デフォルトの名無しさん2016/01/22(金) 01:27:11.48ID:G5rv7JJ3
>>493
V2=V1*R2/(R1+R2)
を式変形すると
V1/V2-1=R1/R2
になるから、
1 <= (V1/V2-1)*10^n < 10
となるようにnを選んで、
E24系列を仮定するなら自明な重複を除いて全部で133通りある数値から(V1/V2)*10^nを引いて絶対値を取って、
結果得られる値が小さい順に並べれば良いと思われ。
0499デフォルトの名無しさん2016/01/22(金) 02:08:19.69ID:SkuvTEjs
>>496
勝手に暗黙的型変換とか
ifの評価は論理値でなく式にも適用されるとか
色々あると思いますが。

これはコンパイル通らないよね?と思っているのがバンバン通ります。

認識せずコーディングルールだけを盲目的に信じてると潜んでる問題とか分からんので。
0500デフォルトの名無しさん2016/01/22(金) 03:17:34.54ID:nDBVl/8L
>>499
ifの評価が式にも適用されてる?勘違いしてるね
Cは式や関数も値を持つって事を意識するだけでいい
暗黙の型変換はコンパイラ次第で防げる
0501デフォルトの名無しさん2016/01/22(金) 07:59:14.62ID:raZVxvb6
色々で上げた二つの言いたいことはたぶん大抵の手続き型言語に当てはまると思うんだが
Haskellとかから来た人なの?
0502デフォルトの名無しさん2016/01/22(金) 08:05:21.33ID:zQ4mPetq
bool型を別に用意せずintで済ませることで言語仕様を小さく抑えることには有効だったかも知れんが、
今となっては厄介な遺産だな。
0503デフォルトの名無しさん2016/01/22(金) 08:29:23.99ID:sYC1tQRV
>>500
ありがとうございます。
>>501
javaからきました。

boolとかもそうですよね。
関数しかないとか、全部関数把握しなきゃいけない。。
コピペしまくることになりそう。
0504デフォルトの名無しさん2016/01/22(金) 08:37:05.82ID:NsaQTY0q
なんでも出来るけど、なんでも自分でやらなきゃいけないのがC言語。
0505デフォルトの名無しさん2016/01/22(金) 11:29:56.02ID:tiw7VxmH
>>503
ぶっちゃけ 今さらCをやるとなると
プログラマ1年生に戻った気で何もかもやり直しに近いよ

仕事とかでやらなきゃいけないなら
機械語を学んでからCに戻るのが結局近道だよ
0506デフォルトの名無しさん2016/01/22(金) 11:50:02.90ID:QVNa2tJM
JavaからならC++でいいじゃん
大して変わらんでしょ
0507デフォルトの名無しさん2016/01/22(金) 14:19:59.78ID:tiw7VxmH
あの、警察ですか?
ちょっとスタックに置いといた荷物が
何者かに中身をすり替えられちゃったんですけど

ちょっと〜、何よさっき買った紙コップ
全部ゴミが入ってるじゃないの
ハァ、自分で洗って使え? アタマおかしいんじゃないの?
0508デフォルトの名無しさん2016/01/22(金) 14:32:16.34ID:QVNa2tJM
昔からバカとハサミは使いようと言ってな
0509デフォルトの名無しさん2016/01/22(金) 16:43:02.27ID:JjkkXr1A
> ifの評価は論理値でなく式にも適用されるとか

これどういう意味?
そもそも論理値なんて概念はCには無いし
単に整数で比較してるだけだろうに

ifの…評価が…式に適用される??
0510デフォルトの名無しさん2016/01/22(金) 16:50:07.52ID:dviPRblt
>>509
エスパーすると単に式であればエラーならないことを言っているんだろう
0511デフォルトの名無しさん2016/01/22(金) 17:01:31.13ID:3zzK2PtE
憶測
if (a = 1) を文法エラーにして
if (a == 1) と強要したという話だろう
0512デフォルトの名無しさん2016/01/22(金) 17:17:22.35ID:rH3H4J7v
そういや
if (1 == a) が推奨みたいな話もあったな
0513デフォルトの名無しさん2016/01/22(金) 17:17:38.35ID:Nk1dYniH
javaでも「式にも適用される」わけだがw
単に論理値が存在しない問題を何か勘違いして
式がどうのと言っちゃってる可能性大だな
boolean b = false;
if (b = true) System.out.println("ok");
0514デフォルトの名無しさん2016/01/22(金) 17:24:05.70ID:3zzK2PtE
× if (a == 1) と強要したという話だろう
○ if (a == 1) と強要したいという話だろう

>>513
Java vs C の間は、その部分に関して同じだよね
0515デフォルトの名無しさん2016/01/22(金) 18:48:47.64ID:sYC1tQRV
すみません。
それはjavaじゃなくてc#でした。

まぁ勉強して仕様大体把握できました。
mainが下に来るのは慣れないっす。
あと、ヘッダにextern書いてボディにも本体書くとか何の意味あるのかとかいまいち分かってません。
0516デフォルトの名無しさん2016/01/22(金) 19:12:27.04ID:papJD+Lz
>>515
ならmain上に書けばいいだろ
0517デフォルトの名無しさん2016/01/22(金) 19:24:28.02ID:sYC1tQRV
使う関数とか先に宣言してないと駄目じゃない
0518デフォルトの名無しさん2016/01/22(金) 19:32:07.01ID:0g5nn+BU
見た目が気に入らないならヘッダに追い出せば良いじゃない
0519デフォルトの名無しさん2016/01/22(金) 20:03:36.84ID:papJD+Lz
プロトタイプあるだろ
0520デフォルトの名無しさん2016/01/22(金) 20:06:43.86ID:0StJWjHm
ヘッダファイルでexternつきのプロトタイプ宣言をして、
関数の実体のソースファイルでもそのヘッダをインクルードする目的は
ヘッダでのプロトタイプ宣言と実体の定義内容とが一致してることを
コンパイル時にコンパイラにチェックしてもらうためだよ。

やらなくてもコンパイルはできるしプログラムは動作するけど、
やっといた方が間違いを見つけやすいので好ましい。

Javaだとリンク段階でチェックされるのかな?
0521デフォルトの名無しさん2016/01/22(金) 22:27:45.45ID:jTMGJc5I
>>499
> これはコンパイル通らないよね?と思っているのがバンバン通ります。
>>515
> それはjavaじゃなくてc#でした。

ふぁっ??

bool b = false;
if (b = true) System.Console.WriteLine(
0522デフォルトの名無しさん2016/01/22(金) 22:29:02.87ID:GDAtUH1+
>>520
GCCでLTOを有効にするとリンク時にもチェックしてくれる。他の処理系はシラネ。
0523デフォルトの名無しさん2016/01/22(金) 22:29:08.20ID:kXJvYH2o
途中で切れた

);

C#でもコンパイルはバンバン通るわけだが?w
ただwarningが出るだけであってw
0524デフォルトの名無しさん2016/01/23(土) 01:33:26.87ID:VoXQl1Qa
Cでも代入がifに入ってると警告出せる
gccとかだとオプションが必要だけど、aliasなりで常につけるようにした方がいい
コンパイラの型警告はかなりしつこくなるけど、全部直した方が安全
0525デフォルトの名無しさん2016/01/23(土) 08:06:39.60ID:hXc+Q7TL
K&R読んでたけど、"端から落ちる"って表現がよくわからん。
0526デフォルトの名無しさん2016/01/23(土) 10:10:12.38ID:Tt4ej2Ee
>>525
どういう文章?
K&Rなんてもう20年くらい見てないから覚えとらんわw
0527デフォルトの名無しさん2016/01/23(土) 10:45:48.36ID:xqToPitJ
javaはソース本体がCでいうヘッダーファイルとしても使えるようになってるのでは
0528デフォルトの名無しさん2016/01/23(土) 11:42:45.80ID:4pLQQZj1
この端渡るべからず
0529デフォルトの名無しさん2016/01/23(土) 11:45:49.30ID:wu3iaE45
すいません アドレス演算子について教えてください

int a;
printf("%p\n" , a) ;
printf("%p\n" , &a) ;

とした場合、どちらもaのアドレスを表示すると思っていたのですが
違いました

&があるのとないのではどう意味が違うんでしょうか?
0530デフォルトの名無しさん2016/01/23(土) 11:51:56.03ID:BpJ08GBs
>>529
そもそもprintfは値として渡された物を書式に従って出力する関数。

aだとaに代入されている値が関数に渡されて、
&aだとaのアドレスが値として関数に渡される。

あるいはもっと切実な話をすると、
aがchar**型だとしたら、aと&aと*aは全部ポインタになるけど
その値は一般的には違う物になるよね。
それを意味論的に分けて考えて表示したい時に、%pが勝手に引数の解釈を変えたら困る。
0531デフォルトの名無しさん2016/01/23(土) 13:00:38.15ID:A3hLtNYo
printfで%pを指定したからと言ってアドレスが表示されるわけではない
渡された値をアドレスとして表示してくれるだけ

例のaだけのほうだと、aに入った値をアドレスとして表示しようとする
0532デフォルトの名無しさん2016/01/23(土) 14:00:40.07ID:Lok9lOLd
>>529
単にこういうことな
char c = 'a';int i = c;long l = c;
printf("%c %c %c\n", c, i, l);
printf("%d %d %d\n", c, i, l);
printf("%p %p %p\n", c, i, l);
これ実行すると
a a a
97 97 97
0x61 0x61 0x61
%pは「アドレスを表示」じゃなくて「単に16進で表示」の方が近い
0533デフォルトの名無しさん2016/01/23(土) 15:41:29.24ID:wu3iaE45
>>530
>>531
>>532

ありがとうございます %p で出力するとアドレスだ出力されるものだと思っていました
0534デフォルトの名無しさん2016/01/23(土) 16:00:18.93ID:TP8lOr4+
やべえw
%pとかあるのか、いままでずっと0x%xって書いてたわw
0535デフォルトの名無しさん2016/01/23(土) 16:08:11.20ID:WP4XiwuV
>>531-534
%p は16進表示じゃなくてポインタの表示であって、引数に void* 以外渡すと
未定義動作になるから気をつけて使うように。

>>529 で &a を表示してる例も、キャストを入れて (void*)&a とするのが望ましい。
入れなくても動く環境がほとんどだけどね。
0536デフォルトの名無しさん2016/01/23(土) 16:16:25.56ID:0uWz0x3q
> 入れなくても動く環境がほとんどだけどね。

入れないと動かない環境一つ以上詳しく。
0537デフォルトの名無しさん2016/01/23(土) 16:33:44.22ID:WP4XiwuV
>>536
http://www.kouno.jp/home/c_faq/c5.html#17
> 古いHP 3000シリーズはバイトアドレスとワードアドレスで異なる
> アドレス指定の方法を使っていた。だから同じアドレスを指していても、
> voidとcharのポインターは、intの(構造体なども)ポインターと違った
> 内部表現を持っていた。
0538デフォルトの名無しさん2016/01/23(土) 16:36:21.47ID:iFLpPtX0
その古いHP 3000シリーズとやらが
(void*)&a
しないと動かないというソースよろしく
0539デフォルトの名無しさん2016/01/23(土) 16:36:22.73ID:x7wsLJ4u
DOSアプリとしてコンパイルするとメモリモデルによって自動で表示変えてくれたりするのかな? > %p
0540デフォルトの名無しさん2016/01/23(土) 16:38:17.55ID:vCzR1C5c
DOSアプリって何?
0541デフォルトの名無しさん2016/01/23(土) 16:40:56.91ID:TP8lOr4+
>>535
16進でアドレスを表示させたいわけじゃなくて、
ポインタとして意味のある値を表示して欲しいって意味でキャスト無しで%p使うのもダメ?
0542デフォルトの名無しさん2016/01/23(土) 16:41:15.39ID:WP4XiwuV
>>538
え?
%p は渡された値を void* として操作するんだから、内部表現の違う int* を渡してたら
正常に動作しないのは当然じゃないの?動くように実装するのは不可能だと思うんだけど。
printf() 実装の中じゃ実引数の型なんかわからないんだし。
0543デフォルトの名無しさん2016/01/23(土) 16:44:38.35ID:ZB4QwEVs
>>542
お前がどう思うかを聞いているんじゃない
動かない、の証拠を見せてくれと言っている

> キャストを入れて (void*)&a とするのが望ましい。

これでもいいぞ
これが望ましいとする文献を一つでもひいてこれたら
俺はお前にありがとう勉強になったと言う
0544デフォルトの名無しさん2016/01/23(土) 16:45:03.96ID:WP4XiwuV
>>541
厳密には未定義動作。未定義動作だから期待通り動くこともあるし、実際そうなる環境が多い。
>537 のリンク先にあるような稀な環境まで含めて移植性を最大限にすることに価値が無いコードだと
言い切れるならダメということもないと思う。
0545デフォルトの名無しさん2016/01/23(土) 16:49:43.47ID:WP4XiwuV
>>543
動かないの証拠は無いかなぁ。 >537 のリンク先にあるような環境も手元に無いし。

文献でいいなら JIS C でどう?
7.19.6.1 fprintf 関数
http://kikakurui.com/x3/X3010-2003-01.html#206
> p
> 実引数は,void へのポインタでなければならない。 ...
...
> ... 実引数の型が対応する変換指定に対して正しくない場合,その動作は,未定義とする。
0546デフォルトの名無しさん2016/01/23(土) 16:51:10.11ID:TP8lOr4+
>>544
(void *)以外のポインタを渡したときの動作が厳密には未定義なの?
その渡したポインタ依存の表示になるのではないの?
0547デフォルトの名無しさん2016/01/23(土) 16:51:53.95ID:TP8lOr4+
>>545
おお。ごめん理解した。
0548デフォルトの名無しさん2016/01/23(土) 16:53:25.62ID:RFw3K97v
> 動かないの証拠は無いかなぁ。 >537 のリンク先にあるような環境も手元に無いし。

おk、もういいよ
証拠もなければ経験も無いのに言ったわけだね
その返答で十分
0549デフォルトの名無しさん2016/01/23(土) 17:26:23.05ID:ACxJywqs
まだポインターの概念も理解していない人間がのさばっているのか
0550デフォルトの名無しさん2016/01/23(土) 18:38:29.82ID:A3hLtNYo
537みたいな環境のコンパイラだとint*をvoid*にキャストしたときに値を変換するコードを吐くってことなのかな
そんな環境があることも%pの仕様がvoid*のみだということも知らんかったわ
0551デフォルトの名無しさん2016/01/23(土) 18:49:57.20ID:jjYbvGIM
また河野さんか。。。
0552デフォルトの名無しさん2016/01/23(土) 19:07:09.54ID:S7jNr+aw
バカなの?
規格に〜〜しなければいけないと書いてあるのに、そうしなければ動かない証拠だせとか。
0553デフォルトの名無しさん2016/01/23(土) 19:19:20.49ID:BpJ08GBs
>>546
その渡したポインタ依存の表示になる「かもしれない」。
なるからなないかは実装や環境に依存する。
0554デフォルトの名無しさん2016/01/23(土) 19:39:16.75ID:F2GISj/i
まだ未定義動作の概念も理解していない人間がのさばっているのか
0555デフォルトの名無しさん2016/01/23(土) 19:59:22.37ID:S7jNr+aw
sizeof(int*) == sizeof(void *)は要求されてないから、引数として渡されるデータが足りないかも知れない
sizeof(int*) < sizeof(void*)はワードマシンならばあり得る実装だね

ID:RFw3K97vは理解できましたか?
0556デフォルトの名無しさん2016/01/23(土) 20:06:39.55ID:BpJ08GBs
>>554
>>545が言ってる「未定義動作」は
7.19.6.1.9:
If a conversion specification is invalid, the behavior is undefined. If any argument is
not the correct type for the corresponding conversion specification, the behavior is
undefined.
だからundefinedって意味。

そんでもってundefinedの方の未定義動作は、
実行時に予測不可能な値を返しても良いし、コンパイルできなくても良い事になってる。
0557デフォルトの名無しさん2016/01/23(土) 20:51:05.74ID:BlQsRwma
printf() の書式指定 %p に関してだけど
対象を (void*) でキャストするべきだってことの理由は
>>542 が十分に説得的だと思うがね。

動かない証拠を示せ(動かない環境の実例を挙げろ)って
要求はそもそも筋が違うんじゃないかと。
もちろん、筋違いだいうことを証明しろと言われても無理だが。
0558デフォルトの名無しさん2016/01/23(土) 21:08:46.46ID:WP4XiwuV
>>556
「>>545が言ってる「未定義動作」は」も「undefinedの方の未定義動作は」も、同じだよね?
undefined behavior = 未定義動作で、意味はそれしか無いと思ってるんだけど、どういうこと?
0559デフォルトの名無しさん2016/01/24(日) 04:56:33.25ID:f7pzKq0s
柴田望洋とかいう人の明解C言語実践編とか読んでるけど切れそう。

結論がどこに書かれてるのか分からないから、見出しから全部読まされる。
0560デフォルトの名無しさん2016/01/24(日) 09:49:52.46ID:YuSBWhfF
アセンブラやってりゃ内部でどんな処理してるか予想するぐらいは容易なんだがなぁ。
0561デフォルトの名無しさん2016/01/24(日) 12:07:54.26ID:QohUoDbS
C言語とかオワコン
今時ネットワークもデータベースもGUIも扱わない言語とか意味ない
組込みで使われているとかいったってメーカーは未来がないの明らかだし
オシロスコープとか半田ごてとか使ったデバッグなんか電子工学専門のやつがやった方がいい
教育関係者が時代の流れに付いていけてないからいつまでもC言語なんていう化石言語にしがみついてるけど
教育関係者の既得権益のためだけに存在しているだけのゴミ言語
0562デフォルトの名無しさん2016/01/24(日) 12:21:04.02ID:4ZCEMBL4
http://builder.japan.zdnet.com/script/sp_c-programming-language/20370255/
0563デフォルトの名無しさん2016/01/24(日) 12:36:00.08ID:aa7cqZRy
>>561
お前がしがみついてるLLもCかC++で記述されてるわけだが。
バカな愚民はそれが上位者から与えられたものだと理解できない。
0564デフォルトの名無しさん2016/01/24(日) 12:38:54.71ID:U2BkwJ1U
C言語は実用一辺倒の
0565デフォルトの名無しさん2016/01/24(日) 12:42:22.16ID:U2BkwJ1U
C言語は実用一辺倒の言語だから抽象的な概念を扱うのは苦手
教育分野ならLisp系のScalaとかふさわしい言語はいくらでもある
0566デフォルトの名無しさん2016/01/24(日) 12:48:42.17ID:4ZCEMBL4
scala よりも clojure のほうが
0567デフォルトの名無しさん2016/01/24(日) 12:50:33.40ID:EtsnNE6e
SchemeやHaskellならわかるけど何故にScalaを挙げた?
マルチパラダイムではあるけどLispというよりはむしろJavaの方が近いだろ
0568デフォルトの名無しさん2016/01/24(日) 13:24:55.26ID:I3hxJf04
教育用ということでStandardMLを大学の授業でやってたけど興味が持てなかったわ
0569デフォルトの名無しさん2016/01/24(日) 16:09:16.89ID:6rvYTtSN
ウェブブラウザほど、ぶざまなソフトウェアは無い。あんなソフトウェアを人前にだすなといいたい。
もっとキビキビうごくべきだ。ウェブブラウザがつかってるJavaScriptこそ愚劣。愚鈍の元凶だ
0570デフォルトの名無しさん2016/01/25(月) 20:35:56.38ID:zf+nEsaX
IE<ゴメンネ
05715712016/01/25(月) 21:25:15.10ID:5o1dXGqO
C言語初級者です。2つのソースコードについて質問があります。
『C言語 ポインタ完全制覇』をWin上のVirtualBox+Linuxで
勉強しています。
ソースは以下です。
http://ideone.com/o2lB7o
http://ideone.com/sHvkH9

1つ目は可変長引数の関数を作りました。
Segmentation Faultとなります。

2つ目はクイックソートのプログラムです。
こちらもSegmentation Faultとなります。
2つ目のプログラムではint型の配列から
char型の配列への変換の仕方もわかっていません。

どなたかご教授お願いします。
0572デフォルトの名無しさん2016/01/25(月) 21:34:12.68ID:MTh5r7jR
>>571
1つ目:!=を=!って書いてる
2つ目:right_index--とするべきところで++してる
05735712016/01/25(月) 22:01:44.56ID:5o1dXGqO
>>572
お返事ありがとうございます。すぐ理解されるなんて
上級者のかたなのですね。

1つ目は上手くいきました。ありがとうございました。

2つ目は572さんの言うところが間違っていたので
書き換えたのですが、まだsegmentation faultとしか
でません。

よろしくおねがいします
0574デフォルトの名無しさん2016/01/25(月) 22:16:42.89ID:rVrFKv/m
1か所しか書き換えなかったんじゃないの
++してるとこ2か所あるでしょ
あとprintfしてるのがローカル変数のアドレスになってるけど見たいのは中身でしょ
http://ideone.com/bFJWLb
0575デフォルトの名無しさん2016/01/25(月) 22:59:52.22ID:MTh5r7jR
物凄くどうでもいいけど
(left+right)/2
よりは
left+(right-left)/2
と書くべきだよね。

これによる影響が出るのが普通じゃないケースだから本当にどうでもいいんだけど。
0576デフォルトの名無しさん2016/01/25(月) 23:36:59.55ID:xvjEE6gT
>>575
その違いって、何?
0577デフォルトの名無しさん2016/01/25(月) 23:49:02.61ID:MTh5r7jR
>>576
ただの足し算だとキャリーオーバーフローする可能性がある。
その結果を2で割るとleftやrightより小さな値が得られる。

後者ではその可能性は排除される。
05785712016/01/25(月) 23:55:08.32ID:5o1dXGqO
>>574さん
ありがとうございました。
全て問題は解決しました。

初心者なのでまた質問させていただくと思います
よろしくおねがいします。
0579デフォルトの名無しさん2016/01/26(火) 00:03:34.55ID:DpSNwlQs
なるほど。そういうことですね。

思ったんですが、そういう桁あふれの可能性は
コンパイラがうまく処理してくれるようにはならないんでしょうか?
そういうのは、仕様とにらめっこしているプログラマの役割なんですかね?
0580デフォルトの名無しさん2016/01/26(火) 02:05:23.41ID:U8DjCw8X
C言語では符号付き整数のオーバーフローは未定義
未定義動作はコンパイラが都合がいいように解釈して、場合によっては素敵なバイナリを作ってくれる
ttp://cpplover.blogspot.jp/2014/06/old-new-thing.html
0581デフォルトの名無しさん2016/01/26(火) 04:29:12.69ID:en75rJef
ひょえぇ1関数2000行あるぅ、、
0582デフォルトの名無しさん2016/01/26(火) 10:20:39.55ID:8FYVyjVA
ふえぇgotoだらけぇ
0583デフォルトの名無しさん2016/01/26(火) 17:25:27.08ID:eKv0VZf+
マクロ駆使して別言語化してるし…
0584デフォルトの名無しさん2016/01/27(水) 14:07:39.32ID:Pto6ddp0
すみません。また質問です。2つのソースコードについて質問があります。
『C言語 ポインタ完全制覇』をWin上のVirtualBox+Linuxで
勉強しています。
ソースは以下です。

http://ideone.com/0eMgIK
http://ideone.com/Hc67Hc

1つ目はコンパイルできますが、英文ファイルを引数に
しても何も動作しません。

2つ目はとても基本的なことでしょうが、理解できてません。;;

ご教授よろしくお願いします。
0585デフォルトの名無しさん2016/01/27(水) 14:23:17.95ID:YnVB9WDG
>584
一つ目は標準入出力から得たデータをbuf配列へ入れていくプログラム。
実行後、キボードから適当に入力してCLTR+Zを入力してみてください。


2つ目は
bb=int_to_str(a);
でエラー出てる。

char bb[20];
を
char *bb;
とするか

bb=int_to_str(a);
を
strcpy(bb,int_to_str(a));
とする。
0586デフォルトの名無しさん2016/01/29(金) 00:31:39.68ID:A8Omu85i
質問ッス!
(1) シフト演算子(「>>」や「<<」)は、右辺が0でもいいんでしたっけ;
(2) C標準ライブラリのmemcpy()やmemmove()は、第3引数が(size_t)0でもいいんでしたっけ;;
0587デフォルトの名無しさん2016/01/29(金) 07:48:10.41ID:HI9V2WVT
(1) OK : 0 ビットシフト = ビットシフトしない と評価される
0588デフォルトの名無しさん2016/01/29(金) 08:30:27.04ID:iWXq7w4x
っけ;;
0除算はいいんですか?
0589デフォルトの名無しさん2016/01/29(金) 09:04:35.48ID:uNLw2+tE
>>588
未定義
0590デフォルトの名無しさん2016/01/29(金) 11:43:57.01ID:/5mJkDc7
(2)も問題ない
0591デフォルトの名無しさん2016/01/29(金) 11:58:13.04ID:HI9V2WVT
右シフトを除算と等価とみなしてる?
nビット右シフト <-> 2のn乗で割る

2の0乗は1だから定義可能な算術だ
0592デフォルトの名無しさん2016/01/29(金) 12:13:53.55ID:x/sxD8ME
右シフトが論理右シフトになるか算術右シフトになるかって未規定だっけ?
どうだっけ。
0593デフォルトの名無しさん2016/01/29(金) 12:15:34.69ID:HI9V2WVT
算術シフトか論理シフトかは、、、処理系依存だっけ、、、か?
0594デフォルトの名無しさん2016/01/29(金) 12:22:51.29ID:x/sxD8ME
処理系依存だった。
6.5.7.5:
The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type
or if E1 has a signed type and a nonnegative value, the value of the result is the integral
part of the quotient of E1 / 2 E2 . If E1 has a signed type and a negative value, the
resulting value is implementation-defined.
要約:符号付き型で負の数の場合、右シフトの結果は処理系依存だよ!
0595デフォルトの名無しさん2016/01/29(金) 21:16:45.63ID:WT7mu4Na
ファイルを開いて何行あるか調べるためにEOFまで読んで
SEEK_SETで最初に戻してランダムに行の文字列を取ってくるようにしたのですが
私のPCでは問題無く動くんですが、EOFまで読んだファイルって
EOFになった情報がセットされるとかどっかで見ました
これって他のPCだと変な動作になる可能性ありますか?
0596デフォルトの名無しさん2016/01/29(金) 22:57:18.71ID:Hpd/92hj
>>594
mjd!!?

算術シフトが無いCPUでもsigned intの演算速度を落とさせないための配慮なんだろうか、、、
0597デフォルトの名無しさん2016/01/29(金) 23:58:28.04ID:wSlTo5Cq
C言語作ったやつが適当だったからだろ
0598デフォルトの名無しさん2016/01/30(土) 00:19:44.01ID:ilOv8EKS
charに符号がついてるかどうかも不明だったっけ
0599デフォルトの名無しさん2016/01/30(土) 00:42:27.57ID:HpDJFp9+
>>598
確かにcharがsignedかunsignedかは処理系依存
ただし、表示可能な文字は正、とだけは決まってゐる
ハズ
0600デフォルトの名無しさん2016/01/30(土) 02:27:08.09ID:xES4tsnw
unsigned 以外はシフト不可にしておけばよかったんや
0601デフォルトの名無しさん2016/01/30(土) 08:38:59.28ID:AurOqJPw
>>595
fseek() 関数の機能としてEOF状態の解除が含まれてるはず。

おかしな状態になったら「ライブラリがバグってやがる」と
文句を言えるくらいに大丈夫、だと思う。
0602デフォルトの名無しさん2016/01/30(土) 09:26:10.22ID:6qZO0/Pj
>>600
算術シフトとは
0603デフォルトの名無しさん2016/01/30(土) 17:39:19.09ID:ECbFIrJa
>>601
それを聞いて安心しました!
ありがとうございます
06045842016/01/30(土) 18:29:33.42ID:G92s9ZB+
>>585
レスありがとうございます。2つ目は上手くいきました。

ただ1つ目の方はまだうまくいきません。
実は本には、9行目はchar型ではなく、int型と書いてありました。
勝手にこれは、誤りだとおもってchar型に変えました。

http://ideone.com/0eMgIK

どなたかご指導お願いします
0605デフォルトの名無しさん2016/01/30(土) 18:34:17.83ID:eSJs9CE4
EOF と比較する場合 char で受けちゃだめで int じゃないと意図通りとまらない
0606デフォルトの名無しさん2016/01/30(土) 18:43:08.27ID:1awzzRNN
>>604
int 型のままでいい,ファイルの終わりと文字'0xff' との区別をつけるため http://codepad.org/c50zWkLt

標準入力をキーボードにとるのがうまくいかない場合は,
プログラムの実行ファイルを a.exe,適当な英文ファイルを test.txt とした場合,
a.exe < test.txt
と入力してみるといい
0607デフォルトの名無しさん2016/01/30(土) 18:49:48.14ID:nIpvaiJY
>>606
%Sじゃなくて%s
06085842016/01/30(土) 19:12:36.18ID:G92s9ZB+
みなさんレスありがとうございます

>>606
なぜか単語5個の英文で、それをやると、
<<<<<
と出力され、”数”が出力されません。
実行環境がWin+VW+Linuxなのがまずいのでしょうかね。
06096072016/01/30(土) 19:21:19.88ID:nIpvaiJY
安価ミスってた
>>604あて

>>608
printf("<%S>\n" , buf);じゃなくて
printf("<%s>\n" , buf);
書式が間違ってるから表示されない
0610デフォルトの名無しさん2016/01/30(土) 20:37:01.86ID:72muWdcr
C言語なんていうオワコン言語で文字列処理なんかやるからそうなる
06115842016/01/30(土) 20:42:23.97ID:G92s9ZB+
みなさんありがとうございました
上手くいきました! sとSの違いでした…;;
06125842016/01/30(土) 21:59:08.91ID:G92s9ZB+
>>610
敢えて低級言語勉強してますW
pythonがねらい目なのはわかってるつもりです。
0613デフォルトの名無しさん2016/01/30(土) 22:03:11.56ID:FCZ73JzI
pythonもCで書かれてますが
この事実は・・・
0614デフォルトの名無しさん2016/01/30(土) 22:07:01.98ID:XFryV8Mc
>>613
ドライバーも鉄鋼製品だから製鉄やるべきって理屈?
0615デフォルトの名無しさん2016/01/30(土) 22:21:58.32ID:FCZ73JzI
オワコンとかいってるのはなぜ
python一式ががpythonでかけるのけ
0616デフォルトの名無しさん2016/01/30(土) 22:24:26.51ID:6Po/ckh8
マクロでポリモーフィズム楽しいな。
0617デフォルトの名無しさん2016/01/30(土) 22:28:56.89ID:I8QYzQc6
昔「マイコン技術はオワコン」とか言って叩かれた奴がいたらしい。
0618デフォルトの名無しさん2016/01/30(土) 22:30:48.96ID:FCZ73JzI
やり始めの頃は自分の世界だけで判断するから、しょうがないかもね
そういう時期は誰でもあるから
0619デフォルトの名無しさん2016/01/30(土) 22:51:15.62ID:WPy6oV1/
pypyは一切C含んでないんだっけ?
C#とかはほとんどC#で書かれてるけど、一部Cを呼ぶんだよね
ソース追ってってexternに来ると面倒でしょうがない
0620デフォルトの名無しさん2016/01/30(土) 22:55:39.46ID:CogBGL7b
C#のほうがよりC言語使ってない。
PyPyのほうがC言語に近いだろ。
0621デフォルトの名無しさん2016/01/30(土) 23:11:34.52ID:1jV8LkZN
今回みたいに低レベル用と知って勉強するなら問題ないでしょ
問題はなんとなく王道言語だと思って来る人で
0622デフォルトの名無しさん2016/01/30(土) 23:56:20.96ID:72muWdcr
C言語使ってるからC言語学ぶべきとか
じゃあアセンブラ使ってるからアセンブラ学ぶべき
機械語使ってるから機械語使うべき
電子回路使ってるから電子回路使うべき
半田ごてつかってるから半田ごて使うべきになるのかよ
半田このやろう
0623デフォルトの名無しさん2016/01/31(日) 00:23:34.54ID:zJ6m2KtS
オワコンとかいってるから、おちょくられてるだけなのに
別に必要ないなら使わなくてもいいんだよ

C#くん 呼んじゃったし
0624デフォルトの名無しさん2016/01/31(日) 11:31:50.43ID:0VTupv6x
>>622
> 機械語使ってるから機械語使うべき
ここから意味不明になってるぞ
0625デフォルトの名無しさん2016/01/31(日) 13:23:49.81ID:OtXGSzkV
半田このやろう が言いたかっただけでしょ
0626デフォルトの名無しさん2016/01/31(日) 14:12:40.40ID:iwDB+Nos
最終的な振る舞いに影響するんだから
べきで言うのなら電子回路まで学ぶべきだな
電子回路を手で作りたいわけじゃないからはんだごては学ばんでもいい
0627デフォルトの名無しさん2016/01/31(日) 14:28:15.08ID:a4GTRLT5
単結晶の生成当たりから学ぼう
0628デフォルトの名無しさん2016/01/31(日) 14:42:25.63ID:m2D4t7R9
マジな話、デジタル回路は知っておいたほうがいい
デバイスドライバみたいなものを書くのが楽になるし
プログラムが普通にできる奴ならすぐ理解できる程度の難易度
アナログ的な特性とか、それより下位のレイヤーは、
プログラミングにはあんまり関係ないし、
難易度が一気にあがる
0629デフォルトの名無しさん2016/01/31(日) 14:50:34.96ID:9arms57E
>>627
Ga-As合金なんて無かったんや・・・・・・
0630デフォルトの名無しさん2016/01/31(日) 20:19:44.80ID:efxfc/YX
低レベルな部分にこだわってるから応用ソフトの分野で主導権が握られへんねや
C言語なんていうオワコン言語に今更時間とエネルギーを費やす価値はない
0631デフォルトの名無しさん2016/01/31(日) 20:29:35.57ID:zJ6m2KtS
どうして楽してできるようになったのか
知らないみたいだね
0632デフォルトの名無しさん2016/01/31(日) 20:30:03.12ID:1GkI/C5F
オワコン連呼してちょっかい出してくる奴の滑稽なこと
(貴方視点で)終わってるなら、そっとしといてくれや
0633デフォルトの名無しさん2016/01/31(日) 20:41:14.25ID:GpQ4uNr/
>630
君はなんでそんなに苦しがってるの?
そんな投稿で何かが変わるの?
ここで呻いてもどうしようもないよ。
何が原因なのか、どうなったら解決できるのか、そこを考えよう。
0634デフォルトの名無しさん2016/01/31(日) 21:08:46.51ID:qHH5NNfa
>>630
ならスレみなきゃいいのに
0635デフォルトの名無しさん2016/01/31(日) 22:18:14.90ID:iwDB+Nos
>>630
ぜひともそのレスをする時間とエネルギーに関しても費やす価値が無いことに気が付いてほしい
0636デフォルトの名無しさん2016/01/31(日) 22:44:33.90ID:8GI8e/FD
>>630
大脳だけでは生命維持できないが、脳幹が無事なら生命維持だけはできる。
0637デフォルトの名無しさん2016/01/31(日) 22:54:50.92ID:eL72H0FT
「低レベル」が何に聞こえるかは、PGの適性かもね
「歪み」を何と読むかで、理系頭か文系頭かがわかるように
0638デフォルトの名無しさん2016/02/01(月) 00:04:00.65ID:dRJvSEmL
第一応用ソフトの分野でどうやってアメリカと戦うんだよ
変に頑張って特定のソフトで日本国内オンリーでシェアが上がったらガラパゴス化するだろ
PC98とか一太郎とか
0639デフォルトの名無しさん2016/02/01(月) 00:27:29.46ID:Jui80FAm
この文脈で低レベルをハード寄り的な意味以外にとらえる人はいないだろう
0640デフォルトの名無しさん2016/02/01(月) 06:12:40.67ID:ZBzDFClp
この文脈での低レベルの意味を勘違いする
低レベルな人がいるんでないの?

すまん、上の文は言葉遊びだ。読み流してくれ。
0641デフォルトの名無しさん2016/02/01(月) 20:27:50.33ID:aq9Mx2ga
mallocで作ったメモリーは解放しなくてもプログラムが終われば解放されるけれど、プログラムが終わる前に開放したいときだけfreeを使うという理解であってますか?
0642デフォルトの名無しさん2016/02/01(月) 20:46:21.44ID:rMTqXsJZ
>>641
mallocで獲得した領域を開放したいときにfreeを使う。それ以上の意味はない
0643デフォルトの名無しさん2016/02/01(月) 21:06:15.74ID:gmWomOLn
プログラムが終われば必ず解放←OSが決めたルール
malloc したら必ず解放 ← プログラマが守るべきルール
0644デフォルトの名無しさん2016/02/01(月) 21:11:25.81ID:tIibSl+X
大筋では同意するけど、atexit まで面倒はみたくない
0645デフォルトの名無しさん2016/02/01(月) 21:13:05.58ID:L4FPlr7p
どうせOSが開放してくれるからとfreeしないでおいて
いろんな修正が入った後でfreeが必要になったけど入れ忘れてメモリリークしてて後から困れ
0646デフォルトの名無しさん2016/02/01(月) 22:37:46.45ID:6f/LcOay
Win98時代に1万回ぐらい連続でmallocやったら(1回1kバイト程度確保)mallocが失敗したのを見て
メモリ確保は出来るだけまとめてやって、使い終わったら必ず開放するのを心がけるようになった。
0647デフォルトの名無しさん2016/02/01(月) 23:20:57.92ID:dRJvSEmL
俺のメモリ管理なんて超適当だぜ
VirtualAllocで4メガぐらいガバっと確保して
allocが有るたびに前から順番に渡していくだけ
再利用はしないし、フリーリストの管理もない
4メガ使い切ったら新しく4メガ確保
4メガのメモリブロックがどこからも参照されなくなったらVirtualFree
歯抜けになっても再利用しないし開放も出来ないのでメモリ効率が悪い
その代わり確保も開放もめちゃくちゃ早い
allocはメモリブロック使用量変数をサイズ分増やすのと参照カウンタを上げるだけ
freeは参照カウンタを下げるだけ
Interlocked系関数を上手く使うことでマルチスレッドでも同期処理無しで動く
0648デフォルトの名無しさん2016/02/02(火) 09:01:12.29ID:E+FKouYL
mallocでいいじゃんと思うけど、windowsだとそういう自前mallocが有効なのかねえ
0649デフォルトの名無しさん2016/02/02(火) 12:54:02.26ID:WkrnCzmR
Windows 関係ない
バカがオレオレ malloc サイコー
ってドヤってるだけ
0650デフォルトの名無しさん2016/02/02(火) 17:23:23.85ID:rX0rX7Nf
そこまでやってるならいいほうでは
0651デフォルトの名無しさん2016/02/02(火) 17:36:01.74ID:Ip2iNyid
visual c++でC言語プログラミングしています。
ある時刻になればひっそりと実行して勝手に終了するプログラムをCで作りたい
んですが可能でしょうか?

具体的には15:00になったら
Cフォルダにあるnumber.txtに1という文字を追加していくプログラムです。
0652デフォルトの名無しさん2016/02/02(火) 17:41:55.68ID:7f7wf/mW
可能
0653デフォルトの名無しさん2016/02/02(火) 17:44:32.20ID:MWyXjmPG
タスクスケジューラ 使い方 でぐぐる先生に聞く
0654デフォルトの名無しさん2016/02/02(火) 20:23:56.83ID:2Sj5nBMP
・指定時刻になったらタスクを起動する
という部分はOSの機能 >>653 を使うのが楽だと思うけど

仮にいちいち自作すると
 ・UIの隠し方と終了方法をどうするのか
で余計な手間がかかる。日をまたぐならさらに
 ・OS再起動後も継続する
ってことでいいんかな。やっぱりいちいち作りたくないな
0655デフォルトの名無しさん2016/02/02(火) 21:41:26.58ID:ucpE/ELv
プログラムの起動直後にVsyncあたりのタイマ割込みを乗っ取って、
定期動作させたい部分にフック。
定期動作に不要な初期化なんかのメモリを解放して終了。

こんな感じだっけね。
0656デフォルトの名無しさん2016/02/02(火) 22:06:47.69ID:yOFSQOe0
>>651
そんなプログラム作ったとして何の役に立つとよ?
0657デフォルトの名無しさん2016/02/02(火) 22:19:25.76ID:7S2eAgvu
なんしよっとか、きさん。くらさるっぞ!
0658デフォルトの名無しさん2016/02/02(火) 22:55:07.53ID:+n78UQ/o
ほんなこつ
0659デフォルトの名無しさん2016/02/02(火) 23:36:40.20ID:7S2eAgvu
オワコンC言語技術者はオシロスコープと半田ごての使い方でも研究してろw
0660デフォルトの名無しさん2016/02/03(水) 00:40:12.39ID:ayAcYB0t
引きこもりはち○この弄り方でも研究してろ>659
0661デフォルトの名無しさん2016/02/03(水) 00:46:37.03ID:7nc06kA4
組み込み系でもやらされてるのかな オワコン先生は
0662デフォルトの名無しさん2016/02/03(水) 02:00:07.63ID:ZY8+tRrg
Cは仲間を呼んだ!
Rubyが現れた!Pythonが現れた!PHPが現れた!Perlが現れた!Javaが現れた!Awkが(ry
魔王オワコンは困惑している!
オシロスコープはにげだした!半田ごてはにげだした!
0663デフォルトの名無しさん2016/02/03(水) 07:24:42.47ID:FAarDA2D
>>643
バカ発見
0664デフォルトの名無しさん2016/02/03(水) 18:28:26.63ID:6g6gbrY0
>>654
すいません。
本当はキーロガーを作りたいんです。
クライアント管理ソフトみたいなの作りたくて
キーログってその基本じゃないですか?
タスクスケジューラだと時間指定だから
条件発動できないじゃないですか
どうすればいいですかね?
0665デフォルトの名無しさん2016/02/03(水) 19:08:39.32ID:ySPeAyr8
>>664
Cで作る作らないの前にOSのAPIだと思うけど
0666デフォルトの名無しさん2016/02/03(水) 19:55:26.21ID:5VKefHqD
>>664
ウィルス(マルウェア)になりうるからな…
0667片山博文MZ ◆T6xkBnTXz7B0 2016/02/03(水) 20:57:30.85ID:PDk33kNH
キーロガー作りたいなら匿名でやれ。管理の甘い海外サーバ経由でな。
半端な出来だと経歴に傷が付くぞ。
0668デフォルトの名無しさん2016/02/03(水) 21:13:10.96ID:ycDP2Q2/
>>664
> タスクスケジューラだと時間指定だから
> 条件発動できないじゃないですか
はあ?
テメーが
> ある時刻になればひっそりと実行して…
> 具体的には15:00になったら…
つったんだろうが
0669デフォルトの名無しさん2016/02/03(水) 21:41:12.92ID:u1wZgCbu
int main(void) {
  while(1) {
    if(ishour15()) {
      execute_keylogger();
    }
    sleep(1);
  }
}
0670デフォルトの名無しさん2016/02/04(木) 11:06:24.14ID:GZ4dZRgg
__VA_ARGS__って・・・の場所に書いたものがが__VA_ARGS_の場所に_置くだけの気がするんですけど、これの何が凄いんですか?
普通のマクロのaに書いたものがaに置くのと同じじゃないですか?
0671デフォルトの名無しさん2016/02/04(木) 11:19:47.94ID:xESoReV8
#define FOO1(a) printf(a)
FOO1("%d\n", 1)
とやると プリプロセッサの引数の数が不一致でエラーになる

#define FOO2(a) printf a
FOO2(("%d\n", 1))
と括弧込みで展開するのは一つの手だけど
 printf ("%d\n", 1)
   ~~~~~~~~~~~~~ ここが引数の部分
printf から fprintf  に変えつつ 出力先を stderr にってな場合にはどうしようもない
それが
#define FOO3(...) fprintf(stderr, __VA_ARGS__)
FOO3("%d\n", 1)
こう書けるようになっておいしい
0672デフォルトの名無しさん2016/02/04(木) 11:35:48.93ID:GZ4dZRgg
わかりました。
コンマが関係なくなるという意味があったんですね。
ありがとうございます。
0673デフォルトの名無しさん2016/02/04(木) 22:45:13.78ID:R19753iM
ほぼ、c#とvisual studioしか使わないゆとりですが、c言語って関数の引数とか変数の型とか分からないのでしょうか?
そういうエディタがありますか?

毎回調べてすぐ忘れてマジしんどいです。
0674デフォルトの名無しさん2016/02/04(木) 22:57:12.63ID:KJLuK0Ig
eclipse環境だとどうなんだろう
0675デフォルトの名無しさん2016/02/04(木) 23:38:13.73ID:+Y8C24ZP
>>673
VisualStudioが一番
他のIDEでもだいたい出せるし、エディタでも特に高機能なやつならプラグインがあったりする
0676デフォルトの名無しさん2016/02/05(金) 09:20:03.09ID:jtmJ9DAX
型だけじゃなく簡易でよいので仮引数名も出て欲しいのが qsort
1要素のサイズと要素数の順をすぐ忘れる
0677デフォルトの名無しさん2016/02/05(金) 17:25:23.00ID:Zl3yCQ2Q
マクロをつかって名前付き引数が使えるようになったみたいだけれどマクロではそいう言うのは使えないな。
0678デフォルトの名無しさん2016/02/05(金) 17:47:46.22ID:o3yfcjVc
ググる先生に教えてもらう
0679デフォルトの名無しさん2016/02/05(金) 18:26:23.00ID:ZPivzzR9
EclipseならF3でヘッダーの定義箇所にジャンプする機能があるが、
それじゃ駄目なのか?
0680デフォルトの名無しさん2016/02/05(金) 22:23:27.03ID:2THMBE2E
>>667
キーロガーとサーバーと
何の関係が有るんですか?
0681デフォルトの名無しさん2016/02/06(土) 15:07:33.66ID:D7PR4EVc
やりたいことに疑問を持たない?オレオレ路鳥師
0682デフォルトの名無しさん2016/02/06(土) 15:19:41.91ID:ZpLAymRq
>>680
すぐにデータが欲しいとか、ターゲット側に証拠を残したくない場合に
サーバで記録する
0683デフォルトの名無しさん2016/02/06(土) 17:37:29.90ID:Yx87UQ8j
>>681
路鳥師という言葉は初見なんだけど、
もしかして縦書き表示の2ちゃんねるビュア用の倍角強調表現かな。
0684デフォルトの名無しさん2016/02/06(土) 18:04:52.37ID:4STRQeN+
鷺,か
0685デフォルトの名無しさん2016/02/06(土) 18:05:10.48ID:qkAA7xMq
C言言五口
0686デフォルトの名無しさん2016/02/06(土) 22:07:21.64ID:CLV5WMIc
2つ質問よろしくお願います。環境はWin+VW+Linuxです

1つ目は配列の数値を表現するプログラムです
コンパイルして、実行して数値を打っても何も動きません
http://ideone.com/XEZ1eX

2つ目は標準入力としてファイルを読み、それを出力する
プログラムです。3つのソースで動きます。
こちらもコンパイルできたのですが、ファイルを引数に
実行しても動きません。
http://ideone.com/3MfVZt
http://ideone.com/QwE5qg
http://ideone.com/CgnTBA


よろしくお願いします。
0687デフォルトの名無しさん2016/02/06(土) 22:51:15.89ID:JenVg3C/
>>686
とりあえず一つ目はwhileをどうやったら抜けるのか分からない
入力無しでEnterしても改行は必ず入るよ
0688デフォルトの名無しさん2016/02/06(土) 23:11:17.26ID:G9N4zA90
Control-D でいいんじゃ?
0689デフォルトの名無しさん2016/02/07(日) 09:13:38.83ID:ihWrHU4l
いま

Javaとc言語 勉強してますが c++は
かなり違いますか??
0690デフォルトの名無しさん2016/02/07(日) 09:28:03.47ID:eIUfmNby
ふつうは、こうかんがえる
Javaは、オブジェクト指向だから、Javaでかいたら、C++にかきなおしやすい
Javaは、グローバル変数がないため、(#defineもない)さきにCでかいたら、Javaにかきなおすのは、たいへんかもしれない
0691デフォルトの名無しさん2016/02/07(日) 10:19:19.12ID:7OAFDS8O
CよりC++勉強したほうがいいって本当ですか?
順次・分岐・反復に関してはどのプログラミングも共通(gotoは除く)
なのでライブラリが分かりにくいC++のほうが頭使うからとの事です。
Cは標準ライブラリだけで単純すぎる気がします。
0692デフォルトの名無しさん2016/02/07(日) 10:26:40.95ID:HPtrUBPy
Cの概念が完全に理解できてからでもいいよ。
Cが理解できないとそもそもC++が理解できない。
ライブラリ使いながら学ぶタイプの人間ならC++からでも問題はないかも知れないが。
0693デフォルトの名無しさん2016/02/07(日) 10:59:31.20ID:jvYVRZ1r
JavaとCを並行でやるって悪い所取りの最悪手
0694デフォルトの名無しさん2016/02/07(日) 11:02:11.78ID:ADbKW/eV
cやってからJavaとc++やったほうがいい
0695デフォルトの名無しさん2016/02/07(日) 11:20:01.84ID:YehISXuU
>>691
> なのでライブラリが分かりにくいC++のほうが頭使うからとの事です。
認知症の予防にはいいんじゃね?
0696デフォルトの名無しさん2016/02/07(日) 12:14:33.18ID:pDArDbnY
c#でいいだろ。
c#のパクリ言語のjavaなんてやる必要ないし、
c++の構文引き継いでるc#の方がやりやすい。
0697デフォルトの名無しさん2016/02/07(日) 13:54:07.48ID:5D2B2THM
>>686
どちらのプログラムもstdin「標準入力」からデータを読んでいる。
標準入力は通常、キーボードからの入力を受け入れる。

キーボードから標準入力に入力する場合、
データの終わりは Ctrl + D (Ctrlキーを押しながらDキー、Shiftは不要) を押す。
これが >>688 の教えてくれたことの意味。
ちなみに Ctrl + D で入力終了はLinux(Unix)の場合。
DOSやWindowsだと Ctrl + Z (画面には ^Z と表示される)の後に Enter、
だったと思うがちょっと自信がない。


ここまでを踏まえて2番目の質問。
このプログラムはファイル内容を読むようには作られていない。
標準入力から読んで画面に、より正確にはstdout「標準出力」に出力する。
ファイルから読ませたい場合は、標準入力の切り替え(リダイレクト機能)を使う。
具体的には下行のような感じ。
$ prog < file.txt
< file.txt で「標準入力をキーボードでなく file.txt に切り替えろ」という意味。


ファイル名を指定して内容を表示するプログラム、つまり
$ prog file.txt
のような使い方をするプログラムを作る場合は

1. 最初に(ファイル名を指定して)ファイルを開く
2. ついでファイルを読む
3. 最後にファイルを閉じる

という手順になる。
とりあえず、こんな説明で分かるだろうか。
0698デフォルトの名無しさん2016/02/07(日) 18:35:20.16ID:EGgUv7/G
文字列操作関数strcpyについて
strcpy(a,b);
aは変化しますが
bはどうなるんですか?
0699デフォルトの名無しさん2016/02/07(日) 19:01:54.58ID:6NGyEHk4
>>698
constなので変わりません
0700デフォルトの名無しさん2016/02/07(日) 19:44:42.95ID:HPtrUBPy
strcpyの引数って逆のほうが直感的な気がするんだけど、俺だけかな。

strcpy("from", to);
0701デフォルトの名無しさん2016/02/07(日) 19:49:44.53ID:fu54F6yL
>>700
貴様が生まれてくる前から copy destination source の順に決まっている
0702デフォルトの名無しさん2016/02/07(日) 20:14:36.67ID:ZO1JcykC
上司命令でJava屋の私がCをやることになった。
先輩にデバッグしやすように#ifなどのプリプロセッサをガンガン使うように
指示された。
確かにデバッグはしやすくなったが、コードが読み辛くてたまらん。
使わないとおこられるし。
Cやってる人は、みなさん、#ifなどのプリプロセッサをガンガン使うのでしょうか?
0703デフォルトの名無しさん2016/02/07(日) 20:19:47.87ID:jvYVRZ1r
読みやすさを求めるならCなんか使うな

で終わる話

せいぜい気の利いたエディタを探して色付けをマシにするくらいかな
昔そのプロジェクト専用の grep を自作したのを思い出した(関数名や条件コンテキスト付随)
0704デフォルトの名無しさん2016/02/07(日) 20:36:38.57ID:pDArDbnY
使うなと言われても仕事ですし。
そもそもなんでその手のプロじゃない人材を平気で投入するんだろう。
あんま詳しくないから勉強期間くれと言っても、速攻でぶちこむし。
中途半端な知識でやらされて、手が止まって無駄な時間ばっか使うわ。
0705デフォルトの名無しさん2016/02/07(日) 20:51:12.39ID:ADbKW/eV
エディタなりIDEなりの設定で乗り切る案件じゃないかなぁ
Cで何をしたいのかにもよると思うけど、低レベル開発なら選択肢ないからなぁ
0706デフォルトの名無しさん2016/02/07(日) 20:52:33.07ID:oPkfyoq8
ガンガン使う、って程じゃないなぁ、プリプロセッサ
デバッグ目的ならデバッガ使う方が良いんじゃ?
0707デフォルトの名無しさん2016/02/07(日) 20:59:20.86ID:ol9Dn32y
#if を使うとデバッグがしやすくなるってのはまずわかんない。
なんで? いくつものバリエーションを盛り込んだものをソースファイルひとつで作るって事?

自分は「デバッグをしやすくするために」 #if とかは使わないなぁ。
0708デフォルトの名無しさん2016/02/07(日) 21:02:12.26ID:ZO1JcykC
>>707
正確にはデバッグではなくて、テスト用に使う、でした。
0709デフォルトの名無しさん2016/02/07(日) 21:10:45.20ID:YehISXuU
>>700
そこら辺は趣味の領域だから、半分くらいの人には違和感あると思う
0710デフォルトの名無しさん2016/02/07(日) 21:15:31.15ID:pDArDbnY
NULLとnullの違いってなんですか?
0711片山博文MZ ◆T6xkBnTXz7B0 2016/02/07(日) 21:18:38.79ID:6NGyEHk4
>>710
C言語には大文字小文字の区別がある。
ヌルポインタを表すならNULLが正しい。
0712デフォルトの名無しさん2016/02/07(日) 21:29:37.55ID:c0FtLi6S
>>711
ありがとうございます。

http://www.nurs.or.jp/~sug/soft/super/hash.htm
ここなんですけどね、
nullを使おうとすると未宣言だといわれるし、

char *getValue()
char * searchList()
とか、アスタの位置の位置とか色々分からんです。
これって*charを返すように見えるんだけど???
0713片山博文MZ ◆T6xkBnTXz7B0 2016/02/07(日) 21:34:56.73ID:6NGyEHk4
>>712
とりあえず#include <stdlib.h>を上の方に追加だ。これでNULLが使える。
アスタリスクの前後のスペースには文法上の意味はない。
0714デフォルトの名無しさん2016/02/07(日) 21:41:04.10ID:pDArDbnY
>>713
大文字は使えるんですが小文字が使えんです。
ただのタイポですかね。
0715デフォルトの名無しさん2016/02/07(日) 23:09:44.17ID:g0b3K00o
そこ メタなCで記述してるだけじゃない?
null を NULL で読み替えられるぐらいの知識はある前提でいろいろ書いてるっぽい雰囲気
0716デフォルトの名無しさん2016/02/08(月) 00:20:54.72ID:8lnEEOYD
そのサイト「C言語の中級テクニックを中心に解説する」って書いてあるぞ
入門なら別のところへ
0717デフォルトの名無しさん2016/02/08(月) 07:01:07.43ID:YRs2z8LN
nullはNULLのタイポだろうね。
こういう間違いをCプログラムの専門家の間では「nullポ」と呼ぶんだ(高峰風)。

これから改良をほどこすサンプル、素朴なコード片の紹介部分だから
実際にコンパイラにかけてみてないだけだと思う。
0718デフォルトの名無しさん2016/02/08(月) 07:17:40.35ID:ujXDy4GQ
ハッシュテーブルってスーパーテクニックだったのかあ
0719デフォルトの名無しさん2016/02/08(月) 09:32:42.28ID:Mf5/oJdG
ちなみに独習するとnullをヌルって読む癖付けちゃう奴多いけどナルだからな
ドイツ語由来だからヌルだよとか言い出す馬鹿もいるけど、コンピューターサイエンスは英語読みが原則
0720デフォルトの名無しさん2016/02/08(月) 10:44:14.20ID:ljIIu1xu
ハッシュとか知らない人が多かった80年台
というか まだ汗が主流な頃
0721デフォルトの名無しさん2016/02/08(月) 11:34:46.39ID:M0j0fnEJ
90年代だって知らん
まだ16bitが生き残ってる頃
0722デフォルトの名無しさん2016/02/08(月) 12:33:37.32ID:+mZ+QTsE
会社見学でプログラマの現場見てきたんだが
上司と思われる人物が社員に対して「おいトイレに行くでもないのに
何回も立つな」って注意してたんだけど、その社員は背伸びしたかったらしい
プログラマって音立てたり立ったらだめなの?

こういう現場ってホワイトとはいえないでしょうか?
将来C言語で組み込みやりたいと思ってる僕が恐怖を感じた瞬間でした
0723デフォルトの名無しさん2016/02/08(月) 16:56:21.91ID:3QcKIDeA
その人が普段バグばっかりだして迷惑ばかりかけている人だったらそういう扱いになるよ
せめて他人の仕事の邪魔だけはするなってね
逆にバグも少なくて他の人の2倍3倍の生産性が有って他人のコードのバグ探しも素早い
優秀な人材だったら自由奔放にしていても何も言われないと思うよ
ソフトウェアの世界は人によって2倍3倍生産性が違うのは全然普通のこと
ひとたびバグを出せばそれを特定するのに、コードを書く以上に時間がかかるからね
一つのバグをつぶすのに丸一日費やすとかは普通にあり得る
だからバグを出さない人は重宝されて、バグを頻繁に出す人は冷や飯食わされる
つまり君次第だね
0724デフォルトの名無しさん2016/02/08(月) 19:40:36.78ID:ujXDy4GQ
>>720
昭和の老害はTAOCPすら学んで無いのか?
0725デフォルトの名無しさん2016/02/08(月) 20:25:14.41ID:2IUcNUml
>>720
むしろその頃に仕事でやってた人はそう言うアルゴリズムの教育受けてたり実装してたりするから、ハッシュとかソートの基礎知識を持ってたりする
0726デフォルトの名無しさん2016/02/08(月) 20:41:19.19ID:YRs2z8LN
80年代のプログラマと言っても、
仕事や研究機関でコンピュータサイエンスの教育を受けた人と、
ホビーマイコンを我流でいじってた連中とはまるで違うでしょ。

>>720 は後者を指してるんじゃないかと。
自分もそのクチ(ホビー我流)なんで実感として分かる。
というか身につまされる。
0727デフォルトの名無しさん2016/02/08(月) 21:49:51.51ID:UKgal17Z
>>722
まあね
バグってるプログラムや基板の相手する仕事ってのは、
バグってる人間の相手もせにゃならんわけで
それを怖がる人にはちょっと無理かなあ
0728デフォルトの名無しさん2016/02/08(月) 22:04:05.70ID:YQ0+a64D
c言語ってテストコードとか書かないんです?
今まではテストで結果を証明してたので、
そこを修整する根拠を示せと言われて困ってる。
0729デフォルトの名無しさん2016/02/08(月) 22:07:29.62ID:rZ+1cXkY
用もなく何度も立ったり座ったりすんなよ。
ガキじゃないんだから。
周りの人の集中を妨げるだろ。
お前一人の職場じゃないってことを忘れるなよ。
0730デフォルトの名無しさん2016/02/08(月) 22:14:27.07ID:ZIKWtfui
>>728
assertデバッグはいいぞ
0731デフォルトの名無しさん2016/02/08(月) 23:01:46.07ID:UpNzBg5k
#if〜#endifもあるしな
テスト専用フレームワークとか作らずとも、直に
#if 0 /*単体テスト*/
/*テスト内容のコメント*/
(テスト用コード)
#endif
でだいたいおk

#if 1にしっぱなしにするリスクはソースコードのコミット前に「単体テスト」でググればワカル
0732デフォルトの名無しさん2016/02/09(火) 00:32:46.53ID:XhrCkHez
【ワカヤマン】C言語プログラミング能力認定試験 [無断転載禁止](c)2ch.net
http://hanabi.2ch.net/test/read.cgi/lic/1454165737/
0733デフォルトの名無しさん2016/02/09(火) 10:17:28.87ID:zKyrJnIK
>>728
大原則:人間がやれば済むことは人間様が手間をかけてやる

それをおかしいと思うならCを使うべきかどうか見なおすべき
0734デフォルトの名無しさん2016/02/09(火) 10:29:35.29ID:VIyyoieF
>>728
書くよ
ひたすらテストコード書くバイトしてたことある
0735デフォルトの名無しさん2016/02/09(火) 12:53:23.12ID:zDhnJS+H
テストにCだからとかXXXだからとかないし
0736デフォルトの名無しさん2016/02/09(火) 17:44:09.56ID:CN4QadC3
C と XXX とを並べてくるとは、お主できるな。
そこにテストがどう関わってるか読めんけど。
0737デフォルトの名無しさん2016/02/09(火) 18:04:09.58ID:fDhCvDiz
まぁ後発のXXXはライブラリも安定してるから多少はテストがラクかもね
それでもテストは必要
0738デフォルトの名無しさん2016/02/09(火) 20:49:45.71ID:EWOJwJ1N
安定してる
って、お脳が不安定な方が作業されてるんですか
07396862016/02/09(火) 23:37:25.74ID:5G8kNDfr
>>697
どうもありがとうございました!
2番目の方は完璧に動きました。標準入力とファイルの
扱い方を忘れていました。


ただ1番目の単純な方が想定通りにうごきません;
http://ideone.com/XEZ1eX

下のような結果になります。
Input array size
15
variable_array[0]..15

配列に値を入れていくはずですが、どこがおかしいのでしょうか?
どなたかお教えくれないでしょうか?
0740デフォルトの名無しさん2016/02/09(火) 23:50:57.70ID:3EOr0/Uo
Input array sizeは書き間違いだと思ってたが
15は配列のサイズを意図してる?

今回は15とだけ入力したのでサイズ1のvariable_array={15}
ができた訳だけど
0741デフォルトの名無しさん2016/02/09(火) 23:51:50.92ID:3EOr0/Uo
スマン訂正
サイズ1→要素数1
0742デフォルトの名無しさん2016/02/09(火) 23:52:27.27ID:XKhjKgOy
>>728
普通に書くけど?
0743デフォルトの名無しさん2016/02/10(水) 06:21:24.12ID:AJuMr8NV
>>739
11行 "Input array size" 「配列の要素数を入れろ」と
14-19行 データ入力ループの実際の動作が食い違ってるんだよ。

14-19行の仕組みだと、数値を任意の個数(EOFまで)入力させて
数値を1個入れるたびに(動的に確保された)配列の要素数を増やしている。
結果として、配列の要素数は入力された数値の個数になる。

11行で表示される通りの動作にしたいなら、
最初に数値を1個だけ入力させて、その値の要素数を持つ配列を確保。
入力ループは配列要素数の回数だけ回す。
0744デフォルトの名無しさん2016/02/10(水) 09:19:50.49ID:2Jj9x+f9
250 名前:スッキリ厨[sage] 投稿日:2016/02/10(水) 06:03:33.68 ID:WrIiP8cs
中年のCプログラマーなんか、頭が固く、
皆オブジェクト指向に挫折して、Cの手続き型から抜け出せないw

さらに恐ろしい事実を告げると、Java8ではStreamという、
関数型まで採用されてしまったのだ

今や手続き型の老害は、死ぬのみw
0745デフォルトの名無しさん2016/02/10(水) 09:27:45.82ID:OtzvJZiD
最近は「30代の老害社員」 が増えてるみたいだねぇ。
0746デフォルトの名無しさん2016/02/10(水) 10:58:40.58ID:nNZFJpww
C言語使いこなせるレベルならオブジェクト指向なんてすぐ理解出来るだろ。
0747デフォルトの名無しさん2016/02/10(水) 11:19:56.25ID:+WwN5s4F
抽象的な概念を苦手とする人は多いよ
特に低レベル開発者
実際の挙動が見えづらくなるからね
でもそういう人は抽象化を必要としてなかったりするから問題にはならない
0748デフォルトの名無しさん2016/02/10(水) 17:13:13.46ID:+sMp0qjD
苦手っつーか、彼らからしたら無意味な議論に感じるんだろう
目の前に実際に動くディバイスが有って、それの制御を書いているような人からしたら
猫と犬は動物クラスで、猫はニャー、犬はワン、と鳴く、などといった
下らない思考パズルや言葉遊びの類に興味を持てないのも仕方ない
彼らからしたらLEDが光ってモーターが回る方が断然面白いだろう
0749デフォルトの名無しさん2016/02/10(水) 18:51:36.60ID:OnEbfKeK
>>746
概念なので、とまどう奴はいる
ただし例えば仮想関数はC言語だとこんな実装になるよ〜
ってやってやると、なんだ前からやってるやん
ってスパッと理解してくれる
0750デフォルトの名無しさん2016/02/10(水) 19:20:29.28ID:nNZFJpww
OOPは下手に構えずに、特定の機能つまみ食いするくらいの気持ちで始めてもいいんじゃないかね。
カプセル化や記述をシンプルにする目的でC++を選ぶ人もいるわけだし。

// C
StringFromAnimal(animal)
// C++
animal.toString();
0751デフォルトの名無しさん2016/02/10(水) 21:53:09.57ID:QBsTk/Mz
2番目と3番目のやり方(意味は同じ?)で配列の要素数が取れないのは、引数が配列の先頭要素を指しているからですか?
配列の変数は先頭の要素を指すものだと見た記憶があるのですが、1番目となにが違うのかよく分かっていません。
ttp://ideone.com/JM7Zwb

これを配列の要素数を取れるように直すにはどうすればいいのでしょうか。
すみません、お願いします。
07526862016/02/10(水) 22:24:39.12ID:Trt5lCpB
>>743
ありがとうございました。C言語復帰者なので、至らないところ
だらけです。”Input Some values” とすればよかったのですね。
743さんの予想通りに動きました。

いかせん、現在読んでる書物が中級以上なので、丁寧な説明が
少なくて困っていました。
0753デフォルトの名無しさん2016/02/10(水) 23:11:21.01ID:eRJ6+i7X
戻り値で返すんじゃなくて、中でなんかされんの慣れない。
0754デフォルトの名無しさん2016/02/11(木) 00:19:28.48ID:sTXI2tGn
CプログマラーにとってFILE構造体あたりがオブジェクト指向のHello World!であるはずだ
0755デフォルトの名無しさん2016/02/11(木) 06:50:31.44ID:L8ovqpUs
>>751
関数の引数として渡された配列名は、自動的に配列の先頭要素へのポインタに変換される。
配列とポインタに関してよく見かける説明文だと思うが、これに引っかかってる。

int Count(int arr[]);
int Count2(int *arr);
2つの関数は仮引数の表現(arr[], *arr)は違うが、まったく同じということ。
どちらの arr も int *arr (int型変数へのポインタ)として扱われる。

これにより、関数の返り値 sizeof(arr) / sizeof(int) の意味は、
どちらの関数でも sizeof(int*) / sizeof(int) である。
「int型ポインタを格納するのに要するメモリサイズと、intの値を格納するのに要する
メモリサイズの比」という、あまり意味のない値を計算しているのだ。


で、呼び出された関数の側で、引数の配列に含まれる要素数を知る方法。
配列の要素数は、自動的には関数に渡されないので、
「関数の引数として配列の要素数も与える」のが一般的。

extern int func(int arr[], int elems); /* 外部関数の場合 */

int main() {
 int array[10];
 int result;

 result = func(array, sizeof(array)/sizeof(array[0]));
}


(注意) sizeof() は関数でなく演算子。
sizeof(array) のarrayはポインタには変換されないので
期待通り array[10] のバイト数が得られる。
0756デフォルトの名無しさん2016/02/11(木) 10:22:05.46ID:OZhLkZUr
残念!sizeofが返す値はバイト数ではないのだ
0757デフォルトの名無しさん2016/02/11(木) 10:44:16.18ID:6rujyZn/
厨房です

どの言語から始めたらいいと思いますか?

プログラムの{ぜ}の字も分かりません
0758デフォルトの名無しさん2016/02/11(木) 10:58:01.51ID:vxNioHuU
>>756
The sizeof operator yields the size (in bytes) of its operand,
which may be an expression or the parenthesized name of a type.
0759デフォルトの名無しさん2016/02/11(木) 11:38:39.58ID:Otx75HG3
>>729
座ってたら死亡率上がるんですが
立つことを注意する人間は殺人未遂として訴えてもいいんですよ
0760デフォルトの名無しさん2016/02/11(木) 12:55:31.56ID:L8ovqpUs
>>756 >>758
sizeof() で返るのはバイト数で合ってるよね。
記憶だけで書いたから調べ直しちゃったよ。

それはそれとして、
「sizeof()が返すのはバイト数ではない」
→ じゃ正しくは何を返すのかも書いてくれよ、小出しにして焦らすなよ。
と感じるのは俺だけの特異な反応だろうか。
0761デフォルトの名無しさん2016/02/11(木) 13:13:52.42ID:vxNioHuU
>>760
残念sizeof()では無い。sizeof。
>>758に書いてあるだろ。
0762デフォルトの名無しさん2016/02/11(木) 15:11:20.84ID:5LqHbRm/
>>760
不思議に思うかもしれないけどsizeofは演算子なんだよ
0763デフォルトの名無しさん2016/02/11(木) 15:14:27.14ID:2zWchetY
>>761
必ず return() って書く人なんだろ
いちいち絡むなよ
0764デフォルトの名無しさん2016/02/11(木) 15:32:32.65ID:FeJdCYca
(charが12 bitだったりしたらどうなるんだ…
07657552016/02/11(木) 15:54:12.00ID:L8ovqpUs
>>761
おお、確かに演算子はsizeofで、必ずしも sizeof() とカッコで囲む必要はないね。
型名でバイト数を取りたいときにカッコで囲む必要があるんだっけ。
ご指摘の通り。しかも回答側 >>755 で間違ってるんだからより悪質だった。

size_t bytes;

int a = 3;
bytes = sizeof a; // ok
bytes = sizeof 3; // ok

bytes = sizeof int; // error!
bytes = sizeof(int); // ok


>>763
return にカッコをつけない派です。
retrun とタイポする癖があるんでコンパイラにチェックしてもらってる。
0766デフォルトの名無しさん2016/02/11(木) 16:40:16.73ID:1NCRSvef
>>764
バイトは 8bit とは限らない
https://ja.m.wikipedia.org/wiki/%E3%82%AA%E3%82%AF%E3%83%86%E3%83%83%E3%83%88_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)
0767デフォルトの名無しさん2016/02/11(木) 17:58:20.12ID:OZhLkZUr
残念!8ビットと決まってないだけだった
(´・ω・`)Cのsizeof(char)=1とC#のchar2バイトが頭の中で混ざって間違えて覚えてたごめんね
0768デフォルトの名無しさん2016/02/11(木) 18:07:19.37ID:FNR4nKd2
>>767 うむ、許す
   ||
 Λ||Λ
( / ⌒ヽ
 | |   |
 ∪ 亅|
  | | |
  ∪∪
   :
   :

 ‐ニ三ニ‐
0769デフォルトの名無しさん2016/02/11(木) 18:39:15.40ID:+Uw2l5tW
そもそも型名ではなんでカッコ必須なんだろう
どっかで曖昧が生じるのかと思って前調べたけどわからなかった気がする
むしろ変数とかリテラルのほうがかっこつけたほうがわかりやすいのに
0770デフォルトの名無しさん2016/02/11(木) 18:50:42.45ID:OZhLkZUr
他人のソースでsizeof unsigned intって書かれてて
gccとvcどちらかで通って片方でエラーになってた事があった思い出
0771デフォルトの名無しさん2016/02/11(木) 19:20:29.00ID:L8ovqpUs
この投稿は個人の感想・推測なので明確な根拠はないと、あらかじめ注意しておく。

sizeof は演算子だから基本的にはカッコは不要って考え方は納得いく。
関数と見間違えるとか、Cの「最小タイピング主義」とか。

型名でカッコが必要なのは、ポインタ関係じゃなかろうか。
sizeof char * と書けると sizeof(char) * か sizeof(char*) か曖昧になる。
後に続く内容で曖昧さが解消されるかもしれないが、
曖昧さを抱えたまま式を解釈するコンパイラを作るのが大変とか。
07727512016/02/11(木) 20:04:21.09ID:iLJD0Fnb
>>755
お礼が遅くなりましてすみません。
詳しく教えていただきありがとうございます。

>配列の要素数は、自動的には関数に渡されないので、
>「関数の引数として配列の要素数も与える」のが一般的。
参考書では要素数を仮引数に与えていたことを思い出しました。
なぜそのような面倒なやり方をしているのか合点がいきました。

また、sizeof関数に関するみなさんのレスも読ませていただきました。
勉強になりました、ありがとうございます。
0773デフォルトの名無しさん2016/02/11(木) 20:07:24.55ID:iLJD0Fnb
すみません、sizeofは演算子なんですね
失礼しました
0774デフォルトの名無しさん2016/02/11(木) 23:42:50.29ID:GKHUTBEj
ポインタの勉強しています。
関数へのポインタで躓いています。
本に以下のように書いてありますが、中身が読み取れません。
どなたか、簡単な例でおしえてくださらないでしょうか?

”関数は、式の中では「関数へのポインタ」に自動的に
変換される。ただし、アドレス演算子&のオペランド
であるときと,sizeof演算子のオペランドのときは例外
である”

”関数呼び出し演算子()は「関数」ではなく「関数への
ポインタ」をオペランドとする。”
0775デフォルトの名無しさん2016/02/12(金) 02:03:53.33ID:bwdIAcv4
式は結合の優先順位を考えると確定はできるだろうけど
byte a;
sizeof a + 10
とか
sizeof(byte)+10
みたいに書かれてたらなにが返ってくるのか調べただけだと不安で実行してみちゃうわ
極めて非合理的な仕様だと思う
0776デフォルトの名無しさん2016/02/12(金) 02:11:20.26ID:bwdIAcv4
>>774
初心者のうちはあんまり気にしなくていい
配列のとこでも同じようなことが書いてあると思うけど、C言語特有の適当に仕様を決めて、後で見たらなんか変だったパターンのやつだ

関数ポインタは(*f)()とかしなくてもf()で呼べるとこだけ覚えとけ
あとは、sizeofとか&とか、(f+1)()みたいな不自然なことをせざるを得なくなった時に改めて細かい仕様を調査するのがいい
0777デフォルトの名無しさん2016/02/12(金) 02:29:04.53ID:e+FqND6X
>>774
void func(){} という関数があったとして、
&func, func の値はどちらも同じ関数へのポインタ。
printf(“%p %p", &func, func);

func(); このfuncは関数へのポインタ。
これでも呼べる。
(&func)();
0778デフォルトの名無しさん2016/02/12(金) 09:25:22.36ID:OTNNkTev
関数も変数もメモリに割り当てられてて
その開始アドレスをポインタ変数に格納することで
ポインタ変数経由で変数の中身を読み書きしたり
関数を呼び出したりできるというだけのこおと
0779デフォルトの名無しさん2016/02/12(金) 09:28:38.34ID:dKyYxY1Q
「関数呼び出し演算子()」とか言ってるからC++じゃねーの?
0780デフォルトの名無しさん2016/02/12(金) 13:05:19.83ID:LK6Hhi/I
>>774
実際のところ >>776 の言う通り、細かいことを気にしないのが良い。
「ソースを書くときに直感的かつ楽チンに書けるように仕様を定めたら、
仕様書の方がえらく複雑になっちゃった」という、いかにもCらしいお話の結果だ。

あえて説明するなら下のような意味かな。
……これは自信がないので詳しい人の添削を求む。

#include <stdio.h>

static int func(int arg) {
 printf("関数 %s() が引数 %d で呼ばれた\n", __func__, arg);
 return arg;
}

int main()
{
 int (*pfunc)(int arg); /* pfunc: 関数へのポインタを格納する変数 */

 pfunc = func; /* (1) */
 pfunc = &func; /* (1') */

 pfunc(200); /* (2) */
 (*pfunc)(201); /* (2') */
 func(300); /* (3) */

 return 0;
}

(改行多過ぎエラーが出たのでつづく)
07817802016/02/12(金) 13:05:58.13ID:LK6Hhi/I
( >>780 のつづき )

「関数は、式の中では『関数へのポインタ』に自動的に変換される」
(1)のように書ける、ということ

「アドレス演算子&のオペランドであるときは例外」
(1')のように書いても(1)と同じ意味、ということ

「sizeof演算子のオペランドのときは例外」
これはどういう意味だろう?

「関数呼び出し演算子()は『関数』ではなく『関数へのポインタ』をオペランドとする」
(2)のように書いて関数を呼び出せること
(2')のような書き方をする必要はない(書いても同じように動作するけど)ということ

最後に、普通の関数の呼び出し(3)は「まずfuncが関数へのポインタに自動的に変換され、
次いで変換結果である関数へのポインタに対して関数呼び出し演算子()が作用する」
てな具合に動作しているのだ。理屈の上では。
0782デフォルトの名無しさん2016/02/12(金) 13:39:13.89ID:nnsHRM/E
>>781
>「sizeof演算子のオペランドのときは例外」
>これはどういう意味だろう?

sizeof(func)
↑これがエラーになるというだけ
『関数へのポインタ』に自動的に変換されるならsizeof(pfunc)と同じになる
07837742016/02/13(土) 13:53:58.42ID:NQaIiq8o
みなさん、だいたい内容を掴めました。
とくに>>780さんのご説明でわかりました。
コピペして自分のPCに保存しています。

すみません、配列とポインタでもう一つ質問があります。
1 hoge[][]
2 **hoge
3 *hoge[]
4 (*hoge)[]

1と2は同じ中身ですよね?
3と4の違いは分かります。
それでは1,2,3,4の関係はどうなってるのでしょうか?
1と2が同じで、3と4はそれぞれ別物と考えてよいのでしょうか?
0784デフォルトの名無しさん2016/02/13(土) 13:59:40.77ID:sJF7YOqD
自分からするとどうでもいいな。コンパイラで試せ。
確実に理解してない仕組みは不要に使わなくていい。
使うとき勉強、実験したらいい。
0785デフォルトの名無しさん2016/02/13(土) 15:09:54.02ID:fIKntVXI
ややこしい時は struct 一回挟む
ポインタの配列 struct foo1 { type *pointer; } array[num];
配列のポインタ struct foo2 { type array[num]; } *pointer;
0786デフォルトの名無しさん2016/02/14(日) 03:42:01.75ID:2H7lNMsF
ポインタの宣言の読み方はK&R本に行き届いた説明があった気がするが…

1. int hoge[1][2] は int (hoge[1])[2]の意味で、hoge[0]はint型の2要素の配列を表す(sizeof(hoge[0]) == 値はsizeof(int) * 2
hogeそのものはint型の2要素の配列の配列
2. int **hogeはint *(*hoge)の意味で、*hogeはint型へのポインタ(int*)へのポインタを表す(sizeof(*hoge) == sizeof(int*)
hogeそのものはint型を指すポインタ(int*)を指すポインタ
3. int *hoge[2]はint *(hoge[2])の意味で、hoge[0]はint型へのポインタ(int*)を表す(sizeof(hoge[0]) == sizeof(int*)
hogeそのものはint型を指すポインタ(int*)の配列
4. int (*hoge)[2]はこれ以外書き様が無く、*hogeはint型の2要素の配列を表す(sizeof(*hoge) == sizeof(int) * 2
hogeそのものはint型の2要素の配列を指すポインタ

1と4、2と3がそれぞれ同じような意味だが、1と3はhogeそのものが配列、2と4はhogeそのものはポインタという違いがあり、
hogeそのものの値の変更は(hogeがポインタである)2と4のみでできる、
0787デフォルトの名無しさん2016/02/14(日) 03:50:28.95ID:2H7lNMsF
スマン訂正orz
誤: 2. int **hogeはint *(*hoge)の意味で、*hogeはint型へのポインタ(int*)へのポインタを表す(sizeof(*hoge) == sizeof(int*)
正: 2. int **hogeはint *(*hoge)の意味で、*hogeはint型を指すポインタ(int*)を表す(sizeof(*hoge) == sizeof(int*)
0788デフォルトの名無しさん2016/02/14(日) 21:37:48.99ID:fEjJVis1
C言語とか完全にオワコン
未だにコンソールでmakeとか打ってんのか
世間はmakeとか卒業してant, maven, gradleと新しいツールに移行してんのに
オシロスコープと半田ごてでオナニーかよw
組込みとかネットワークもDBもGUIも使わない
バージョン管理システムはCVSですかwせいぜいSVNだろうなwww
世の中はgitに以降してるのにどうしようもねえよプルリとか分かんねえんだろうな
オブジェクト指向、アスペクト思考、依存性の注入とか新しい概念がいっぱい出て来てるのに
手続き型に引きこもってたらこれから日本のメーカーが衰退して組込みの仕事がなくなるのは確実なのにどうすんのよ
C言語なんか週末勉強会なんか全く開かれないし転職サイトでC言語で募集してる記事なんか皆無やぞ
教育関係者が時代の変化に付いていけてなくてC言語しか教えられないから残ってるだけ
オワコンにしがみつくゴミはパチンコ開発でもやってろ
0789デフォルトの名無しさん2016/02/14(日) 21:48:24.80ID:kQeVlKcr
今って各種言語のメインのコンパイラ制作もC以外の言語に移ってるの?
0790デフォルトの名無しさん2016/02/14(日) 22:37:05.06ID:7PLx3+xa
>>789
C#とVBは数年がかりで移した
VCから流用してたのが使えなくなるのと追加でいろんな機能をもたせようとしたのが辛いのかかなり苦戦した
やっと目的を達成して今後はC#でかけるから楽だし、構文木とか推論とかもAPIとして公開できて夢広がりんぐ
0791デフォルトの名無しさん2016/02/14(日) 23:32:26.49ID:AznglxFt
【ワカヤマン】C言語プログラミング能力認定試験 [無断転載禁止](c)2ch.net
http://hanabi.2ch.net/test/read.cgi/lic/1454165737/
0792デフォルトの名無しさん2016/02/15(月) 09:06:12.56ID:9ExsxeaN
話通じてない奴は無理に答えなくてもいいのに
0793デフォルトの名無しさん2016/02/15(月) 10:10:20.74ID:E84Q1jzs
>>788
それ、大部分がC以外で書かれたOSから書いてるんだろうな?
なんていうOS?
0794デフォルトの名無しさん2016/02/15(月) 11:07:44.59ID:FLuEFg6M
OSやドライバー必須な言語だけ残ってもねぇ。
0795デフォルトの名無しさん2016/02/15(月) 12:43:13.36ID:9wbMWgsx
じゃあおまえはコンパイラやOSを開発する仕事についてんのかって
そんなのごく一部だろう
0796デフォルトの名無しさん2016/02/15(月) 13:18:03.18ID:wecJul4I
Cすら知らないでプログラマを自称しちゃうとか笑える〜www
0797デフォルトの名無しさん2016/02/15(月) 13:19:42.26ID:9ExsxeaN
道具なんてなに使ったっていいだろ
人様にケチつける前にスレ違い発言をどうにかしろよ
0798デフォルトの名無しさん2016/02/15(月) 13:24:14.87ID:g+W5jzDi
スレチかもしれませんが、専スレがどこにもなさそうなのでここでお尋ねします。

clangでopeomp使おうとビルドしてみたんですが、実行すると
スレッド数がOMP_NUM_THREADSに関わらず常に1になってしまいます。
コードはGCC5.2では正常に動きます。
こういうとき何を調べたらいいでしょうか?
OSはCentOS6.7で、llvm、clang、openmpはすべて3.7です。
0799デフォルトの名無しさん2016/02/15(月) 15:32:38.96ID:cEyJtxrN
>>798
コンパイルオプションや警告が出てれば全部貼ったほうがいいよ
0800デフォルトの名無しさん2016/02/15(月) 16:01:00.10ID:g+W5jzDi
>>799
そうですね、失礼しました。
スマホからだと書くのがきついので、帰宅後にPCから書き込みます。
0801デフォルトの名無しさん2016/02/15(月) 17:31:04.58ID:g+W5jzDi
解決しました。
clang -fopenmp a.c とすべきところを
clang -lomp a.c としたり
clang -openmp a.c としたりアホなことやっていたのが原因でした。
スレ汚しすみませんでした。

なお、llvm一式のビルドには
CentOS6.7標準のgcc 4.4.7は古すぎて
駄目だろうと思ったので、自前でビルドしたgcc 5.2を用いました。
0802デフォルトの名無しさん2016/02/15(月) 18:05:51.07ID:2DOX1wmD
>795
なんだ、ただ多数派か少数派かだけで優劣語る判断能力の欠如した情弱か。
0803デフォルトの名無しさん2016/02/15(月) 18:15:13.82ID:AZNjQN5i
組み込み系はC言語がつかわれているって聞きましたが
例えば電化製品の電源ONや、温度のボタンなどはscanf()関数が
担っているんでしょうか?
0804デフォルトの名無しさん2016/02/15(月) 19:32:21.14ID:4oQTQyhg
そういうのに標準入出力の printf や scanf はまず使わないだろう
もしかしたら、コンパイラの都合でそもそも使えないかもしれない
0805デフォルトの名無しさん2016/02/15(月) 20:38:06.25ID:DVDGKYNF
>>803
実務者でないので確かなことは言えないけど、
たぶんscanf()は担ってないだろうね。
どこかの固定番地のメモリを読むとスイッチの状態が取れる、
みたいな方式がもっとも単純な実現方法だったけど…。

#define SW_ADDRESS ((volatile char*)0xffff00) /* 番地は一例(実際の回路による) */
#define SW_BIT_POWER 0x1
#define SW_BIT_UP 0x2
#define SW_BIT_DOWN 0x4

void read_sw(void) {
 char sw_now = *SW_ADDRESS; /* 今のスイッチの状態をメモリの内容として読む */

 if (sw_now & SW_BIT_POWER) { /* 電源スイッチの処理 */ }
 if (sw_now & SW_BIT_UP) { /* 上矢印ボタンの処理 */ }
 if (sw_now & SW_BIT_DOWN) { /* 下矢印ボタンの処理 */ }
 ...
}


現代の家電制御だと操作部は外部デバイスの扱いで、
ボタンを押すと割り込みがかかる(イベントが発生する)感じなのかな。
0806デフォルトの名無しさん2016/02/15(月) 20:41:21.97ID:z4NOVyYm
>>803
いいえ
IOポートをベンダーのライブラリによって変数または関数でアクセスできるようにされています
08078052016/02/15(月) 21:01:32.89ID:DVDGKYNF
>>805
ああ、IOポートを忘れてた。_asm_()でIN/OUT命令のラッピングとか。


…以下個人的な記録。"便所の落書き"レベルだが実はこちらが書きたかった。
ところで俺のIDを見てくれ、こいつをどう思う(全部が大文字)。
しかも先頭3文字がDVD、DVD!
0808デフォルトの名無しさん2016/02/15(月) 21:10:35.79ID:MiqBdzVE
        lヽ ノ l        l l l ヽ   ヽ
  )'ーーノ(  | |  | 、      / l| l ハヽ  |ー‐''"l
 / D  | | |/| ハ  / / ,/ /|ノ /l / l l l| l  D ヽ
 l   ・  i´ | ヽ、| |r|| | //--‐'"   `'メ、_lノ| /  ・  /
 |  V  l  トー-トヽ| |ノ ''"´`   rー-/// |  V |
 |  ・   |/     | l ||、 ''"""  j ""''/ | |ヽl  ・ |
 |  D   |       | l | ヽ,   ―   / | | l  D  |
 |   !!  |     / | | |   ` ー-‐ ' ´|| ,ノ| | |  !! |
ノー‐---、,|    / │l、l         |レ' ,ノノ ノハ、_ノヽ
 /        / ノ⌒ヾ、  ヽ    ノハ,      |
,/      ,イーf'´ /´  \ | ,/´ |ヽl      |
     /-ト、| ┼―- 、_ヽメr' , -=l''"ハ    |  l
   ,/   | ヽ  \  _,ノーf' ´  ノノ  ヽ   | |
、_    _ ‐''l  `ー‐―''" ⌒'ー--‐'´`ヽ、_   _,ノ ノ
   ̄ ̄   |           /      
0809デフォルトの名無しさん2016/02/15(月) 21:55:30.62ID:m+SXox7w
ここであえて割り込み信号を利用して(ry
0810デフォルトの名無しさん2016/02/15(月) 22:57:49.99ID:8/hvPvbC
割り込み < ずっと俺のターン
0811デフォルトの名無しさん2016/02/15(月) 23:13:44.55ID:VPv2PLWt
組み込みではstdio.hすらインクルードしないこともザラだからscanf()は使わないね
0812デフォルトの名無しさん2016/02/16(火) 00:30:12.02ID:A8sxbaEi
>795
お隣の土人レベルで支離滅裂な反論だな。
0813デフォルトの名無しさん2016/02/16(火) 01:01:51.42ID:QXrSBwPp
オシロスコープと半田ごてでデバッグする世界だからな
もはやソフトウェア技術者じゃないよ
C言語はソフトウェアじゃない
0814デフォルトの名無しさん2016/02/16(火) 01:15:50.67ID:c8/hor6F
charってなんのためにいるの?
全部unsignedじゃ駄目なん??
0815デフォルトの名無しさん2016/02/16(火) 01:32:25.99ID:MBCQ5F1N
char
unsigned char
int
unsigned int
0816デフォルトの名無しさん2016/02/16(火) 01:46:52.45ID:leT4GxEl
>>813
オシロスコープは測定器、半田ごては工具。
デバッグに使うのはICE(インサーキットエミュレータ)。
最近はターゲットボードのCPUに直接プローブを接続する代わりに
マイコンのUART機能を利用した簡易ICEを使うことも多いけどな。
0817デフォルトの名無しさん2016/02/16(火) 01:59:42.70ID:MBCQ5F1N
#define ARRAY_SIZE 128
#include <stdio.h>
#include <string.h>
int main(void)
{
    char a[] = "32-bit application";
    char c[ARRAY_SIZE];
    int k;
    int length = strlen(a);
    unsigned u[ARRAY_SIZE];

    printf("sizeof(c) = %d\n", sizeof(c) );
    printf("sizeof(u) = %d\n", sizeof(u) );

    memcpy(c, a, length);
    c[length] = '\0';
    printf("strlen(c) = %d\n", strlen(c) );
    for(k = 0; c[k] != 0; k++) {
        printf("%X ", c[k]);
    }

    putchar('\n');

    memset(u, 0, ARRAY_SIZE);
    memcpy(u, a, length);
    for(k = 0; u[k] != 0; k++) {
        printf("%4X ", u[k]);
    }
    return 0;
}
0818デフォルトの名無しさん2016/02/16(火) 05:24:10.84ID:WAHfrhjM
>>814 の疑問は、
単に char と書くと signed char か unsigned char か確定しない。
signed と書かなくても符号付きになる他の整数型と異なる挙動は
不統一で見苦しいって話かな。
0819デフォルトの名無しさん2016/02/16(火) 08:51:09.83ID:c8/hor6F
文字コードにマイナスはないんだから符号は必要あるの?って話です
0820デフォルトの名無しさん2016/02/16(火) 09:01:09.73ID:rD0NYg0s
>>819
まず、符号付きとは限らない。処理系定義。
で、符号付きの利点は他の整数型と同じ仕様の方が分かりやすいからじゃないかな多分
0821デフォルトの名無しさん2016/02/16(火) 09:43:02.89ID:pJeE/dKV
char は文字型じゃ無いぞ。
C言語自体には文字という概念も無い。
0822デフォルトの名無しさん2016/02/16(火) 10:35:19.71ID:A8sxbaEi
>821
>C言語自体には文字という概念も無い。

あるよ。”abc"とか'a'とか。
文字型変数は無いけど。
0823デフォルトの名無しさん2016/02/16(火) 11:36:38.20ID:d+4j8JFt
昔はデータに型なんて言うものは無かったからデータの列の一つを文字になぞらえてワードといっていたんだぞ。 コンピューターに理解できる文字は数字の数だったということだ。
0824デフォルトの名無しさん2016/02/16(火) 12:36:22.55ID:Nv9Fnt/E
>>823
「ワード」というのは、昔のコンピュータは最小の記憶単位だったのではないでしょうか。
例えば、1960年代初頭の日立のパラメトロン計算機は、21ビットを短ワードと呼び41ビットを
長ワードと呼んでいて、磁気ドラムの記憶容量は、短ワードで8392ワード、長ワードで4192ワード
でした。
計算はワード単位で行いました。
0825デフォルトの名無しさん2016/02/16(火) 12:48:46.10ID:JA04JtkX
>>824
∀と∃の違いわかるかな?
0826デフォルトの名無しさん2016/02/16(火) 15:37:30.09ID:VEJFRQq2
>>825
顔文字とヨ
0827デフォルトの名無しさん2016/02/16(火) 15:44:14.92ID:CTU8DF7H
>>822
そういう言い方が出来るなら、
無限多倍長整数や、分数、無理数、複素数も
あることになるな。
0828デフォルトの名無しさん2016/02/16(火) 16:02:53.66ID:VEJFRQq2
>>822
文字型変数あるやん
0829デフォルトの名無しさん2016/02/16(火) 16:12:19.64ID:Nv9Fnt/E
>>825
記号論理学の記号で、「全て」と「或る」と云うことは解っていますが、
これと「ワード」との関係がわかりません。
御教示ください。
0830デフォルトの名無しさん2016/02/16(火) 16:32:10.70ID:jAB1ZrKH
あー、昔の上司に「char は文字型じゃない」と言われてそのまま覚えてたわ(8bit変数だと教わった)。
BASIC→アセンブラって来たから信じてた。
0831デフォルトの名無しさん2016/02/16(火) 17:35:24.24ID:WAHfrhjM
今の議論は、charの変数や配列を「文字を格納する領域」と見るか、
「単に1byte長の整数を格納する領域」と見るか、どちらの立場をとるかで
混乱してると思われる。

そして ANSI C 以前のコンパイラ製作者にも両派があった。
charは「文字型」派 ... 単なるcharは符号なし
charは「小さい整数型」派 ... 単なるcharは符号付き

結局ANSI規格でcharは小さい整数と定め、
signed/unsignedの修飾で符号の有無を明示できるようにした。
しかしながら、単なるcharの符号の有無は「処理系定義」。
……たぶん同一商品シリーズのコンパイラ製品をANSI対応版に切り替えたとき、
それまでのソースを変更せずに再コンパイルして、同じ動作を保つため。


(個人的な疑問.1)
古いCコンパイラ処理系には
charにはsigned/unsignedの修飾ができないものが存在したのだろうか?

(個人的な疑問.2)
そもそもsignedという修飾子が新しく追加されたものなのか?
0832デフォルトの名無しさん2016/02/16(火) 17:52:00.63ID:EwcJlFmr
C言語がB言語のころは型なんてものは無くて、コンピューターに小数点計算のユニットが出来てから型が2種類になって追加された。 Cにはunsignedもなくてコンピューターに非符号計算命令ができてから追加された。
08338312016/02/16(火) 19:07:27.59ID:WAHfrhjM
素早い回答ありがとう。でも、そこまで古い歴史は念頭になかった。
MS-DOSでLatticeとかTurboとか言ってた頃までしかさかのぼれないのだ。

K&R『プログラミング言語C』第1版の和訳を読んだ記憶で、
unsignedは確かに見たがsignedがどうだったか記憶があいまい。
デフォルトでsignedだから書く必要はないと印象が薄かったのか、
signedという修飾語が何かの独自拡張だったのかな、という話なのよ。
0834デフォルトの名無しさん2016/02/16(火) 19:12:10.48ID:EwcJlFmr
signedはK&Rからansiに切り替わるときに付け加えられたキーワード。
08358312016/02/16(火) 19:23:17.73ID:WAHfrhjM
再びありがとう。IDを見るに同じ人のようだな。
やっぱりsignedはANSI以後だったか。

すると >>831 の疑問.1も自動的に解決というわけだ。
今でも単なるcharの符号の有無をコマンドラインオプションで
切り替えられる処理系が多い(全部か?)のはANSI以前の名残りかもな。

>>833
用語としては「修飾語」でなく「修飾子」と書くべきだったね。
0836デフォルトの名無しさん2016/02/16(火) 21:03:04.77ID:fXbScveD
SJIS 漢字取り扱うときに
(SJIS 漢字は 最上位ビットがたった 8bit値のペア)
char が 符号無しのほうが都合が良くなるシーンがあって
コンパイラオプションで逃げれるようにしてあったとかなんとか

多分文字の比較周辺だろう
0837デフォルトの名無しさん2016/02/16(火) 23:01:02.06ID:rhm6d/76
char(int8_t)を「1byteの整数」と思ってたら、C++のstream出力でトラップに引っかかってしまった。
char/signed char/unsigned char全部別の型なんだから文字として扱うのはcharだけでいいのに。
0838デフォルトの名無しさん2016/02/17(水) 09:39:51.28ID:aScpC0wo
C++でもprintf()使用。
0839デフォルトの名無しさん2016/02/17(水) 12:33:04.22ID:meWsqvoD
C++はスレ違い
0840デフォルトの名無しさん2016/02/17(水) 15:33:30.86ID:/MXgbI0X
sizeof関数の必要性が分からないです
int x;
xはint型だから4byteって分かるから
一々sizeof調べる必要なくね?ってお思うんですが…
必要だからあるんでしょうね…
0841デフォルトの名無しさん2016/02/17(水) 15:34:35.10ID:TSaSWJ2t
>>840
> xはint型だから4byteって分かるから
いいえちがいます
0842デフォルトの名無しさん2016/02/17(水) 15:47:24.17ID:9Tg9xwfb
>>840
関数ではなく演算子
0843デフォルトの名無しさん2016/02/17(水) 15:53:20.97ID:aScpC0wo
>840

struct {
.....
} st_data;

memset(&st_data,0,sizeof(st_data;));

構造体のサイズ、自分で計算するの?
仕様変更のたびに計算し直すの?
0844デフォルトの名無しさん2016/02/17(水) 17:11:39.31ID:b9cN/SiC
みんながMS-DOS上で開発してた頃 >>840 と同趣旨の質問は
int x;
xはint型だから2byteって分かるから…
という具合に書かれてたね。20世紀も遠くなったものだ。

・intは4byteと限らない >>841
・構造体のメモリ配置には穴がある(各要素の大きさの単純な和にならない) >>843
・構造体の構成を変更した時にsizeofなら自動的に追従してくれる >>843
・ところで sizeof は関数ではなく演算子ですよ >>842

俺もひとつsizeofの効用を紹介したい。
int array[10];

 for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
  ...
 }

上のような処理(arrayの要素数だけループ)の場合、
sizeofで書いておけばarrayの要素数を増減させたときや
arrayの型をintからlongに変えたときでもforの方は手直しする必要がない。
つまりあらかじめ修正忘れバグが生じる危険を除去しておける。
08458442016/02/17(水) 17:20:46.04ID:b9cN/SiC
そうそう、 sizeof は(関数じゃなくて)演算子だから
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) でなく
for (i = 0; i < sizeof array / sizeof array[0]; i++) と書ける。

ということは知ってるけどsizeofにカッコがついてないと落ち着かないわ。
上の2番目の例を見ても、何やら股間がスースーする感じ。
0846デフォルトの名無しさん2016/02/17(水) 19:51:30.81ID:ZLMxZU9o
>>845
パンツ穿けよ
0847デフォルトの名無しさん2016/02/17(水) 21:27:16.78ID:sobQnjjW
Visual C++だとsizeof(array)/sizeof(array[0])の同義語として_countof(array)というのが使える、
先頭にアンスコだがどっかのMSDNのサンプルで使われてた
0848デフォルトの名無しさん2016/02/17(水) 21:55:56.81ID:FcItmVTS
>>840
intのサイズは実装依存だから
0849デフォルトの名無しさん2016/02/17(水) 21:56:11.63ID:XCSGc6/k
実際には見たこと無いが
sizeof(型名[n])がsizeof(型名)*nを返す仕様であるため
sizeof(変数名[0])が0になる実装がないとかあるとか
0850デフォルトの名無しさん2016/02/17(水) 22:52:20.50ID:kFTtiQmO
>>848
そう思ってたら、64bit の処理系で
int -> 4byte
long -> 4byte
longlong -> 8byte
とか言うのも結構謎だよな。int のサイズが変わる事ってあるのかしらん。
0851デフォルトの名無しさん2016/02/17(水) 23:32:27.84ID:XCSGc6/k
x64でILP64にしても利点が無いからな
互換性大事にしてLLP64にするか
もしくはLP64で精一杯
0852デフォルトの名無しさん2016/02/17(水) 23:39:59.64ID:hHciXnJ7
何の考えもなく作られたILP32のコードは、LP64に対応させるだけでもキツかったわ
0853デフォルトの名無しさん2016/02/17(水) 23:48:02.11ID:mucHor6X
sizeof(array[0])とsizeof(*array)って同じ意味という認識で良いですか?
sizeof(*array)のほうがわかりやすいのでこちらを常用したいのですが、問題はありますか?
0854デフォルトの名無しさん2016/02/18(木) 07:39:27.06ID:tgEJTGBi
arrayがポインタなら同じ
0855デフォルトの名無しさん2016/02/18(木) 08:09:04.90ID:86RD4104
・sizeof(array[0]) と sizeof(*array) は同じ
たぶん正しい。
実際のarrayが配列であるかポインタであるかによらず正しい、と思う。

・sizeof(array[0]) の代わりに sizeof(*array) と書くことに問題は?
たぶん文法的には問題ない。

でも上に出た「配列の要素数を知るのに使う」場面では
sizeof(array) / sizeof(array[0]) という具合に
配列名[0] で書くのがイディオムになってる気がする。
少なくとも sizeof(array) / sizeof(*array) の書き方は見たことがない。

他の人にソースを見せたとき sizeof(*array) だと
「ここは何を計算してるんだ? ……ああ、配列の要素数ね」と
読解のリズムを軽く乱すという弊害はあるかも。


「たぶん」「…と思う」ばかりでアテにならんね。済まぬ。
間違ってたらツッコんでくれ。
0856デフォルトの名無しさん2016/02/18(木) 11:05:45.49ID:dlsHUuTC
>>955
Cの省略記法が
*(address + index) = address[index]
ってなってるから
array[0], *(array + 0), *array
は常に同じ意味になる。

演算子オーバーロード?知らない子ですね。
0857デフォルトの名無しさん2016/02/18(木) 11:06:25.55ID:dlsHUuTC
955じゃなくて>>855だった
0858デフォルトの名無しさん2016/02/18(木) 14:02:28.82ID:OJ9pcQIt
>>853
ごく稀に違うことがある。GCCの拡張機能だしどうでもいいけど
http://melpon.org/wandbox/permlink/HHiSa06qnoFym74G
http://melpon.org/wandbox/permlink/MaLi9c5ZzaiFAqGK
0859デフォルトの名無しさん2016/02/18(木) 17:09:02.69ID:+9j/40fE
質問なんですが特定の操作をしたらバグを起こすようなコードを
書いたらどうなるのか考えてみました。例えばCの組み込みで考えると
クーラーの温度を18°にした状態から26°にしてその後24°にしたら
表示が24°にも関わらず18°の風が出るようになる
こういう迷惑なコード書かれていた場合ってどうやって検出するんですか?
ブラックボックステストだと網羅できない気がします。
Cにそういうコードまで検出するような開発環境ってあるんでしょうか?
0860デフォルトの名無しさん2016/02/18(木) 17:09:39.99ID:+9j/40fE
別に意図的じゃなくても
ある条件で誤動作をするようなコードを製品にした段階で
残したままにしてしまった事もあると思うんです。
0861デフォルトの名無しさん2016/02/18(木) 17:16:46.27ID:lABVi1X/
それやってpentiumが全品回収になった
0862デフォルトの名無しさん2016/02/18(木) 17:47:00.02ID:uosgYTqQ
イースターエッグのことですね
Excelのイースターエッグは有名ですね
95 → https://www.youtube.com/watch?v=nwg9eLHZZRo
97 → https://www.youtube.com/watch?v=-gYb5GUs0dM
2000 → https://www.youtube.com/watch?v=unkKO2BY9TU
自分はExcel97のイースターエッグが好きでした
マイクロソフトの職場って楽しそうで良いですね
0863デフォルトの名無しさん2016/02/18(木) 18:47:57.83ID:hH2RoOce
違うだろ読解力無いのか
仕様外の動作を検出するテストについて聞いてんだろうが
0864デフォルトの名無しさん2016/02/18(木) 20:09:10.75ID:qb28fXgB
>>859
ブラックボックステストだと基本無理
その操作を3回繰り返した時だけとか、特定の日時のみとか、いくらでも条件増やせるし
なのでまともな会社はコードレビューとか、ホワイトボックステストとかやってる
そう言うコードは通常のテストでは通らないのでコードカバレッジの計測も有効
0865デフォルトの名無しさん2016/02/18(木) 20:32:37.77ID:csZ8WmW6
そういう動作をさせる人にやらせたのが・・・・
0866デフォルトの名無しさん2016/02/18(木) 20:52:35.95ID:0fagojS5
作った人間の思い通りに動かないとしても、機械にするとコード通りの動作してるだけで
機械に自動検出できるわけない。
0867デフォルトの名無しさん2016/02/18(木) 21:39:07.98ID:B5G89/jK
>>861
嫌な事件だったね・・・
0868デフォルトの名無しさん2016/02/18(木) 23:42:28.11ID:pF8TduzO
http://postd.cc/how-to-c-in-2016-1/

こんなモダンなソース見たことないんですが
githubのこんな流儀のプロジェクトあったら紹介してください
0869デフォルトの名無しさん2016/02/18(木) 23:47:24.22ID:pF8TduzO
自己解決

#include <stdint.h>

で検索したらいっぱい出ました
0870デフォルトの名無しさん2016/02/19(金) 06:12:54.61ID:tDicO6hX
>>864 で指摘されてる、コードカバレッジを計測するための
ツールを紹介してくれないかな。手軽に使えるものが好ましい。

関数単位ならGNUのgprofが頭に浮かぶんだけど、
細かい部分ではデバッグライトを埋め込むしか思いつかない。
0871デフォルトの名無しさん2016/02/19(金) 07:13:26.78ID:UoTVqCBs
>>870
GCC なら gcov でいいんじゃね?
0872デフォルトの名無しさん2016/02/19(金) 07:32:50.56ID:SyHnFeOw
intのバイト数が違うマシーンに移植するときどうするんだよ
08738702016/02/19(金) 07:36:03.71ID:tDicO6hX
>>871
まさにgcovがそのためのプログラムみたいね。ありがとさん。
gccの付属ツールだったか。

ツール名が分かっていれば使い方を検索するのは容易だけど、
逆引き(こんな機能のツールはないかしら)を見つけるのは難しい。
自分の環境に適合しないものも出てくるしね。
0874デフォルトの名無しさん2016/02/19(金) 08:26:30.01ID:UoTVqCBs
>>873
gcc コードカバレッジ
でググれば普通にでてくる
0875デフォルトの名無しさん2016/02/19(金) 08:53:19.63ID:MJre7f67
上上下下左右左右…
0876デフォルトの名無しさん2016/02/19(金) 09:09:12.93ID:oqk65wRo
最近思うんだが
何かトラブルが起こった時どうするの?みたいな考えは山のように浮かぶけど
プログラミングの細かい仕様のアイディアは全然思い浮かばない
こういう俺みたいなタイプってIT業界ではどんな場面で活躍できるんだろ?
0877デフォルトの名無しさん2016/02/19(金) 09:15:36.05ID:mSn4rtqx
>>876
スレ違いの話題を振るような奴は活躍できない
0878デフォルトの名無しさん2016/02/19(金) 09:19:19.43ID:i395RlVR
>>868
こいつ32bitから64bitへの移植とかやった事無い素人
0879デフォルトの名無しさん2016/02/19(金) 09:37:01.47ID:oqk65wRo
>>877
まぁそう言わないでください
いっつもここでは答える側ですよ僕も
0880デフォルトの名無しさん2016/02/19(金) 10:38:34.04ID:vBd4Joyl
読解力があるならいい方では
読めないから間違いを見つけられない人が多数
0881デフォルトの名無しさん2016/02/19(金) 11:26:02.90ID:eREs2hdb
>>876
マ板でやれ

ふわっとした物事の発想が得意なら企画とか向いてるんじゃね?
0882デフォルトの名無しさん2016/02/19(金) 11:40:24.51ID:cnIR4f5j
unsigned floatが存在しない理由ってなんですか?
0883デフォルトの名無しさん2016/02/19(金) 11:52:05.94ID:WNehkofW
整数で正だけに限定して得られるのは取り扱える値の最大値が
同じ記憶容量でおおきくできることだけど (同時に最小値も大きくなってしまうが)

浮動小数点表現で取りえる上限下限の値を支配してるのは指数部だろうし
仮数部を符号なしにして得られるメリットは たいしたことないからなんじゃねーの?
0884デフォルトの名無しさん2016/02/19(金) 12:44:37.80ID:c03fK/Bb
>>881
注意しつつアドバイスくれるとか
超良い人間ですねあなた

分かりました企画で就職します!
プログラミング好きだけど組むとなったらやたら時間かかって
0885デフォルトの名無しさん2016/02/19(金) 13:38:30.42ID:vBd4Joyl
短期で作れ人って少ないんだから、普通より上では
就職前にやりこんでおいたほうが吉かも
0886デフォルトの名無しさん2016/02/19(金) 13:54:19.20ID:unMO5CFj
>>876
SE/プログラマでいいんじゃね
仮の設計をたたき台にして具体的に検証して改善出来るなら有望
0887870 == 8732016/02/19(金) 17:17:20.04ID:tDicO6hX
>>874
確かに「コードカバレッジ」だけをキーワードに検索して
Wikipediaの「コード網羅率」のページを開き、
外部リンクのツール(フリーなもの)の項を見ればgcovにたどり着けた。

「ちっとは自力で調べろや」と言われても仕方ない有様だったわ。
いや、お恥ずかしい。
0888デフォルトの名無しさん2016/02/19(金) 19:31:19.70ID:unMO5CFj
言語組込みのDならもっと手軽に
0889デフォルトの名無しさん2016/02/19(金) 19:54:18.78ID:xsNKFu6i
プロの人でも参考書見たりググったりしながら書くもん?
0890デフォルトの名無しさん2016/02/19(金) 20:03:00.04ID:eREs2hdb
何をもってプロとするかにも依るけど
まっさらな所から何かコードを書くときはググりながら書くかな
0891デフォルトの名無しさん2016/02/19(金) 20:13:45.97ID:unMO5CFj
コピペ継ぎ接ぎしないと書けませんという意味ならはっきりNO
0892デフォルトの名無しさん2016/02/19(金) 20:37:39.81ID:YxSgZRHQ
コード補完機能(インテリセンス)がないともう書けましぇん…
0893デフォルトの名無しさん2016/02/19(金) 21:59:23.86ID:O+q3yGey
>>889
日頃使ってる C/C++ は滅多にググったりしないけど、今日久々に Python 使ったのでググりまくった
0894デフォルトの名無しさん2016/02/19(金) 22:31:43.55ID:xsNKFu6i
ほーん参考になりましたわ
おいおい覚えてこ。。
0895デフォルトの名無しさん2016/02/19(金) 22:39:52.84ID:TH2A1UYk
この業界って、読みにくいコードとドキュメントを見て、即座にどの辺りか問題を切り分けられる超人的な理解能力と技術が備わってる人が仕切ってるのに、なぜ障害対応で明け暮れてるんですか?
0896デフォルトの名無しさん2016/02/19(金) 23:13:46.93ID:jQ6CZKbb
>即座にどの辺りか問題を切り分けられる超人的な理解能力と技術が備わってる人が仕切ってるのに
ここの認識が間違ってるから。
0897デフォルトの名無しさん2016/02/20(土) 12:22:14.20ID:7T2ACTsM
しょせん超人であって神ではないから
0898デフォルトの名無しさん2016/02/20(土) 12:33:55.27ID:3sA1dT+g
ひとくちに超人と言っても個々の超人強度にバラつきがあるから。

つうか >>895 の質問はネタお題だよね。
本当に知りたいならこのスレッドは不適かと(どこが適当かは知らないけど)。
0899デフォルトの名無しさん2016/02/20(土) 16:10:02.64ID:7iTe4rm9
>>897
日本で言う神は、超人も含む。
0900デフォルトの名無しさん2016/02/20(土) 18:39:44.13ID:lYQ0UjNJ
c言語でデザインパターンってないですけど
それって開発上で困らないんですか?
0901デフォルトの名無しさん2016/02/20(土) 18:41:03.47ID:WX8IzsC4
>>900
むしろC#にてデザパタ本がない七不思議
0902デフォルトの名無しさん2016/02/20(土) 19:02:22.14ID:owoJYL1y
デザパタ理解できてたら Java でも C# でもたいして変わらんから特にいらんでしょ
0903デフォルトの名無しさん2016/02/20(土) 19:15:28.09ID:OMpzR0PF
「D:\C言語」にある「test.exe」を起動するプログラムはどのようになるでしょうか
0904片山博文MZ ◆T6xkBnTXz7B0 2016/02/20(土) 19:18:11.12ID:md57KSoZ
>>903
system("D:\\C言語\\test.exe");
0905デフォルトの名無しさん2016/02/20(土) 20:04:18.18ID:OMpzR0PF
>>904
ありがとうございます!
0906デフォルトの名無しさん2016/02/20(土) 22:07:41.24ID:lYQ0UjNJ
ホームページビルダーみたいなGUIでホームページ制作するツールはあるのに
GUIでプログラミングできる環境がないのは何故?
0907デフォルトの名無しさん2016/02/20(土) 22:27:14.42ID:cc/ImfAV
アルゴリズムはWYSWYGと無関係だしな
0908デフォルトの名無しさん2016/02/20(土) 22:27:57.61ID:cc/ImfAV
俺に愛がないせいでIが抜けてた
0909デフォルトの名無しさん2016/02/20(土) 22:33:21.65ID:7rbbNzFw
ビジュアルプログラミング言語のことか?
0910片山博文MZ ◆T6xkBnTXz7B0 2016/02/20(土) 22:36:12.09ID:md57KSoZ
>>906
スクラッチ
スクイーク
0911デフォルトの名無しさん2016/02/20(土) 22:37:22.70ID:twWMzqJZ
【マウスだけで】C言語【プログラミング】
みたいな?
0912デフォルトの名無しさん2016/02/20(土) 23:17:07.65ID:hK4Y+Ytp
ないんじゃない
あるが実用的ではないので有名にならない

最終的なものを見ながらホームページを視覚的に作れるのは大きな利点だけどプログラミングはそうじゃないから
0913デフォルトの名無しさん2016/02/20(土) 23:44:24.33ID:y7w1zIcl
>>900
もしデザパタが無くて困ってるのなら、
デザパタを理解していない証拠だよ
0914デフォルトの名無しさん2016/02/21(日) 04:09:33.41ID:AMz/IHJU
C言語だけの知識から読み解くのはちょっときついかもね
0915デフォルトの名無しさん2016/02/21(日) 09:40:51.73ID:6FoMFdKR
>>906
ビジュアルプログラミング言語とかモデルベース開発とかでググってみれば?
0916デフォルトの名無しさん2016/02/21(日) 09:59:44.37ID:UzPMPT/j
結局C++の知識は多少はあったほうが良いと思った。
しかし久しぶりにCでコンパイルしようとしたらエラーが出まくった。
structとかvoidとかを書き忘れてたり。
0917デフォルトの名無しさん2016/02/21(日) 11:20:13.18ID:++cldRkk
c言語のプログラムが実行されるときってAdministrator権限フル活用してんの?
例えば7って入れないフォルダあるじゃん
0918デフォルトの名無しさん2016/02/21(日) 11:25:20.11ID:X8k91nqv
プログラムに制限を与えるのはOSの仕事だろ
0919デフォルトの名無しさん2016/02/21(日) 11:55:35.08ID:phEKpqeY
テストするときいつも管理者で
配布・運用後に一般ユーザーで動かすと動きまへんというのはよくやらかす
0920デフォルトの名無しさん2016/02/21(日) 12:57:38.35ID:pzpae+MZ
何のためのAPIだよ
09218592016/02/22(月) 10:34:37.72ID:FsdI40u2
コードカバレッジ???
コードを一つ一つみてもどういう役割を果たすか分からないと
意味なくないですか?

例えばこれはいらないだろうとかいう数行のコードとか
見分けつくんですか?
0922デフォルトの名無しさん2016/02/22(月) 10:46:43.11ID:jiaYaktK
いらないコードとかを判断して整理する行為はリファクタリング
0923デフォルトの名無しさん2016/02/22(月) 12:29:05.40ID:FsdI40u2
コードカバレッジとの違いは?
0924デフォルトの名無しさん2016/02/22(月) 13:10:42.53ID:JfDI0x9F
要るかどうかとコードカバレッジは関係ない
まずコードカバレッジの意味を辞書で調べろ
0925デフォルトの名無しさん2016/02/22(月) 15:25:01.69ID:NgPLLMlb
>>913
Cにデザパタ?

それはGoFの23個のデザパタを言ってるの?
Design Patterns: Elements of Reusable Object-Oriented Software

まさかCでもOOPできるとかそういうレベルの話をしたいの?
非OOPLで適用できる実用的なデザパタなんて思いつかないんだが
0926デフォルトの名無しさん2016/02/22(月) 18:07:19.84ID:y6o8tSrf
.hと.cのセットをオブジェクトとみなしてOOP。
externダメ絶対。
0927デフォルトの名無しさん2016/02/22(月) 18:42:37.43ID:JfDI0x9F
>>925
本質的なところはオブジェクト指向に依存しないでしょ
「継承を使った場合の○○パターン」というような実装例しか理解できてないの?
0928デフォルトの名無しさん2016/02/22(月) 19:51:31.36ID:WwV2mwuR
>>927
> 本質的なところはオブジェクト指向に依存しないでしょ

本質が何なのかは、俺にはわからないけど
GoFの23個は全部(?)オブジェクト指向を「前提」としてたハズでは?
手元の翻訳本にはでっかく
「オブジェクト指向における再利用のためのデザインパターン」
って書いてるよ
0929デフォルトの名無しさん2016/02/22(月) 20:00:09.18ID:WwV2mwuR
ちな序文から数行引用
「本書では、読者が少なくとも1つのオブジェクト指向言語を知っていること、
そしてオブジェクト指向設計の経験があることを前提としている。
我々が型やポリモルフィズムについて、あるいは、
実装の継承と対比してインタフェースの継承について論じたからといって、
ただちに近くの解説本に手を伸ばすようなことではだめである。」
0930デフォルトの名無しさん2016/02/22(月) 20:16:30.07ID:v4lNOwvr
>本質が何なのかは、俺にはわからないけど

ハイ撤収〜♪
0931デフォルトの名無しさん2016/02/22(月) 20:19:34.32ID:WwV2mwuR
「Cでデザパタ」の例を一個でいいから教えてよw
イテレータ当たりを言い張られてもつまらないので
それ以外で
0932デフォルトの名無しさん2016/02/22(月) 20:22:36.65ID:v4lNOwvr
デザパタの本質が何かわからない人には何言っても無駄
0933デフォルトの名無しさん2016/02/22(月) 20:23:48.76ID:WwV2mwuR
そうすか(´・ω・`)
0934デフォルトの名無しさん2016/02/22(月) 20:34:27.59ID:X9AMd52R
こういう議論って、結局のところ
「こうすればCにもGoFのデザインパターンを応用できる」
「それは○○の機能を使ってないからGoFのデザインパターンと呼べない」
みたいな言い争いになるんじゃないの?

煎じ詰めると「GoFのデザインパターンはオブジェクト指向に依存するか否か」という
元のお題に対するそれぞれの見解を、表現を変えて主張し合う水掛け論に至ると。


その過程でデザインパターンに関する理解が深まるなら歓迎するけど、
きっと俺は前提知識が足りないだろうな。
0935デフォルトの名無しさん2016/02/22(月) 20:52:26.37ID:v4lNOwvr
ノイマン型の手続き型プログラミングは、究極的にはデータ構造とアルゴリズムしか無い
”デザパタも良く使うデータ構造とアルゴリズムをセットにしてOOP風に纏めたものにすぎない”
それ以上でもそれ以下でもない

ノイマン型コンピュータは、結局のところ、
・メモリにデータをどう配置するかというデータ構造、と
・CPU内部のプログラムカウンタをどう制御するか、という制御構造
しか無い
この二つをパズルのように組み合わせて色々する

これはノイマン型コンピュータの仕組み、ハードウェア由来だから
ノイマン型であれば、何処まで行っても、デザパタだろうが何だろうが
本質はデータ構造とアルゴリズム、色で言うところの三原色

オブジェクト指向だとか関数型だとかいろんな方言が有るが
データ構造とアルゴリズムをオブラートに包むときの表現方法の違いで色々あるだけ
一皮むいたらデータ構造とアルゴリズムが出てくる
当たり前、最終的には機械語なんだからな
0936デフォルトの名無しさん2016/02/22(月) 21:01:52.33ID:7CRrT+ID
そもそも組み込みCプログラマって40歳以上が多いんだってね
そういう人達にとっては古くからのプログラム方法のほうがいいんじゃないかね
web業界はアジャイルだのオブジェクト指向だのデザパタだのどんどん新しい
概念が必要だと思うけど組み込みの場合は30年以上前のプログラミング手法だと思うんだけど違う?
俺は将来組み込みプログラマになりたい、伝統の技を継承したいと思ってる。
偉そうに書いてすいません。
0937デフォルトの名無しさん2016/02/22(月) 21:06:08.08ID:y6o8tSrf
デザパタとは名前を付けて再利用を容易にした方法論。
OOPとは限らない。
0938デフォルトの名無しさん2016/02/22(月) 21:07:18.89ID:7CRrT+ID
まさか組み込みは最先端とか関係ないよね?
組み込みは設計(電機電子計卒の仕事)がプログラミングみたいなもんでwebプログラマみたいに
SEを兼ねたりしないイメージなんですが…
0939デフォルトの名無しさん2016/02/22(月) 21:08:49.31ID:v4lNOwvr
つまりお前らは普段、方言の違いでもめているに過ぎない
東京弁と関西弁と関西弁で、表現力について揉めているだけ
ケンミンショーを開催しているだけ

プログラミング言語がいっぱいあるのは、データ構造とアルゴリズムを
効率的に表現することにおいて、得手不得手や個人の趣味が有るからでしかない

何が何だか分からなくなったら何時でもデータ構造とアルゴリズムに分解して考えればよい
プログラミングの本質、原子であり、2大要素で、これ以上の分類は意味が無いし、それ以外の要素もない
データ構造は空間であり、制御構造は時間と考えても良いし
データ構造は名詞で物体的、制御構造は動詞で”間”、と考えても良い
ノイマン型においてはな!
0940デフォルトの名無しさん2016/02/22(月) 21:44:58.68ID:HRZm6+Gd
メーカーとか将来性ないから辞めとけ
これからはソフトウェアの時代
日本のメーカーはハードウェアのことしか知らない
先細りは目に見えてる
0941デフォルトの名無しさん2016/02/22(月) 22:12:24.02ID:v4lNOwvr
日本がハードウェアに力を入れるのは当たり前
定期的に壊れて買い替え需要が有るし
「物質」なのでリンゴやナスと同じで普通の商売ができるから
ソフトウェアではアメリカに勝てないのがもうよく分かったから
消去法でハードウェアに力を入れているだけ
仮に日本製ソフトが海外でバンバン売れまくるなら各社力を入れるだろうが
アメリカに勝てるわけないからハードとセットにして売っているだけ
あとはアメリカ製ソフトを組み合わせて、顧客の要望に合わせて
プログラムという名のカスタマイズして売っている状況
他は日本固有の土着性の強いパッケージソフトを作って売るとかな
0942デフォルトの名無しさん2016/02/23(火) 00:21:55.54ID:Od+jz+2u
【ワカヤマン】C言語プログラミング能力認定試験 [無断転載禁止](c)2ch.net
http://hanabi.2ch.net/test/read.cgi/lic/1454165737/
0943デフォルトの名無しさん2016/02/23(火) 01:40:39.07ID:c6FJPsMP
Cはハードに近い言語だけど、ソフトとハードが喧嘩してたら良い物は作れないよやっぱり
0944デフォルトの名無しさん2016/02/23(火) 02:10:47.83ID:CsrYKjCu
>>938
組み込みはWebアプリより遥かに範囲が広いよ。
それだけに、トップレベルの必要スキルは高いから、大抵の者が就ける仕事は互いに似たような小型家電になりがち。
0945デフォルトの名無しさん2016/02/23(火) 08:39:46.36ID:ODpICnBY
>>939
そのデータ構造と制御構造に、どうアプローチするかが高級言語の仕様。
アプローチの違いで揉めてるわけだよw
0946デフォルトの名無しさん2016/02/23(火) 09:28:15.21ID:wLklzJNq
スマホは組み込みではないと?
0947デフォルトの名無しさん2016/02/23(火) 09:50:59.33ID:sWvQpzuh
どこまで組み込み製品のプログラムか、というのも
近頃じゃ怪しくなってるよね。

昔ならそれこそ電気釜は電気釜の専用プログラム、
エアコンはエアコンの専用プログラムだったのに、
今はテレビでも録画機でも、試験用の外部装置をつければ
Linuxの汎用コンピュータ + 拡張デバイスになってたりするもんな。

電話機はもう、小型のPC(通話機能つき)じゃろ。
0948デフォルトの名無しさん2016/02/23(火) 12:19:34.35ID:+453XExT
Cはオワコンもう誰も使ってへん
0949デフォルトの名無しさん2016/02/23(火) 12:26:32.18ID:P5/V/4Is
それは引きこもってるお前の家の中での話か?
0950デフォルトの名無しさん2016/02/23(火) 12:34:29.25ID:570jH2Wu
そもCはコンテンツじゃないからな
0951デフォルトの名無しさん2016/02/23(火) 12:37:50.18ID:+453XExT
ハード屋の奴隷のCプログラマには何のクリエイティブ性もねえわ
仕様はハード屋が設計した時点でほぼ決まってしまっている
ハード屋の設計ミスで納期遅れ出ても後工程であるソフト開発にしわ寄せがくる
ハード屋がやりたくないデバッグ作業をソフト屋に押し付けられるだけ
オシロスコープと半田ごてなんか使ってて何がソフトウェア技術者なんや
俺は天才プログラマーになりたかったんや
0952デフォルトの名無しさん2016/02/23(火) 12:40:10.94ID:570jH2Wu
Cできりゃ他の言語も作りやすいんだから天才ならそういう方向で頑張れば?
0953デフォルトの名無しさん2016/02/23(火) 12:41:17.93ID:ODpICnBY
またオシロスコープと半田ごてに殺されそうになった人か。
0954デフォルトの名無しさん2016/02/23(火) 12:42:44.79ID:ixoIfLlt
https://youtu.be/8uhgIJCFOQw
0955デフォルトの名無しさん2016/02/23(火) 12:43:25.81ID:+BhKz6nj
クリエイティブとは何かね
0956デフォルトの名無しさん2016/02/23(火) 16:47:23.82ID:ixoIfLlt
clockで2つの処理時間のあるループの実行速度を比べるとどちらのループを先に実行したかによってのほうが
実行速度の差が反対になるほどなんですけど原因はなんですか?
0957デフォルトの名無しさん2016/02/23(火) 16:54:43.86ID:TTnQy7CB
実行した二つのループのソースをそれぞれ晒して
0958デフォルトの名無しさん2016/02/23(火) 16:59:41.96ID:ixoIfLlt
gcd(int a , int b)
{


}
0959デフォルトの名無しさん2016/02/23(火) 17:03:49.26ID:ixoIfLlt
gcd(int a , int b)
{
while(b!=0
{
a%=b;
if(a!=0)
b%=a;
else
return b;
}
return a;
}

gcd2(int a , int b)
{
int temp;
while(b!=0)
{
a%=b;
temp=a;
a=b;
b=temp;
}
return a;
}
晒しました。
0960デフォルトの名無しさん2016/02/23(火) 19:26:36.07ID:I91l52v4
単純に誤差じゃね。タイマーの精度に対して実行時間が短すぎるとか
ループで何回も処理させて精度以上にちゃんとしてる?
0961デフォルトの名無しさん2016/02/23(火) 19:39:23.00ID:ixoIfLlt
30秒回し続けたらわかりました
0962デフォルトの名無しさん2016/02/23(火) 20:04:25.54ID:4yRoVbnK
リファクタリングについて質問します。
このコードは不要なコードとかってどうやってわかるんですか?
例えば使われてない変数x=funciton();があった場合でも実は
必要なケースもあるかもしれないしどうやって判断してるのかなと
0963デフォルトの名無しさん2016/02/23(火) 21:39:48.24ID:9Kr7JMr6
Visual Studioみたいな統合開発環境ならビルド時に教えてくれる
不要なコードはコメントアウトしておくか、消して必要なときにまた書くか
0964デフォルトの名無しさん2016/02/23(火) 22:12:51.71ID:I91l52v4
xがローカル変数でそれ以降代入の左辺以外に使われていなければx=は不要でしょ
ポインタを介して参照されてることもあるので注意は必要
C++だと代入もoperator=があるので不要かどうか判断しにくい
int x; int* p; p=&x; x=function();
foo(p);←こういう場合はx=を消しちゃダメ
return;
function();が不要かどうかは優秀なプログラムかプログラマにしかわからない
functionがグローバル変数や引数の書換、副作用のある処理をしていなければ不要だが
それをプログラムで検査するのは大変
だいたいはプログラマが目で追って確かめることになる
0965デフォルトの名無しさん2016/02/24(水) 08:31:59.00ID:FlUhpr/T
「リファクタリング」を冠したスレッドもあるじゃないか、と
ちょっと読んでみたけど、あんまり活発じゃないのね。
0966デフォルトの名無しさん2016/02/24(水) 08:35:24.04ID:X0nmP2Wx
オブジェクトファイルをリンクするときプログラムで一回も使わない関数はリンクのときに捨てさられてプログラムのサイズは縮小されますか??
0967デフォルトの名無しさん2016/02/24(水) 08:38:39.51ID:fFFtJP7c
ネスト構造が
for()
{
for(){}
for(){}{}for()
}

みたいに改行せずに書いてあった場合
構造を読み取るのはプロでも至難の技ですか?
仮に他人が書いたコードがforが2一つの構造で20個以上
使われてるのにこういう改行無しの場合
まずプログラマはどうするんでしょうか?
0968デフォルトの名無しさん2016/02/24(水) 09:03:54.80ID:TNtOGmLO
>>966
環境依存

>>967
読みやすいかどうかはちゃんと実際のコードを見ないとわからない
見映えを直したいなら、cb(1)とかindent(1)とか
0969デフォルトの名無しさん2016/02/24(水) 09:13:27.42ID:fFFtJP7c
見映えを直すってよっぽど優秀なコンパイラじゃないと無理じゃないんですか?
あまりにも複雑なら勘違いしそう
0970デフォルトの名無しさん2016/02/24(水) 09:39:47.53ID:mma8Yghl
コンパイルで見栄えとか何言ってんだ
フォーマッタ使えばいいだろ
0971デフォルトの名無しさん2016/02/24(水) 09:49:55.99ID:TNtOGmLO
>>969
indentぐらい入ってないの?
0972デフォルトの名無しさん2016/02/24(水) 12:05:20.93ID:8JHYf/gB
まさか手動??
手動でやるってことは構造を解いていくからできるのであって
自動でインデントやってくれる機能ってないんでしょうか?
0973デフォルトの名無しさん2016/02/24(水) 12:22:51.75ID:JjoY/fea
構ってちゃんかよあまりにも低レベルすぎ
入門レベルの奴は書き込むなよ
0974デフォルトの名無しさん2016/02/24(水) 12:34:06.37ID:9j05QFbc
(入門編なのに…)
0975デフォルトの名無しさん2016/02/24(水) 13:12:38.54ID:FY1/e+a3
入門者でも2つ3つ前のレスくらい読めるしググれるだろうよ
0976デフォルトの名無しさん2016/02/24(水) 17:06:34.87ID:FlUhpr/T
慌てているのか知れないが、このところ意図が分かりにくい
(要するに日本語が壊れたような)質問が多くないか。

「書き込む」の前に、入力した文章を読み直して、
疑問点が伝わる内容か確認した方が、より適切な回答を得られると思う。
0977デフォルトの名無しさん2016/02/24(水) 19:44:04.95ID:T2ZiLr9a
俺が思うにindent(1)の(1)の意味が分かってないんだよ
初心者でLinux使いなんてあんまいないし
詳しくは知らないがManpageの種類の番号
で(1)はユーザーコマンドのことでようは普通のプログラムの名前って意味ね
Windows移植版もきっとどっかにあるよ
0978デフォルトの名無しさん2016/02/24(水) 19:51:35.91ID:+rjhOBbM
>>969
いやいや,見栄えを直すのは実は思ったより簡単なんです
0979デフォルトの名無しさん2016/02/26(金) 06:56:03.56ID:bmAp+C+z
https://www.youtube.com/watch?v=Na_oFweYBnc
こういうアーケードゲームも組み込みの範囲内ですか?
C/C++でしょうか?
0980デフォルトの名無しさん2016/02/26(金) 17:31:26.51ID:9sT3sFGw
>>979
http://www.4gamer.net/games/116/G011678/20120828064/
この記事にアーケードを支えた組み込みエンジニアって書いてるから組み込みが多いのかも、言語は組み込みでならC言語が多くてアセンブリ言語もたまに使われるらしい
0981デフォルトの名無しさん2016/02/26(金) 19:16:21.24ID:z3yCzaKQ
最近の筐体はOS入ってる。
そのOSはC/C++が使われていると思うが
ゲーム自体はDirectXやOpenGLが使える言語ならどれでもいい。
0982デフォルトの名無しさん2016/02/26(金) 21:00:44.28ID:bmAp+C+z
一昔前はC主流たまにアセンブリで最近はOS入れてDirectX/OpenGLが主流ということですか
ということは組み込みの潮流と同じですね
0983デフォルトの名無しさん2016/02/26(金) 21:04:25.89ID:3qM7nJI0
>>961
最適化がかかると結果がどうなるかは全く予想できん
逆アンブルを読んでみるしかない
0984デフォルトの名無しさん2016/02/26(金) 21:10:09.82ID:5zWIUITe
>>982
全然違うだろ
DxはAPIなんだから言語えらばねーよ
0985デフォルトの名無しさん2016/02/26(金) 22:13:00.21ID:bmAp+C+z
>>984
どう違うのか説明してよ
0986デフォルトの名無しさん2016/02/26(金) 22:51:16.87ID:H4BtjcEZ
>>985
マジで言ってるなら、まず組み込みとは何かを調べた方がいいよ
0987デフォルトの名無しさん2016/02/26(金) 23:06:47.38ID:bmAp+C+z
>>986
俺はC/AsmからOS+αの流れを把握して勝手に納得したわけだが
なんでAPIの話しになるんだ?
0988デフォルトの名無しさん2016/02/26(金) 23:11:06.91ID:oP1C7qwm
wiki 組み込みシステム
ttps://goo.gl/X0z6DS
0989デフォルトの名無しさん2016/02/26(金) 23:16:45.43ID:oP1C7qwm
そもそもDirectXやOpenGLが動く環境は汎用OSで組み込み系じゃないと思う。
0990デフォルトの名無しさん2016/02/26(金) 23:56:39.52ID:Fu7p+6vG
Quadro突っ込んである意味不明なLinuxルータがあるかも知れんぜ?
0991デフォルトの名無しさん2016/02/27(土) 00:27:46.50ID:oo0AZpTu
組み込みの仕事やってみたいお...
ハードとソフト両方使えるなんていいなぁあぁああぁ
0992デフォルトの名無しさん2016/02/27(土) 02:47:22.04ID:vqfa5BWx
ほんとに理解したいなら電子回路からやらないと駄目だよ
ソフトから入った人間は大抵中途半端
0993デフォルトの名無しさん2016/02/27(土) 03:17:03.89ID:oo0AZpTu
半田付けでさくらんぼ作ったことならあります
0994デフォルトの名無しさん2016/02/27(土) 03:41:56.38ID:oo0AZpTu
いや、ブレッドボードとC使ってArduino動かしたことぐらいならあるけど
基盤作って組んだりしてる大学生とか見ると羨ましくなる
こっちは半田付けでさくらんぼ作ってたのにぃぃぃぃいいい
0995デフォルトの名無しさん2016/02/27(土) 09:48:59.83ID:GGk6IaQQ
>>991
もし経験がPCのみなら、Raspberry Piくらいからトライすると良いと思う。
0996デフォルトの名無しさん2016/02/27(土) 09:55:21.70ID:qE5vqaqG
Arduino使ったことあるのなら大丈夫だろ
ブレッドボードで何を組んだのか分からんけど…
0997デフォルトの名無しさん2016/02/27(土) 11:50:31.67ID:fjoQxCAd
電子回路ってどの程度やるの?普通にTTL/C-MOS ロジックゲートが使えればいいレベルでいいの?
0998デフォルトの名無しさん2016/02/27(土) 14:26:48.36ID:gGvU6VKE
論理回路が読めることは必須かな
0999デフォルトの名無しさん2016/02/27(土) 14:37:27.40ID:fjoQxCAd
え,ラダー図やらんといかんの?
1000デフォルトの名無しさん2016/02/27(土) 14:52:13.54ID:tGnOxt/H
君は別にやらなくてもいいよ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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