1 :
デフォルトの名無しさん :
2014/03/05(水) 05:32:47.63 ないから立てた
質問です func() { static char *p2; p2=malloc(3); func() } 実行すると、p2はどうなりますか?
よくわからんけど住み分けてたんでしょ? この板で1ヶ月足らずで消化するとか尋常じゃねえし
ぬるぽ
>>3 ケース1
1 スタックが尽きて異常終了する
2 mallocがNULLを返し、p2がNULLになる
1と2のどちらが先に発生するか環境依存
ケース2
スタックは一周する。尽きないがmallocの管理している領域を壊す、その結果
1 異常終了する
2 何らかの意味のないポインタ値が無限に代入され続ける
ケース3
スタックは一周する。尽きない。mallocの管理している領域とは分離されている
NULLが無限に代入され続ける
スタックが一周するってどういう環境?
8086
このケースならfunc()をサブルーチンコールするのではなくて分岐命令になるのではないのかな
10 :
デフォルトの名無しさん :2014/03/11(火) 07:04:42.83
ゲームの当たり判定って四角形のほうがいいですか? 円だと二乗の計算が出てくるから重い気がするのですが
11 :
前スレ997 :2014/03/11(火) 07:06:29.38
ありがとうございました!
12 :
デフォルトの名無しさん :2014/03/11(火) 07:08:37.30
C言語で絵入りQRコードを作るにはどうしたらいいですか? QRコードの色を部分的に変えるだけのやつではなく 真ん中にアイコン入れたりしてあるやつです
誤り訂正レベルを高くして作ったQRコードに無理やりかさねる 許容される大きさとかは実験的に調べる
14 :
デフォルトの名無しさん :2014/03/11(火) 16:51:18.35
TCP/IPの通信プログラムについて質問です。 接続の時は、open()=SYNを送るという動きっぽいですが、 「close()=FINを送る」ではないのでしょうか? ステップ実行しながらWireSharkで通信見てた所、 close実行まえに勝手にFINが出ちゃう気がします。
15 :
デフォルトの名無しさん :2014/03/11(火) 16:52:01.67
大きいデータ読み込むときどうすればいいですか? char[1000000][32]の配列を作りたいんですが
>>15 char *array[32];
for (i = 0; i < 32; i++) {
array[i] = malloc(1000000);
}
>>14 タイムアウトしてるとか、相手から RST くらってるとか
19 :
デフォルトの名無しさん :2014/03/11(火) 20:03:27.11
質問です。 100 - ( 2 * ( 3 + 1 ) ) * 4 + 45 / ( 17 - 8 ) この式をC言語で計算するにはどうしたらいいでしょうか。 この式は文字列として与えられます。
double calc_str(char *str) { return 100 - ( 2 * ( 3 + 1 ) ) * 4 + 45 / ( 17 - 8 ); }
しくった.0にしていない
と思ったけどこの計算ならintでよかったな
23 :
片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/11(火) 23:05:57.02
>>19 逆ポーランド変換
www.logical-paradox.org/ja/nsxbasic/nsxbasic3.html
C言語ってなんだよ、Cだろ。
自己参照構造体の延長?で 構造体(親)の中にある構造体(子)の要素に 親の構造体のアドレスを格納したいんだけど 下の書き方だとコンパイラにBASE_BLOCKが無い的な感じではじかれしまう 今の所 void* で親の構造体をポイントして動かしているんだけど 自己参照構造体みたいに うまいtypedefの書き方って何かないですかね? 構造体@ typedef struct{ void *blk; // 現状 // BASE_BLOCK *blk; // 構造体Bへの参照(こんな感じにしたい) char a,b,c; } DATA1_BLK; 構造体A typedef struct{ void *blk; // 上と同じイメージ // BASE_BLOCK *blk; long a,b,c; } DATA2_BLK; 構造体B typedef struct _BASE_BLOCK{ DATA1_BLK d1; DATA2_BLK d2; struct _BASE_BLOCK *next; struct _BASE_BLOCK *before; } BASE_BLOCK; // typedef はここ
出来そこないのプログラマが自慢大会するスレはここですか?
>>27 貴重な時間を使ってまで糞コードを考えるなんて
常人にはできないやりかた
とりあえずgcc-3.4.4ではこんな感じで大丈夫だった typedef struct _BASE_BLOCK BASE_BLOCK2; //二重定義にならないよう別名 typedef struct{ BASE_BLOCK2 *blk; char a,b,c; } DATA1_BLK; typedef struct{ BASE_BLOCK2 *blk; long a,b,c; } DATA2_BLK; typedef struct _BASE_BLOCK{ DATA1_BLK d1; DATA2_BLK d2; struct _BASE_BLOCK *next; struct _BASE_BLOCK *before; int a; } BASE_BLOCK;
あ、自分で追加したint aが残ってた
>>30 また誰も得をしないオナニーコードを書く狂人が現れた
オワコンCプログラマはこんなところでオナカキコしても誰も見向きもしない
気持ち悪いだけだからム板から出ていけ
これがエラーになる(C89以降の)コンパイラは見たことないし、仕様を満たしていない。 typedef struct hoge hoge; typedef struct hoge { int hoge; } hoge;
>>33 まーたhoge厨か
ゴミプログラマがよく使う記号だよな
>>33 みたいなゴミ老害がのさばっていいスレじゃないからこのスレから出ていけ
35 :
デフォルトの名無しさん :2014/03/18(火) 10:27:53.77 ID:RDFvC1WB
釣れた。やはり荒らしてるのはアンチhogeのチョーセン人だったか。
struct のタグ名 typedef 名 構造体のメンバ名 一番最後の衝突は(本能的にNGな感じだけど)考えたことはないな
>>35 hogeを使う輩は例外なく老害ゴミプログラマ
C関係スレは書き込み時間帯がおかしすぎる
仕事してない人たちばっかりだね、老害スレはム板にとって不吉な存在なので
削除したほうがいい
てめぇが自分の存在を削除すれば解決!
40 :
デフォルトの名無しさん :2014/03/18(火) 12:37:19.68 ID:RDFvC1WB BE:1306355472-2BP(1000)
こっちの方がより適切だな typedef struct hoge hoge; typedef struct hoge { hoge *hoge; } hoge;
低能はとっとと帰んなさい
自己紹介しないで
自己紹介しかしてないバカが何言ってるの?
> 時間帯がおかしすぎる > 仕事してない人たちばっかりだね、老害 これも自己紹介だったみたいだねw
連投荒らしはuyかQだろうな 他にいねえよ
hogeしてる奴らは周りに迷惑かけてるのがわからないのか
君もほげとかぴよとか使っていいんだよ(太っ腹)
>>47 あ、これでわかった
お前精神科まだ行ってなさそうだからQじゃなくてuyだな
>>47 お前の存在そのものが周りに迷惑を掛けているのが分からないのか
>>51 迷惑かけているのは間違いなくhoge厨です
おまえが間違ってるから
aとかbとか使うやつに比べりゃ数倍良いと思うんだが>hoge
ゴミが主張してるだけだから
hoge使う奴ってほんとhogeしか使わないし凄い不快
何が彼をここまでこじらせてしまったのか?
響きが気持ち悪いよねhogeって これに固着する意味がわからん
知るかボケw 要するにゆとり世代だからじゃねーかw
お前の頭に「固着」してるんだよw
頭にhogeがこびりついてとれないんだな哀れ
自己紹介か?
hoge厨は何から何までhogeで表現するからキモがられる hogehogeまで使ってくるしな
オワコン人間が10もレスを投下して楽しい?
何も言えないのかなw
どうしたの?hogeしたいの?
想像力も、現実を知る力も、欠片もないんだなw
意味不明なゴミ書き込みを排泄するドカた以下のゴミは黙れよ
人生ノーグッドのバカ荒らし君は今日も元気かな?
相変わらずCスレはニートタイム全開でレスがつきますね このスレの異常性がうかがえますわ
ニートパワー全開で嫌がらせレスを書き込み続けている異常者が何を言ってるの?
ろくにコードすらかけないCグラマーは相変わらず抽象概念でしか物を語ることが出来ないね
まともな抽象化すらできないバカが何か言ってるw
存在する意味が無いから安心して消えていいんだよ?
アハハハハ、自己紹介がうまい Cスレで煽ってくる奴等ってなぜか罵倒してるつもりが自分にはね返ってるよね 自噴のCの実力の劣等感から生じる衝動だと思うけどみっともないから止めたほうがいいと思うよ
これぞ自己紹介。 全部自分に跳ね返ってるから、生きるの止めた方がいいと思うよ。
hogeって響きが嫌なら、尚更hogeの役割を果たせてるってことで完璧じゃん 「実用のコードでは適宜書き換えてくださいね」って場所に使う識別子なんだから 嫌がられるくらいでなきゃ困るんだよ
いやhogeに執着してる奴はとことん執着してる しかも半端にうまいコードを毎回記述しようとしているから困る hogeはウンコードでなければなりません、臭くなければなりません hoge厨は住人の顰蹙を買うだけの不要な存在
> 住人の顰蹙を買うだけの不要な存在 これまた見事な自己紹介だなwwwww
81 :
デフォルトの名無しさん :2014/03/19(水) 21:42:03.76 ID:0SFSV+5e
そりゃー チョーセン人ですから
深夜3時にレスをバカにする超絶暇人バカは今日も暇なのかな
2ちゃんねるはお前の便所じゃねーんだよ。 必死にゴミを書き込むなカス。
Rubyスレ荒らしてるんじゃねーよカス だれもお前の意見なんて求めてないから消えろゴミクズ糞蛆虫
85 :
デフォルトの名無しさん :2014/03/23(日) 00:44:39.92 ID:ulVc1cS1
age
27です ヒントを元に調べてたら 「相互参照」と「不完全な型」辺りをキーワードにしたら 良い感じの答えにたどりつけました
-(IBAction)goNext:(UIbutton *)sender{ NSUInteger n; NSArray *arr = @[@0,@1,@2,@3,@4,@5,@6,@7]; for( n=4 ; n<8 ;n++){ label_1.text =arr[n]; label_2.text =arr[n]; label_3.text =arr[n]; label_4.text =arr[n]; } (ラベルはインスタンス変数で、宣言しています) これを実行するとarr[7]だけがラベルに表示されてしまいます。 初期値からn++されません。 理由はなぜなのでしょうか?教えてください。
>>87 先ず第一に、それはC言語ではない。
つまり、スレ違い。
第二に、やりたいことはループにする必要がないのではないか?
つまり、
label_1.text = arr[4];
label_2.text = arr[5];
label_3.text = arr[6];
label_4.text = arr[7];
ではないのか?
いずれにしろ、日本語の勉強も必要だな。
すみません。
配列のバブルソートなら void bubblesort(int a[], int n) { int i , j; int temp; for (i = 0 ; i < n-1; i++){ for (j = n-1; j > i; j--) { if (a[j-1] > a[j] ){ temp = a[j]; a[j] = a[j-1]; a[j-1] = temp; } } } } で出来ますが、 typedef struct person_tag { int age; char name[30]; char sex; } person; という構造体配列で person p_array[] = { {15,"Sayaka Iwata",'F'}, {25,"Ichirou Akagawa",'M'}, {10,"Ryoko Onoe",'F'}, {45,"Taichi Uemura",'M'}, {55,"Madoka Nomura",'F'}, }; とデータを入れてageの昇順に構造体配列をバブルソートするやり方教えて下さい。
int a[] ⇒ person a[] int temp ⇒ person temp if (a[j-1] > a[j] ){ ⇒ if (a[j-1].age > a[j].age ){
素早い〜 w ありがとうございました!
◎設問 : 何が出力されるか答えよ int main(void){ char *c[] = {"ENTER", "NEW", "POINT", "FIRST"}; char **cp[] = {c+3,c+2,c+1,c}; char ***cpp = cp; printf("%s", **++cpp); printf("%s ", *--*++cpp+3); printf("%s", *cpp[-2]+3); printf("%s\n", cpp[-1][-1]+1); return 0; } 答えはもちろん実行してみれば出力されるのですが、 なぜそのようになるのか分かりません (´・ω・`)
>>93 多分学校の問題か何かだろうけど、非常に筋の悪い設問。
意味の学習としては使えるかもしれないけどね。
配列の要素がメモリ上でどう確保されるかを紙に書いて
学習すればわかりやすい。でもC/C++のポインタ関連は
演算子の優先順位がわかりにくいので、そっちも調べる
必要がある。
リンクリストについて教えてください 構造体が typedef struct holiday { int ymd; //e.g 20140101 char holidayname[30]; //元旦 struct holiday *next; } holiday; という形であって日付を昇順になるように入れていくのは 直前の構造体のymd < 挿入するymd && 挿入するymd < 現在のymdの時に 直前の構造体のnextを挿入する構造体のアドレスにし、 挿入する構造体のnextを現在のymdの構造体のアドレスにする というやり方になる…んですよね?
そう設計したのなら、そうなんでしょうね。
>>97 その具体的なやり方を知りたいなぁと思ってるんですが。
とりあえず、あちこちのサイト見ながら作ったのが
http://codepad.org/0ppn3tBz ソースが汚いとか見にくいってのは勘弁の程を
でinsert_dateのところ 193 〜 198 で
//ここで日付の昇順になるようにつなぎ替える
p = head.next;
while( p != NULL ){
********************** ←ここの部分を教えていただきたいなぁと
p = p->next;
}
>>98 ごめん途中で投げ槍になったから突っ込まんでくれ、でも質問してくれていい
http://codepad.org/TR9iO06H 日付の昇順にしたい、ということで
リンクリストをたどる中で、はじめて
「入力したデータの日付」<「着目ノードの『次』のノードの日付」
となったら、着目リストの後ろに放り込む
でどうかな?
>>99 102行目などは、printfのあとscanfの前にfflushしないと表示されない
DOSだと出るみたいだけど
275行目 0はTermのほうがいい
>>99 98です。夜に付き合っていただき感謝。考え方もそちらのほうが単純明快ですね
ポインタのポインタとかなかなかまだそこまでいきませんが(言われれば、あぁなるほど…ではあるんですが^^;)
じっくりソースを見させていただき、自分なりにいじってみたいと想います。
103 :
デフォルトの名無しさん :2014/04/13(日) 22:28:58.63 ID:xpFiuadr
入門編じゃないC言語なら俺に聞け
ポインタを一言で表すとどういった言葉になりますか?
アドレス
指すもの
面接でポインタを説明してくださいと言われたら?
敵が襲ってきても守れます
ここまで猟犬なし。
110 :
デフォルトの名無しさん :2014/04/14(月) 19:25:49.85 ID:VLpr/JYL
>>103 「貴方がこの会社の面接に来られた理由を、ポインタを使ってわかりやすく
説明してください」
と言われたらどうする?
111 :
デフォルトの名無しさん :2014/04/14(月) 21:58:22.07 ID:M5Q2kr07
そっとドアを閉じて二度と開けません。
>>104 ひとことは、ムリだろ。ふたことなら…
p = &c;
*p = c;
114 :
デフォルトの名無しさん :2014/04/14(月) 23:33:43.66 ID:zoHFxkBT
116 :
デフォルトの名無しさん :2014/04/19(土) 09:56:41.40 ID:Cpm/BfcX
プログラマーの人に聞きたいけど、仕事の速さって優秀な人と そうでない人で1.5倍くらい差があったりするの?
>>116 余裕であると思う。
どんな尺度で測るかは難しいけどね。
開発期間だけで言えば、簡単なツールを10分で作れる人と丸1日かかる人がいる。
複雑なソフトになれば、そこに安定性と保守性という係数が入ってきて差はさらに広がる。
119 :
デフォルトの名無しさん :2014/04/19(土) 10:08:19.46 ID:Cpm/BfcX
>>118 でも丸1日かかるほうが残業代で稼げるとかそういう現状あったりする?
というかIT業界に入れたんだから丸1日が基準なのか10分が基準なのかは
どっちが正解か分からないね、10分で作れる人はよっぽど天才だったりす
るんじゃないだろうか?144倍の開発期間に差があるって中々ないような…
待遇と相談
>>119 うーん、残業代で稼げる現状も場合によってはあると思う。
でもね、重要な事を見落とさないで欲しい。
優秀な人は自分の力で時間を作り出せるという事ね。
残業代で稼ぐか早く帰るかの選択は優秀な人にしかできないって事。
ぶっちゃけ、優秀な人は嘘をついて工数を水増しできるチャンスがあるけど、時間を作れない人はサビ残を断れない。
>>119 あと、何もゼロから作る事が全てじゃないよ。
ゼロから作るのは遅くても、サッとコピペで作れればそれはそれで優秀。
コピペに限らず、コード流用できそうな事に気づけるか、流用しても問題ないか判断できるかってのも優秀さの一要因だよね。
この辺で10分と1日の差が出てくる。
会社に入ったらプログラミングがいっぱいできると思ってたのに 業務の9割がドキュメント作成・会議・検査などで、 ほとんどコードを書くことがない その上、技術技術言ってるやつは下に見られてて、 プログラマーなんかキーパンチャーだと思われてる プログラミングの経験を積んでベテランプログラマーになって 60歳になってもばりばりコードを書いていたいと思っていたのに もはやこの業界に居ても目指すべき俺にはなれないと悟ったわ
適切な言語を選べるかというのも有るな。 例えばだが。C++しか使えず、何でもC++でやろうとしている者に対して。 優秀な人は適切な言語を選んで短時間で済ませることが出来る。
コード書いてるって言ってるのはweb系かゲーム系だろ
126 :
デフォルトの名無しさん :2014/04/19(土) 11:25:47.96 ID:Cpm/BfcX
>>122 ありがとう
凄いんだね10分ってのは…
>>126 たとえばさ。
とある機能を改修するときに、
・手間はかかるけど、従来の機能を維持したまま新しい機能を上乗せする
・手間はまあまあだけど、従来の機能そのものに手を入れる
実際にいまのプロジェクトであったことなんだけどね。
よく考えもしないで下の方法で改修をやりやがって、あとから違うバージョン間での互換が問題になった。
上の方法では1日、下の方法では半日で作業が終わるとして、
後から問題になって何時間か会議して、調べて、上の方法で 違 う 人 間 が実装し直すとしてだ。
144 倍ほどの差は出ないとは思うけど、最初から上の方法で実装したときに比べてどれだけ時間を浪費しただろうね。
単純な作業時間だけでなく、目先にことにとらわれない冷静な判断力が必要になることも多いよ。
※ただし、場合によっては上の方法が過剰実装だといって怒られることもある
>>127 目先の楽さを選ぶ傾向って結構多いよね。
で、それで痛い目を見た人は過剰包装に陥りがちなのも確かだと思う。
その間にある落としどころを見つけられる人って少いよね。
カレントディレクトリを知るのに windowsでは、 currentdir.c #include <stdio.h> #include <string.h> #include <windows.h> int main(int argc, char* argv[]) { char curdir[256]; GetCurrentDirectory(sizeof(curdir),curdir); printf("Current Directory : %s\n",curdir); return 0; } 結果 D:\Data>currentdir Current Directory : D:\Data で、出せたんですけどここで windows,.hを使うってことはwindows専用ですよね、これ。 じゃ、windowsが出る前(dosの時)はどうしてたのか? unixやlinuxでも使えるようにはならないの?って疑問が。
INT 21H、AH=47H とか getcwd, getwd, get_current_dir_name・・・とか
dosはDOS Service Call(int 21h)で取得してた unixやlinuxではそういうシステムコールは無かった。procfs以前の実装方法を知ったらびっくりするぞ。
C言語の仕様にはディレクトリという概念自体が存在しないからな MS-DOS 1.0 の頃とかディレクトリがないんだっけ?
フロッピー1MB行くか行かないかの時代にそんな無駄なものはいらん、いらんのじゃ
昔のUNIXって、サーバもフロッピーだったのか
135 :
デフォルトの名無しさん :2014/04/19(土) 15:09:44.33 ID:LlSFsJPl
CPUに積まれてるFPGAの集積度が年々上がってるのは何故ですか? 何故HDDのメモリは無尽蔵にあがるのに、例えば10TB外付けなどです。 メモリ(キャッシュメモリ、メインメモリ)は中々上がらないのですか? いくらHDDのメモリ容量があがっても、実行速度に影響するメインメモリ やCPUの容量が上がらないとダメな気がするのですが、HDDは集積化しや すくてメインメモリはしにくいのですか?
>>135 キャッシュとメインメモリを一緒くたにされちゃ話が進まん
>>135 CPUに積まれてるFPGAって組み込み用のCPUのこと?
HDDのメモリってSSDのこと?
何を聞きたいのかよくわからんが、なぜ、一般的にHDDの方がメモリより大容量なのか
ということなら、コストの違いだろう。
その結果、遅いけど容量の大きいストレージと、速いけど容量の少ないメモリを
組み合わせてシステムを作るのが最適になる
>>137 まぁ一緒のものとして
何故メインメモリは集積度があがらないんですか?
HDDは32MB→10TB およそ30万倍
メモリは 32MB→32GB
およそ1000倍
何故ですか?
何故HDDも早くしないんですか?そうしたらページングみたいな手品 みたいなことしなくても、そのままメモリとして使えるじゃないですか
HDDはディスクという方式のため遅くなるが、先読みなど速くなるよう工夫されている。 また、たいていのUNIX系のOSなら、mmapでそのままメモリと同様に使えるようになっている。
考え方が間違っている 遅いんじゃなくて 速くなったらなったで無駄遣いするヘボが現れるから遅く感じるだけ ヘボを駆逐しない限り戦いは終わらない
>C言語の仕様にはディレクトリという概念自体が存在しないからな うへぇそうなんだ。
>>132 すでに AT&T の時代に UNIX はその大半を C で記述されていたんですけれども
ディレクトリという概念だけでなく、 ドライブという概念まであるMS-DOSは、 UNIX の一歩先を逝っているのかw
>>145 portal fs もいまいち‥‥,事例を知らないだけかもしれないが
なぜ「先」だと思ったのか分からん
>>135 CPUにFPGAは積まれていません。
FPGAはプログラマブルゲートアレイ。簡単に言うとゲートの配線を
プログラムで書き換えられるチップのこと。
CPUは配線をプログラムで書き換えることは不可能。
>>149 あれ?FPUバグペンチアムの教訓から一部にせよ不可能じゃなかったっけ?
ちなみにDRAMの速度が遅いのは構造が簡単で大容量化 しやすことのトレードオフ。 キャッシュメモリが1bitを5トランジスタで構成するのに対し、 DRAMは1トランジスタと1コンデンサで作れる。 ざっくり言うとキャッシュメモリはDRAMの5倍コストが高い。 8GBのDRAMモジュールが今だと15,000円ぐらいだけど 同じ容量で75,000円もしたら誰も買わないでしょ。
>>150 マイクロコードの書き換えをFPGAというのは解釈が間違ってる。
>>123 お前がいくつか知らんが、見切りつけるなら早い方がいいぞ
>140 どのレベルまで速くして欲しくて、 どうやったら出来るか技術的根拠を示してくれ。
>>139 市販車の最高速度だって、昔から300km/hくらいだろう
HDDの容量が30万倍になったからって、世の中のすべてのものが30万倍になるわけじゃないんだ
HDDは大容量で安い分、物理ディスクがぐるぐる回ったりするラグがあるからね しかも、メモリみたいにものすごい頻度でアクセスすると物理的壊れやすい
容量あたりの売り上げは下がる一方だよ!
486DX-33MhzのいわゆるDOS/V機のはしりの頃は DRAM4MB, HDD/130MB位が一般的だった DRAMが1000倍に対しHDDが10000倍になっている HDDは垂直磁気化というブレイクスルーがあったが、DRAMには開発当初からみても トレンチだの多層化だの小さな改良にとどまり大きなブレイクスルーは無い
160 :
デフォルトの名無しさん :2014/04/19(土) 22:07:10.53 ID:lCAnEaLb
PS2は確かFPGAだっけ?間違ってたらすいません。 PS3のCELLと、PS4のジャグラーの違いって何ですか? FPGA,CELL,ジャグラーを比べると やはりジャグラーが一番高性能なICチップなんですか? それとプレステのゲームはCやC++で書かれているというのは本当ですか?
まずはASICとFPGAの違いを
>>160 まずFPGAとは何かという正確な定義を理解することが
先決じゃないですかね。
163 :
デフォルトの名無しさん :2014/04/19(土) 22:15:11.98 ID:lCAnEaLb
>>162 プログラム感覚でハードを構成できるVHDLの事だと思うのですが間違いですか?
例えば、ここはトランジスタを2個、でこの端子にNANDを繋ぐとかそういうのを
VHDLで出来るという事ですが、違いますか?
164 :
デフォルトの名無しさん :2014/04/19(土) 22:22:31.44 ID:t9BEvVQh
FPGAはプレイステーションなどには使わないだろ?買ったこと無いが、書き換え不可の専用チップのほうが高速で安価だろ。
FPGAとは 【 Field Programmable Gate Array 】 - 意味/解説/説明/定義 : IT用語辞典
プログラミングすることができるLSIのこと。
マイクロプロセッサやASICの設計図を送りこんでシミュレーションすることができる。
専用LSIより動作が遅く高価だが、ソフトウェアで回路のシミュレーションを行うよりは高速である。
1985年にXilinx社によって初めて製品化された。
http://e-words.jp/w/FPGA.html
typedef struct{ int a; }TEST こういう構造体を作って、呼び出し元でTESTの配列を作り、 void testKansuu(TEST* test){ test[0].a = 200; } こういう関数を呼び出す時、引数で構造体のポインタを受け取っているのに、なぜ test[0]->a = 200; ではエラーなのかというのがわかりません。誰か教えてください・・・
test->a = 200;
>>165 変数 test の型が TEST* の時、test[0] の型は何だと思う?
168 :
デフォルトの名無しさん :2014/04/19(土) 23:04:14.36 ID:lCAnEaLb
>>144 UNIXがCで記述されている事と
C自体にディレクトリの概念がない事は両立する
170 :
デフォルトの名無しさん :2014/04/19(土) 23:44:38.91 ID:t9BEvVQh
POSIXはCの規格じゃないからね
言語仕様とライブラリの区別未だ無奴w
標準ライブラリは規格のうちだろ
chdir()は標準ライブラリですか? そうでない場合、chdir()相当の関数が標準ライブラリに用意されていますか?
標準ライブラリとPOSIXは違うんじゃね
176 :
デフォルトの名無しさん :2014/04/20(日) 00:45:30.03 ID:gFkdD4A7
言語研究者かよ。 getcwd、chdirは言語仕様であってもなくても、実用上、標準と違いはだろ。
へーそーなんだ
178 :
デフォルトの名無しさん :2014/04/20(日) 00:49:27.16 ID:UE10veJp
ドライブという概念はパソコン(パーソナル・コンピュータ)用として ごく自然な考え方だと思いまする。
典型的なhello world!!を表示するだけのプログラムでも アルゴリズムと呼んで良いのですか?
180 :
デフォルトの名無しさん :2014/04/20(日) 01:06:43.39 ID:UE10veJp
普通は手続きの羅列をアルゴリズムとは言わないですね。 呼んではいけないという法は無いと思いますが。
>>180 どうもありがとうございました
調べ続けた結果、問題の解き方って出てたので、少し勘違いしていたみたいです。
printf使っただけのプログラムをアルゴリズムって呼ぶのは何か違和感を感じました。
チンコとマンコは同時に存在しないのでXORの関係ですか?
ふたなりは実在するような記事はみかけるぞ。
>>178 ドライブって、駆動装置の事だって知ってるよね?
185 :
デフォルトの名無しさん :2014/04/20(日) 02:24:56.55 ID:UE10veJp
そうなのです。 現実に目に見えて手に取れる装置なのです。 パソコンは個人が管理し使用するものですから、装置も本人が手に取って 接続することでしょう。 マイクロソフト社のOSが優れていた点は、コンピューターの中にしかない 仮想的な世界を手で触れられる現実の世界とうまくリンクさせたことでしょう。 現実の世界に存在する装置が、コンピュータ内に独立した一つのオブジェクトとして 存在することは、ほとんどの人にとって理解しやすかったのです。 ゲイツ氏は「自分の母親が使えるようなコンピュータ」を作ろうとしました。 これが理念でありビジョンというものです。 そしてそれは広く受け入れられました。 さすがです。
>>123 実際、ソフトの仕事は要件決めが、9割だから。
仕様がきちんと決まってれば、あとは作業するだけ。
MS-DOSのこと?
>>176 言語仕様ではない
それが現実
ただ、MS-DOSの頃はまだCは規格化されていなかった
難しい話になってまいりました
きさま、要件どおりに出来ているかの検証工数を考慮しないクソマネージャーだな!!!
関数をstaticにする意味はありますか
>>119 > でも丸1日かかるほうが残業代で稼げるとかそういう現状あったりする?
出来ない奴は風呂入れず体が腐って脱毛・インキンになるくらい働いても
結果的に年収400万が上限だな。
出来ると言われる人は、週に2回4時間ほど出勤するだけで年収600万〜
だし、定時で働いたら年収にすると1200万以上もらえるもんだよ。
逆に言うと、そうだな、フルタイムで年収1000万を切るような
能力ならプログラマなんかやめたほうがいい。30歳になる前に。
安いのが職場のせいなら、わざわざ言わなくても分かると思うが、
別の職場も探したほうがいい。
まあそれが出来ない能力なら、やはりこの業界はやめたほうがいい。
くどいようだが「30歳になる前」にな。
でないと取り返しがつかないことになるだろう。
それが現実だ。
マ板でやれ
>>192 んで君は30過ぎてインキンになって低年収なんで言ってる事に真実味があるわけだな
よくわかった
>>191 基本的に全部staticにする勢いで考えて
どうしてもstaticにできないもののstaticを外す風にするといいよ
ここって数日前に始めた初心者の相談ものってくれるんですね
やはり C言語なら俺に聞け(入門編)Part xxx があった方がいいのだろうか
何で消しちゃったのかしらん?
hogehoge禁止とか訳わからんこと言い出す奴が居て嫌いなんだけど、個人的には希望
test
あ、質問聞いてくれるんですかねだったわ 誤字誤字
>>199 そんなもの無視して hoge なソースを公開していればいい
初心者です。 16ビットのビット演算について教えてください。 unsigned short red,green,blue; unsigned int color; colorに高い方から、5,6,5というように、それぞれred、green、blueというようにデータが割り当ててあります。 ここでビット演算で各色を計算すると思うのですが、具体的にどのような方法が一番よいのでしょうか? ご回答よろしくお願いします。
do{ printf("%d", num%10); num=num/10; }while(num>0); 中途半端ですけど、1963って入力すると3691と逆になります C言語始めたばかりでよくわかりません・・・orz 詳しく説明してくれませんか?
>203 思いつきで #define RED_MASK 0xf800 #define RED_SHIFT (6+5) #define GREEN_MASK 0x07e0 #define GREEN_SHIFT (5) #define BLUE_MASK 0x001f #define BLUE_SHIFT (0) color = ((red & RED_MASK)<<RED_SHIFT ) | ((green & GREEN_MASK)<<GREEN_SHIFT ) | ((blue & BLUE_MASK)<<BLUE_SHIFT); red,green,blueが各値のMAX値を超えない保証があるならマスク不要。
分離 red = (color & RED_MASK)>>RED_SHIFT; green = (color & GREEN_MASK)>>GREEN_SHIFT; blue = (color & BLUE_MASK)>>BLUE_SHIFT; /*最適化でシフト工程削除を期待*/
>>204 1693 ÷ 10 で余り 3
商をnumに代入 でnum は169
169 ÷ 10 で余り 9
商をnumに代入 でnum は16
16 ÷ 10 で余り 6
商をnumに代入 でnum は1
1 ÷ 10 で余り 1
商をnumに代入 でnum は0
継続条件が num > 0 なんでお終い
printf("%d", num%10); の num%10はどういう意味?
%は 剰余 つまり余りを出すもの だから printf("%d", num%10); は numを10で割った余りを表示するってこと C言語 加減乗除 でggr
負数の剰余が規格化されたのいつからだっけ?
>>205 シフトとマスク逆じゃね
っつうわけで
#define SHIFTED(val, COLOR) (((val) << COLOR ## _SHIFT) & COLOR ## _MASK)
#define VAL(color_val, COLOR) (((color_val) & COLOR ## _MASK) >> COLOR ## _SHIFT)
color = SHIFTED(red, RED) | SHIFTED(green, GREEN) | SHIFTED(blue, BLUE);
red = VAL(color, RED);
213 :
205 :2014/04/23(水) 08:11:08.34 ID:nANgtZqL
>211 そうだねorz
>>118 テストや保守は別の人がやるものじゃないのか?
開発した人が販売後保守担当になるのは珍しくないだろ。
int main(){ int n; for(n = 3; n < 227 ; n++ ) // nの上限が n<228以上でバグ n = 227の時に動作不良 { judge(n); } return 0;} judgeは整数nが素数ならば表示しそうでなければ何もしない関数なのですが、n<227以下なら正常に終わるのですが、
nの上限を227以上にすると途中でプログラムの挙動がおかしくなります。 judge()に問題があるのかと覆ったのですが、nの初期値を226にすると上限がn<359ならば問題ないのですが、上限を359以上にすると上と同じようにおかしくなってしまいます。 同じようにnの幅を小さくして実行すると正常にできるのですが、上限なし等にすると途中でおかしくなってしまうのはなぜですか? コンパイラは"gcc version 4.8.1 20130909 [gcc-4_8-branch revision 202388] (SUSE Linux)"です
judgeの中身に問題があるだけでしょ
もしかして:オーバーフロー
>>216 void judge(int n)
{
int i;
for (i = 2; i * i <= n; ++i)
if (n % i == 0)
return;
printf("%d ", n);
}
int が 16bit 符号付だと i*i の計算が危ない log(226 * 226) / log(2) → 15.6 226*226 の結果を符号無しで表現するのに 16bit 必要
#include <stdio.h> #include <stdlib.h> //pickup() #include <dirent.h> //countfile() int main(){ int n; for(n = 227; n < 359 ; n++ ) // nの上限が n<228以上でバグ n = 227の時に動作不良 { printf("judging %d\n",n); judge(n); usleep(50000); } return 0; } int judge(int n) // 整数nが素数かどうか判断 { int i = 1; int p; p = pickup(i); while( ( n % p ) != 0 ) { if(p >= n/2) { break; } else{ i ++; p = pickup(i);} } if( ( n % p ) != 0 ) { write(n); printf("%d is prime number.\n", n); return 1; } else { return 0; } }//judge is end int pickup(int k) //k番目の素数を引き渡す { int pu; char primefile[100]; sprintf(primefile, "./prime/prime%d.txt", k);
FILE *fp; fp = fopen(primefile, "r"); if( fp == NULL ) { printf("file open is fale."); } else { fgets(primefile, 99, fp); pu = atof(primefile); }return pu; } //pickup end write(int n)//整数nを次のpirmeに書き込む { FILE *fp; char filename[256]; int c = count(0); c = c + 1; sprintf(filename, "./prime/prime%d.txt", c); fp = fopen(filename, "w"); fprintf(fp, "%d", n); fclose(fp); }//write is end int count(void)// ./prime内にあるファイルの数を数える{ DIR *dir; struct dirent *dp; char path[10] = "./prime/";//対象フォルダを指定 dir=opendir(path); int i = 0; for(dp=readdir(dir);dp!=NULL;dp=readdir(dir)) {// printf("%s\n",dp->d_name); i = i + 1; } closedir(dir); i = i - 2; return i; }//count is end
見難くてすいません。 やはりjudge()に問題があるのでしょうか?
226 :
デフォルトの名無しさん :2014/04/25(金) 17:24:09.01 ID:J7Pyepd0
ハード屋さんに質問です。 メモリの1と0の点滅の速度でデータを表現するって方法はダメなんでしょうか? 例えば4ビットで、点滅速度が10ギアあれば4^10=1000京個の状態を表せないですか?
>>225 pickup(i) <--- i番目の素数を取得。
write(n) <--- チェック対象の数n。
に成ってしまってる。
あと、tmpfsは使えないんだっけ?
共用体って一体どういう状況で使うんですか?構造体なら判るんですが(と言ってもあくまでも入門者レベルでの話ですけど)
>>226 >メモリの1と0の点滅の速度でデータを表現するって方法はダメなんでしょうか?
表現は可能だけど、速度固定?
1とか0が連続した場合を考慮すると、同期ビットが必要。
>例えば4ビットで、点滅速度が10ギアあれば4^10=1000京個の状態を表せないですか?
10ギガ?
従来技術で似てるのは分割アドレッシングかな。
例えば32ビットデータ、アドレス表現のために8ビットを4回出力するとか。
1000京=10^19は、64ビットあれば足りるから、4ビット点滅を16サイクルで可。
>>228 ・メモリ節約
・ビット毎に意味が有り、読み書きは8ビット単位(文字としてコーディング可)で行いたい場合。
組込みスレで聞いたら、他の用途も有るかも。
>228 バージョンによってデータ構造が変わってるとき、一つの型で対応可能。 struct { int ver;/*バージョン番号*/ union { struct { /*バージョン1用*/ ... }; struct { /*バージョン2用*/ ... }; ...
232 :
228 :2014/04/25(金) 20:29:16.80 ID:S9fMZq7/
レスありがとうです。 なかなかイメージが湧きにくいんですが、例えば1つのファイルをこのレコードはAというデータ用のフォーマット、これはBというデータ用のフォーマット… 的に使っているみたいな?(あくまでも例えですが)。
233 :
デフォルトの名無しさん :2014/04/25(金) 20:35:47.15 ID:dV13/S1E
>>229 8ビットで32ビットを表現できるんですか?それってその代りどこかの場所を
24ビット分使ってるって事ですか?
>>228 組み込みなどでメモリに割り当てられたレジスタを
1バイトまるまるアクセスしたい場合とビットアクセスしたい場合とか
初心者が使うことはないとおもう そのあとに登場した言語でも共有体はないものがほとんど
ハードの話をしている奴、せめて雑談スレ辺りでやってくれ。 余りに頓珍漢過ぎて突っ込みどころ満載なんだがスレ違い過ぎる。
乱暴なキャストみたいなものだしねー char a[8]; *(long *)&a = 5;
&いらないがな
>>236 なるほど〜。その必要が出てきた時に…ということにしておきます。
ありがとう
>>238 乱暴なキャスト??
はぁああああ???
DirectXとか使うようになると必要な知識。>union 概念だけ覚えておけば十分だけど。
ルネサス提供のIO定義はこんなんだな struct st_port { union { struct { unsigned char B7:1; unsigned char B6:1; : unsigned char B0:1; } BIT; unsigned char BYTE; } PDR; }; #define PORT0 (*(volatile struct st_port*)0xFFFFFF00) PORT0.PDR.BIT.B0 = 0; PORT0.PDR.BYTE &= ~0x01;
初心者で型変換で頭がこんがらがっています char型の一文字、”a”という文字をアスキーコードの97になるように出力するコードを教えてください! よろしくお願いします!
printf("%d",'a');
C言語に文字や文字列の型は無いよ。 「これは文字コードだ」「これは文字列だ」と仮定して処理してるだけ。
247 :
244 :2014/04/28(月) 22:48:31.44 ID:Ukx0JAM/
自己解決しました スレ汚しすみません #include <stdio.h> int main(void) { char x = 'a'; int b; b = (int)x; printf("%d",b); return 0; }
intよりuint8_tの方が好み
>>249 KACさん、ここはム板じゃないんでIDでバレバレですよ。
>>250 ここはム板な訳だが?
つか、粘着君必死だな
253 :
KAC :2014/04/29(火) 15:57:56.95 ID:3cTlepGQ
>>252 22行目のパラメータが足りないからメモリこわしてる。
一つ目の%に対する変数を見直してみな。
きたねぇソースだなあ。もうちょっと読み込みロジック工夫しようぜ。 人が読んで理解しやすいソースがいいソース。
ありがとうございます。
>>253 あれが悪さをしてたみたいです。感謝
>.254
そうですか?一人でやってるもので他人のソースは見る機会がないもんで。
どう変えれば「人が読んで理解しやすいソース」になります?
特に汚いという判断できるような長さじゃないだろ 一つだけ挙げるなら、カンマのうしろはスペースあけろってことくらい カラム数が9個で決め打ちなのはただのお遊びプログラムならよくあること
そやね 全然正常の範囲よ 本物の糞コードはもっと臭ってるから 本物の糞コードはこれだ 1) 抽象化が下手か、皆無 2) 名前が糞 3) 分かってなくてこれ書いてるな、と丸分かりな箇所がある 4) コピペが見え隠れする 5) どうやったらそうなるんだ、という脅威の遠回り長文ロジック そんで、糞コード書くやつってもれなく言い訳がましいからw
if(a==0 && b==0) { ... } else if(a==0 && b==1) { ... } else if(a==1 && b==2) { ... } else if(a==2 && b==0) { ... } else if(a==1 && b==1) { ...
>258 c = a*1000 + b; if(c==0) { ... } else if(c==1) { ... } else if(c==1002) { ... } else if(c==2000) { ... } else if(c==1001) { ... なんてね。
sscanfをブロックで区切ってループで処理するとか、 どうしても1行で済ませたいなら改行とインデントで 何を読み取ろうとしているのかわかりやすくするとか。 ベタで1行に大量の項目を並べると理解度は下がる。
この程度で理解度って何なの
262 :
KAC :2014/04/29(火) 21:04:28.15 ID:3cTlepGQ
>>260 sscanfでやってる処理を区切ると余計見づらくなると思うが。
一行で書けるなら一行に収めるのも一つの手法。
それはそうとして、あのソース見れば解ったとは思うけど、
あの処理はあれで完成じゃないぞ?
段階を追って作っていく中でつまづいた質問だろう。
そもそもそんなに目くじら立てんでもいいだろ?
>>262 > 一行で書けるなら一行に収めるのも一つの手法。
まったく同意。
この場合みたいなテストプログラムならなおさら。
一行ですむもんをぐだぐだ書いたってしゃあないの一言。
副作用完了点までの間に複数の副作用を含まないなら1行で書くべきだとは思うがなあ
>>264 > 副作用完了点までの間に複数の副作用を含まないなら
複数含んでたら書き方以前の問題かと
a[i++] = i; こういうのじゃなく(論外) *a++ = *b++; こっち側を通すかどうかの話でしょ?
紛らわしいから()すればいいだけの話
どう括弧するの?
演算子の優先順にそって明示的にカッコを入れて欲しいって事じゃないかな? 普段から常用してる言語ならいいけど たまにしか書かないようなものは読みづらいからね
カッコつけて書いて イメージわからん
副作用完了点を理解してない奴は混乱するから参加するな
273 :
デフォルトの名無しさん :2014/05/03(土) 20:32:00.11 ID:CisfHpp9
const char*とchar* constの違いを教えて下さい。
const char*は指し示す先がconstになる char _a; const char* a = &_a; *a = 1; /* NG */ a++; /* OK */ char* constはポインタがconstになる char _b; char* const b = &_b; *b = 1; /* OK */ b++; /* NG */ const char* constはどっちもconstになる char _c; const char* const c = &_c; *c = 1; /* NG */ c++; /* NG */
const char *p // const char へのポインタ。初期化後は代入できない領域へのポインタ。*p = 'a'できない。 char *const p // charへの、constポインタ。*p = 'a'できるがp = &othercharできない。
要素数を計算して出す時にint型なら、例えば int size; int ar[] = { 1,2,3,4,5,6,7,8,9}; printf("要素数は %d\n", sizeof(ar) /sizeof(ar[0])); で、9とでてきますけど、文字の配列で例えば char *mojiar[] = { "line1", "line2", "line3", "line4", "line5" }; となってる時に、要素数はどうすれば出せますか?
同じでしょ? sizeof (mojiar) / sizeof(char *)
おおっw ありがとうございます。
279 :
KAC :2014/05/04(日) 21:51:14.83 ID:nXeCksGu
例と同じように変数名でいくなら sizeof (mojiar) / sizeof(*mojiar)
俺はこう書いてる sizeof mojiar / sizeof mojiar[0]
俺はカッコ含めずに書いてマクロで使ってる #define N(mojiar) (sizeof mojiar / sizeof *mojiar)
C言語勉強中です Cに向く人、向かない人の違いってありますか? たとえばチンチンが臭い臭くないとかオナニーは皮派とか
こんな計算してなんになるって考えている人は向いていない
ちなみにC言語の文字列は4種類のポインタで管理してある 1スタックポインタ 2ヒープポインタ 3マクロポインタ 4ポインタ freeで解放出来るのは2のヒープポインタだけ
Cの文字列はNULで終わる charの配列で、ポインタは一種類しかない
>>285 スタックポインタはレジスタの一種だ
「マクロポインタ」とはいったいなんだ?なにをいいたい?
メモリポインタだろ
ダブルポインタなる用語を得意げに使うアホといっしょ。
ポインタ値はただの数値。
添え字が0からってのが凄いややこしいけど、言語によっちゃ1から始まる 配列もあるんでしょうか?統一しないんでしょうか?
>>292 数学にだって、自然数は 0 からはじまる、と定義する流儀もあれば、1 からはじまる、とする流儀もあるし、統一はむりじゃないか?
計算がやりやすい時に、配列先頭を使わないでおくのはよくあるな
>>292 >言語によっちゃ1から始まる配列もあるんでしょうか?
FORTRAN という科学技術計算向け言語は1から始まる
また Pascal や Modula といったアルゴリズムの記述を目的に
教育用途から発展した言語だと、
a[1..N] みたいに任意の下限と上限を宣言できたりする
C言語はOSなどのシステムプログラミング向けに設計され、
それ以前はアセンブリ言語で書かれたコードを
構造化された高級言語で置き換えることを目的としていた
もしアセンブリ言語を知っていれば、
a[0] が *(pa + 0) と等価でありa[1] が *(pa +1) と等価であることに関して、
ポインタ pa とはCPUのインデックスレジスタであり
*(pa + 0) が相対アドレッシングであるから、
配列の添字が相対アドレッシングのオフセット値に対応する概念であると
容易に直感できる
こうした歴史的背景があるから、少なくともC言語の仕様として
配列の開始が0ではなくなることは、まず考えられないと思われる
VBAだと、モジュールの先頭で Option Base指定で 0または1のどちらかを指定できる デフォルトでは0
昔のBASICは1オリジンだったな 今はもう頭が0オリジンになっちゃってて久々にVBやると間違えそうになるけど
>>299-300 そもそも VB なら
Dim A(-5 To 5, 1 To 50)
とかできるし。
for(i=0;i<10;i++){ cc = buff[i*4]; } >292 perlじゃ0 = nullだから 知らずにやると痛い目見る
++i と i++ って何が違うん?
int i = 0, j = 0; int a = i++; int b = ++j;
副作用完了点
-の添字が配列後端を指すとか配列の手前のセグメンテーションフォルトの位置を指すとかそれも面倒。
一つ教えてください〜バイナリファイルのランダムアクセスってレコード番号を指定して読みだすんですよね? ホストのVSAMやRDBみたいにキーを指定してってのは…無いんですか?
>>307 >レコード番号を指定して読みだすんですよね?
いや、違う
C言語でバイナリファイルと言えば、一般的には
1バイト単位にアクセスできる列(ストリーム)を指す
具体的には、ファイルの先頭を0とした相対的なバイト位置
(これをオフセットと呼ぶ)をライブラリ関数 fseek で指定し、
fread や fwrite でアクセスするのが基本
>キーを指定してってのは…無いんですか?
UNIXであればISAMに相当する標準ライブラリとして dbm がある
また dbm から派生した gdbm(GNU版dbm)やbdb(Berkeley DB) などを
使うケースも多い
特に bdb はWindows版もありオラクルに買収されたほどよく知られている
ここで書いた fseek や dbm といったキーワードで調べるといいと思う
>>レコード番号を指定して読みだすんですよね? BasicかYO! w
ありがとうございます。 また勉強しますm(__)m
コボラーかよ
312 :
デフォルトの名無しさん :2014/05/08(木) 20:13:26.27 ID:Ute3QYwM
int a[10]; と宣言した配列に、後から、 a[0] = 3; a[1] = 15; a[2] = 31; と値をひとつひとつ入れていくのではなくて、 a = {3, 15, 31, …} みたいな感じでいっぺんに入れてやる方法はないでしょうか。 配列の宣言時に出来るのは知ってますが、後からいっぺんに値をいれる方法がわかりません。 宜しくお願いします。
別の配列に入れておいてmemcpy。 言語仕様的にかけたとしても中身は変わらん。
>>313 C言語にはそういう書き方はないということですかね
ありがとうございました。
struct hoge { int hoge[10]; } hoge; hoge = (struct hoge){ { [0] = 3, [1] = 15, [2] = 31, } };
ある数(scanfのやつ使って文字適当に決める)の100の位を出す問題なんだけどわからん。例えば実行ファイルで12345の数を打ったら百のくらいは"3"ですみたいなのを出したいんだけどさっぱりわからん
atoi([入力]] / 100 % 10 みたいのじゃダメなん?
>>317 なるほど!ありがとうございますm(__)m
バイナリファイルの読み出しなんですが^^; typedef struct testdata{ int test1; int test2; char nm[10]; } dat; ↑のフォーマットで5件バイナリデータを作って一気に表示させるのは FILE *fp; dat dt; while ( fread(&dt,sizeof(dat),1,fp) > 0 ) { printf("%d件目 %d %d %s \n",i+1 , dt.test1 ,dt.test2 ,dt.nm ); i++; } で、出来たんですが、、、 例えば、このデータで3件目のレコードを表示させたいって時のやり方教えてくださいm(__)m
逆に聞きたい。なんで出来ないの?
いきなり3件目ってことなのかね。 fseek( fp, sizeof( dat ) * 3, SEEK_SET ); で解決だったりして。
件目 といった時 1オリジンだから *2じゃないかな
sizeof(構造体)と構造体メンバーの合計サイズがイコールとは限らないとか そういう問題じゃなくて?
デバッグ的な感じの表示だけなら i == 2 の時だけprintfすればいい気が 処理コスト的に考えればやっぱりfseek使う方がスマートだと思う
325 :
319 :2014/05/10(土) 23:23:53.38 ID:daXnFUnI
fseek( fp, sizeof(dat)*3, SEEK_SET ); printf("%d %d %s\n", dt.test1 , dt.test2 , dt.nm); としたんですが、表示がおかしいんですよ。 後、 >sizeof(構造体)と構造体メンバーの合計サイズがイコールとは限らないとか それも聞こうと思ってました。出来たのを見るとファイルサイズが100バイトになってるのが?なんですけど。
#pragma pack で検索だな
まずは fseek を調べるところから始めろよ。 それでどーして表示できると思えるんだ。
sizeof(dat)一つが20バイトでその中身は int test1 4バイト int test2 4バイト char nm[10] が10バイト そして多分最後に詰め物が2バイト それが5セットで100バイト fseek( fp, sizeof(dat)*2, SEEK_SET ); fread(&dt,sizeof(dat),1,fp); printf("%d %d %s\n", dt.test1 , dt.test2 , dt.nm);
329 :
319 :2014/05/11(日) 00:03:30.38 ID:9n+Ded1d
>>327 すいませんね
fseek( fp, sizeof(dat)*3, SEEK_SET );
if (fread(&dt, sizeof(dat),1,fp) == 1){
printf("%d %d %s\n", dt.test1 , dt.test2 , dt.nm);
}
で出来ました。この件数の位置については
>>322 さんの言うとおりで、それも修正しないといけないですが。
後、
>>326 さん、ありがとです。
if文が10個あるのと、switchでcaseが10個あるのとではどっちがいいんですか?
コンパイラが適切に処理してくれると思うよ
>>330 ある分岐処理についてif文とswitch文のどちらでもコード化できるなら、
迷うことなくswitch文を使うべき
if文では条件判定として任意の式が書けるのに対し、
switch文のcase節だと定数式しか書けない
言い換えると、switch文のほうがコードとして表現できる範囲が狭い
あえてswitch文を選ぶことによって、コードの読み手に対して
この分岐処理は定数式で条件判断できるという意図を示すことができる
break文を書き忘れたのが意図的かどうかわかりにくいから、 if文で書け
かなり前だが、VCのDLLスケルトンのbreak無しを見落としてバグったことあるな…
最後の default: にも break; 入れてるw
336 :
デフォルトの名無しさん :2014/05/18(日) 17:36:24.82 ID:uXRvIAKx
プログラマー紹介みたいなのでその人の部屋の画像が映し出された時 PC環境が大抵多画面なのは何故ですか? 俺みたいにノート一台でプログラミングするのは稀?
多分岐を助長する傾向が生じるから、case文は使わない。排斥すべき。
>>337 すみません、自己レス。ここでは、switch文は使わないとしてください。
定数で分岐処理するなら、関数テーブルを作って 関数へのポインタで処理すればすっきりするのでは?
昔ならオーバーヘッド云々と言えたんだけどねぇ。
>>332 俺もswitchは好きだが、
if(){
}else if{
}else……
とすればインデントは増えないことを知ってからif派になった。
どうせ同じ意味になるしねー
>>336 俺も基本ノートだったが、中古のサブモニくっつけたら世界が変わったぞ
(ブラウザ画面とかを別に避けて表示できるからかなり捗る)
>>339 case文が数万個とかなったらその方が高速になるね
>>336 中古で安く調達して試してみるといいよ
仕事(マじゃないよ)でも手放せない
>>342 Windows の例題はそんなのしかみたことがない
>>330 定数で単純に分岐するなら switch( ) の方が望ましいと思う。
コンパイラによるけど、間違えて同じ定数書いた時にエラーにしてくれたり、enum だとさらに、使われてない定数があることを警告してくれるとかの支援機能があるから。
>>333 意図的ならコメントにFALLTHROUGHって書いてるな
特に理由がなければ可読性の高いswitchの方がいいだろうね ifの条件に定数以外を使えることは、if〜else if方式の欠点でもある バグも温床になるよ
switchなら最適化で線形探索より速くなるね
case分が64個とか制限なかったっけ?
caseは最低256個だったような
(EOF(-1)も扱うことを想定して)257だよ
>>336 作成中のアプリの画面用と、デバッグ情報の表示用とか
複数モニターはわりと便利
switch()〜case:は0からの連番ならテーブル処理、 それ以外はif文使用と変わらない処理だって昔聞いた。 86系の16bit時代の話で他の環境ではどうなるか知らない。
>>354 90年代の前半ころのMS-Cは、分岐が7以上で等差数列だったらテーブルジャンプになってたわ。
0からとかって縛りはなかった。
gccならcomputed gotoが超速い
ワシはアナルにプチトマト入れたり出したりしとる ごっつう気持ちええで〜
caseが2〜3個程度のswitchってifを使った時と同じコードになっちゃうんだよなw
>>358 別にswitch使うのはifより速いからじゃないし
360 :
デフォルトの名無しさん :2014/05/19(月) 17:46:02.98 ID:RdUiR/FU
多画面について質問です。 多画面の場合そのディスプレイのOSは何になるのですか? C言語勉強してるのですが、プログラミングと出力で分けたい
| 検索結果:該当0件 | | ちょっと何言ってるか分からないです | | | [ オプション(O) ] [ 検索(S) ] | `──────────┐ ┌─── , '´l, ..| ./ , -─-'- 、i_ |/ __, '´ ヽ、 ',ー-- ● ヽ、 `"'ゝ、_ ', 〈`'ー;==ヽ、〈ー- 、 ! `ー´ ヽi`ヽ iノ ! / r'´、ヽ `´ヽノ
362 :
デフォルトの名無しさん :2014/05/19(月) 18:07:18.47 ID:RdUiR/FU
>>361 メインで使うPCのディスプレイはOSが入ってると思うけどサブ画面の場合 OSはどうしたらいいんですか?
一つのPCに複数のディスプレイがつながってる環境ならそのPCが起動してるOSが全部統括管理するのが普通だが? それ以外の環境なら設計者次第だろ。
プログラム入力用のモニタと実行用のモニタの2画面構成にしたいってことか? マルチモニタ、マルチディスプレイで検索しろ。 それより前に日本語勉強しなおせ。
365 :
デフォルトの名無しさん :2014/05/19(月) 19:45:49.91 ID:RdUiR/FU
>>363 ということはサブで見せたい画面だけを移動するってことですか?
そういうのってソフトいらないのですか?
>>364 分かりにくい説明の質問だったらすいません、難しい分野の問題で
言語からちょっと関係ないから手慣れてないので…
OS(の設定)をどうしたらよいかって? そのOSとマルチモニタ・マルチディスプレイでググレ ノートPC + Windows とかだと、Fnキーのコンビネーションで プロジェクター接続 と称して マルチモニタ対応してたりするが
367 :
デフォルトの名無しさん :2014/05/19(月) 19:50:11.83 ID:RdUiR/FU
>>366 特定のアプリケーションだけプロジェクターに映し出すって可能なんですか?
例えばメモ帳だけみたいな
まず試せよ。
っていうかC言語関係ねー
>>362 > ディスプレイはOSが入ってると思うけど
入ってません
>>371 たぶん「外部出力」すらよくわかっていないんだろうな……
>>371 どうみても (ディスプレイ一体型の) パソコンだろ
というか、ディスプレイにも制御用のプログラムが載ってるなら、OS も入ってて不思議はないかと。 イメージしてる物とは違うだろうけど。
とりあえず質問者は勘違いしてるのは間違いない。
ID:RdUiR/FU ←C言語勉強してる? うーん OSやhardのことそこまで知らずにC言語って うーん 凄い場違い感 LOGOでタートルしてたら? (Cをなにに使うんだろう)
ひょっとしたらスマホで常にフル画面しか使わない世代かもしれない
まぁ釣り質問でなければ相当の無知だわな
379 :
デフォルトの名無しさん :2014/05/21(水) 21:46:32.79 ID:7ghH1huH
合計がおかしくなるんですがなぜだ #include <stdio.h> int main(void) { int box[9]; int i=0,max=0; printf("please input number\n"); while(i < 8) { printf("input:%d:",i+1); scanf("%d",&box[i]); i++; max += box[i]; } printf("max = %d\n",max); return 0; }
>>379 ループのところ、while文の代わりにfor文を使ってみよう
382 :
デフォルトの名無しさん :2014/05/21(水) 21:54:47.54 ID:7ghH1huH
forだとうまくいきますが なぜかわからない
>>379 ・「i++;」と「max += box[i];」の位置が逆。
そりゃ未定義のとこ足したらおかしくなりますわ
・そもそも「合計」はmaxじゃなくてsumとかだろフツー
・と言うかこの場合繰り返しにはwhileじゃなくてfor使えば良くね?
・だいたいループして一回一回足すんならbox[]は不要
・そしてこのコードだとwhileの中が8回しか実行されないわけだがそれでいいのか?
(配列が9個あるのに8個までしか代入できていない)
>>379 int box[9]
while (i<8)
になってるけど、whileの条件は適当?
385 :
デフォルトの名無しさん :2014/05/21(水) 21:57:06.26 ID:7ghH1huH
うまくいきました ありがとう御座います。
386 :
デフォルトの名無しさん :2014/05/21(水) 21:59:32.79 ID:7ghH1huH
自分で適当作った問題です。 383さんありがとう御座います。
387 :
デフォルトの名無しさん :2014/05/21(水) 22:32:46.34 ID:zPiEeEEi
if文の中にdo文入れるとループしないとかありますか?
そりゃ、ループの条件式によるだろ。
#include <stdio.h> int main(void) { int n1,n2,sum=0; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d",&n1); printf("整数B:"); scanf("%d",&n2); if (n1<n2) printf("%d以上%d以下の全整数の和は",n1,n2); else printf("%d以上%d以下の全整数の和は",n2,n1); if (n1<n2) do { sum+=n1; n1++; } while (n1>n2); else do { sum+=n2; n2++; } while (n2<n1); printf("%dです。\n",sum); return (0); } これなんですが
>>389 if文じゃなくwhileのとこの条件を間違ってるだけだよ
上のと下の同じになってる
392 :
デフォルトの名無しさん :2014/05/22(木) 23:16:19.74 ID:Pj2Kcb1G
ファイル@で宣言したグローバル変数A ファイルAで宣言したグローバル変数B ファイルBで #define A B とした場合 ファイルB内では変数A変数Bどちらもexternでの宣言が必要ですか? なんかよくわからんくなってきた
394 :
デフォルトの名無しさん :2014/05/22(木) 23:20:21.70 ID:Pj2Kcb1G
↑違うわ ファイル@で宣言したグローバル変数A ファイルAで #define B A とした場合 ファイルA内では変数Aのextern宣言が必要か? でした
#define B A って、単にテキスト上のBと書いてある箇所をコンパイル前にAと置き換えてるだけ だからextern Bはいらない extern Aだけでいい #includeも#defineも単にコンパイル前に文字列を置き換えてるだけ 何か高度なことやってるわけでもなんでもない
396 :
デフォルトの名無しさん :2014/05/22(木) 23:34:23.91 ID:Pj2Kcb1G
Cか?たぶん普通にリンクできるはずだが いわゆる仮定義というやつだ
常駐先企業の人件費抑制に利用されただけの人生だったな残念
常駐先企業の人件費抑制に利用されただけの人生だったな残念
常駐先企業の人件費抑制に利用されただけの人生だったな残念
401 :
デフォルトの名無しさん :2014/05/24(土) 11:45:40.13 ID:oAEIG7cF
ご教授願います! if(a == 1 && b == 1 && c == 1) { x = 1; } else { x= 0; } と、 if(a == 1) { if(b == 1) { if(c == 1) { x = 1; } } } else { x = 0; } では処理は同じだと思いますが、どちらが素敵ですか?
前者
403 :
デフォルトの名無しさん :2014/05/24(土) 13:44:51.23 ID:47+sObPK
保守
>>401 >if(a == 1 && b == 1 && c == 1)
じゃなくて
if(1 == a && 1 == b && 1 == c)
と、左オペランドには極力、代入不可能なものを置くクセを
今のうちに付けておくことを勧める
こんなミスを防止出来るから
if( a = 1 ){ // a == 1 のつもり
なお、素敵なのは俺も前者
同じじゃない
いまどきのコンパイラなら警告出してくれるから変な習慣つけるなよ
>>404 それはfj時代から忌み嫌われていた記述法
現代には無意味
嫌いじゃないが初心者に勧めるものでもない 現場によってはコーディング規約が〜とかいって書き直しもあるかも
>>406-408 Linuxのカーネルで if( bEnableRoot = 1 ... )っぽいコードで
行うトロイが昔なかったか?
コンパイラが指摘するコンパイルミスの場所が「完全」に正確ではないのを思えば
コンパイラに全幅の信頼を置くC/C++プログラマーはどうかと思うが。
コンパイラにかける前に、エディタの検索機能でチェックできるレベル
>>401 全文見えないから無視していたが
同じじゃない
前者の場合ってaが弾かれたらbとcの判定って無くなるの?
413 :
デフォルトの名無しさん :2014/05/24(土) 15:44:11.88 ID:P2bp3FVu
>>401 > では処理は同じだと思いますが、どちらが素敵ですか?
違うよ。バカ
> ご教授願います!
どこの馬の骨かわからんクズを弟子するマヌケは世界中で
>>402-402 ,
>>405-410 の6匹だけ
「教授」の意味を調べてから出直せ
>>412 yes
x && y の意味は if x then y else false で
x || y の意味は if x then true else y になる
言い換えると、これらは純粋な論理演算子ではなく、
条件分岐を演算子で表現した構文糖(syntax sugar)である
したがって x && y は以下の意味と同じであり、
if x then
if y then
true
else
false
else
false
条件式 x が偽であれば条件式 y は評価されない
他の言語、たとえばRubyにも同様な演算子 || や && があるし、
それほど珍しい構文でもない
短絡評価と言えばいいのに
>>409 一定の説得力はある
が私はそうは書かない、多分量が少なくてそういうミスで手ひどい思いをしたことがないだけなのかもしれない
417 :
401 :2014/05/24(土) 16:04:08.92 ID:oAEIG7cF
お答えくださった
>>402 以下さんたちありがとうございます!!
もう一つだけいいですか?
int a,b,c;
floart x;
という変数があるとします
x = (float)a + (float)b + (float)c;
と、
x = (float)(a + b + c);
では同じ処理になりますか?
よろしくお願いします。
自分で試してみる気はないの?
>>417 同じにならない処理系があったら知りたいぐらいだが
まあ、それはさておき、float は「float を使うそれなりの理由がない限り」やめておいたほうがいい、ここは double で。
a+b+cがintの範囲を超える場合は?
421 :
401 :2014/05/24(土) 16:55:31.68 ID:oAEIG7cF
>>418 すみません
>>419 ありがとうございます
しつこくてすみません
floatよりdoubleを優先する理由を教えて頂けますか?
用途によるかと 精密な精度が欲しければ何らかのライブラリ、 通常の用途にはdouble、グラフィックスとかならfloatが基準になるかと
>>419 俺も聞いてみたい。floatよりdoubleっていう根拠は?
>>421 いまどきのCPUは、doubleでもfloatでも同クロックで演算できるので
あえて精度が低いfloatを使う必要は、普通は無い
>>422 printfの暗黙の型変換は、doubleを使う理由にならないのでは?
>>425 printf() というか不定長引数の場合の double 格上げ、というお約束自体が、当時の時点では float の演算速度と double の演算速度が変わらない現実を反映しているような気がして
もっとも float の方が確実に速い、あるいは float しかない、という場合がある(そうな)ので、それはそういう理由で float を使うのだろうね、やったことはないけれども
単に精度が倍だからだろ 必要精度を無視してメモリーも時間も使い放題だな 必要精度をはじきだせず、こまい計算しかしないならいいんじゃね?いつもダブルで やだー、ダブルー、えっちー トリプルにしたいなぁ、聖子ぉ!
>>427 お前はこのスレでレスする必要が無い。お前の存在は不要だ。
>>426 自分も格上げする理由は分からない。
格上げすれば、cal.ee側はdoubleだけ考えればいいので単純になるから、かなあ
複数のfloat値をまとめて演算するSIMD命令がある(CPUもある)ので、
演算の観点でもfloatが全く不要ではないね。あと、もちろんメモリ上のサイズが違うので
配列で大量のデータを持つときとかはfloatにする意味がある
intよりshortを勧める奴はいないだろ。
doubleとfloatも同じような関係だ。
>>425 printf()に限らず、暗黙の昇格があるからというのは理由になるのでは?
>>423 グラフィックスだからと言ってfloatを基準にする理由にはならないのでは?
たまたま低精度のライブラリを使うからと言うのは理由になるだろうが。
>>419 >417の前者と後者が同じ結果になるかどうかは兎も角同じ処理になる阿呆な処理系はないと思うぞ。
実際、>420が指摘しているが違う結果になることさえあるのだから。
>>404 両辺が代入可能な場合にエラーに頼る>404流は全く役に立たない。
そうであるならば、警告に頼る>406流にやや分があるんじゃないかな。
いずれにしても、読み易さを考えれば>404流は何十年も前にダメを出されているよ。
>>430 おお、頭良さそうやのう
感心したで
マジやで
コラコラ、そこの見学者、感じたわけやないで
あ、こら乳首さわるな、感じるやないけ
よくforループを「for(int i = 0; i < 10; ++i)」みたいに書いたりするじゃん? この場合例えばintの部分をunsignedにするとかunsigned charにするのってただの自己満足? (メモリはケチれるけど遅い、みたいなことがあったりするのか?)
>>419 intとfloatって同じ32bitなら桁落ちがあるからfloatにするタイミングで結果が違ったりするなじゃないの?
>>432 相当貧弱(8bitマイコンとか)でもない限り自己満足の世界だと思う。
必要に迫られない限り、intでいいと思う。
何かの理由で for (i=9; i>=0; --i) ってやるには、intしかダメ
>>434 目一杯速くしたいんだが、小さなループなら手動で展開した方が速いかな?
>>436 環境によるとしか言えないかな。
基本的にその手の最適化は、実測しか確認方法が無いんだよ。
cpuやキャッシュメモリとかにもよるし、ループ内の処理やメモリアクセスの仕方とかにも相当影響を受けるからね。
register int にするとか
いっそ自分でアセンブルすればよい
>>436 環境とコンパイラによるな。
マイコンの話だけど良い開発環境では中間生成物のアセンブラが見れるからそこで見たらわかるんじゃね?
だいたいその場でしか使われないローカル変数はメモリ領域に場所とらずに、
レジスタ内で処理するようにコンパイラで最適化されるんじゃないかな。
>>441 余程でなければどのコンパイラでも出力できるでしょ
それなりに慣れてないと何書いてるかさっぱりだと思うが
>>432 for(auto i = 0; i < 10; ++i)
>>443 それ自動的にintとかにならない? 小さい数字だと自動でuint8_tみたいになったりするの?
>>433 floatの方が精度が低いから、例えば2^31-1から1を引く処理をfloatでやろうとすると結果が得られない。
逆に、int(32bit)の方が値域が狭いから、2^31-1に1を足すとオーバーフローしてしまう。
>>435 int以外でもshortでもsigned charでもいいのでは?w
>>436 賢いコンパイラを使うのが一番。ループのアンロールも行なってくれるし、
レジスタが豊富なCPUなら並列演算を行なうようにしてくれる。
>>443 そもそも何を期待しているんだ?
C++のautoと違って、Cのautoは只の自動変数であることの宣言だぞ。
>>435 >何かの理由で
unsigned だと i>=0 は常に真だからだろw
>>448 私のレスも含まれているけど、何を抽出したの?
>>448 自演だとでも? (ヾノ・∀・`)ナイナイ
>>448 お前、精神病だろ
でも、自演認定するやつは大概、どれとどれが自演なんだと改めて聞くと、まず答えないんだが自分から列挙するとは
そこが珍しい。
それとも自演認定以外の列挙か?と一応書いておこう。
ワロタ
最近のcygwinはwin32apiでウィンドウ出したりできるんだな 普通にゲーム作れちゃうじゃん
でもCygwinなのにWinAPIってそれどうなのw
cygwinの環境でDXライブラリって使えるのかな
>>453 作れるけど
VisualC/C++と比べ処理速度が犠牲になる可能性有
>>456 win32apiを直接呼び出すのにどうして処理速度が犠牲になるの?根拠はなに?
>>458 最適化されない
cygwinであればcygwin1.dll経由になるのも原因
mingwならその心配もないようだが
>>459 cygwin1.dllはWindowsにないシステムコールやライブラリ関数を
実現するためのもので、win32api使うには必要ない
>>459 win32api コールにどんな最適化があるというの?お前さん、最適化という言葉でごまかしていない?
あと、cygwin1.dll は POSIX のエミュレーションであり、 win32api をコールするのに必要ないためそもそも経由しない
とか書こうとおもったら、-mno-cygwin オプションは gcc3 で打ち止め、gcc4 から win32api を使用するなら
最初から mingw を入れろということのようだね
462 :
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/05/25(日) 17:10:45.16 ID:kKmqkkdK
i686-pc-mingw32-gcc -mwindows test.c とコンパイルするとcygwin1.dllなしで実行できるぽいね
win32apiとPOSIX apiを混用したいからこそのcygwinではなかったのか
465 :
デフォルトの名無しさん :2014/05/26(月) 22:20:08.04 ID:YyXvpck3
ファイル保存の時上書き保存じゃなくて、開いて保存の場合 異常に遅いんだけど、編集する感覚で0.1秒くらいでファイル新規保存 するようなソフト作るのって無理ですか?Cでです。
PCの起動時にOSを起動じゃなくて、ファイルエディタをかわりに起動して実行させれば糞速いんじゃないですかね つまりブートロードで起動させて使うソフトを作ればいいんですよ 全ての資源をエディタのみで使えるので爆速に間違いないですよ 昔はフロッピーディスクで起動するソフトウェアなどもありましたし
>>467 そのファイルエディタはOSが無いと動かないんですがそれは
>>465 エスパー3級の俺の見立てでは
ファイルダイアログを開くのが遅いといっている気がする
シェルに干渉するソフトを無駄にたくさんインストールしているのではないか
ちなみに
>>467 は3級程度では太刀打ち出来ない
昔々のROM BASICでもあるまいに w
471 :
デフォルトの名無しさん :2014/05/26(月) 23:24:54.13 ID:YyXvpck3
そうですダイアログです 何でダイアログ開くのに3秒以上かかるんでしょう… ガジェットみたくスライドして出てくるみたいな感じは無理なんですか?
作れは?
必要なプログラムやデータがRAMに入ってないんだろ。
win7を使ってるがファイルの保存のダイアログが開くのはアプリの起動単位で初回だけかな
訂正 win7を使ってるがファイルの保存のダイアログが開くが数秒かかるほど遅いのはアプリの起動単位で初回だけ
定型のダイアログなんかはどっかのDLLに入ってるんだろ。 そのDLL読み込んで、ドライブやフォルダ情報読み込むのに数秒かかるんじゃね? で、2回目からはある程度キャッシュに溜まってるから読み込み処理すっ飛ばすから速くなると。
コモンダイアログの保存ダイアログを開いてるはずだから速いはずなんだけどね
思い込みじゃね?実際に遅いんだから。
>>477 明らかにそれ以外の無駄な処理が走っている
バージョンが上がる毎に無駄な機能が増えていくケース
>>477 だが、しかし、待って欲しい。
>>465 さんは、どのOSでなんというエディタを使った場合なのかを一切明らかにしていない!!
この状況において、
>コモンダイアログの保存ダイアログを開いてるはずだから
というのは、あまりにも判断が時期尚早との批判も免れ得ないのではないか?と言われても致し方あるまいのでは?
1回目が遅いのではない。 2回目以降が速くて1回目が本来の速度なのだ。
HDDのスピンが止まってたとか、全ドライブの情報取得に時間かかったとかじゃね? 2回目以降はキャッシュから情報取得するから速かったと。 1回目から速くしたいならドライブ情報取得しないダイアログを自作してみたら?
全ドライブをSSDにすれば速さの違いは気にならなくなる
ディレクトリの中だけじゃなくて個々のファイルの中を見に行って 詳細情報やらアイコンやらを表示しているケースだろう zipとか動画とかサーバーと同期させるツールとか 実際にその現象にぶち当たったことがなければ 的はずれな答えしか出てこない
485 :
デフォルトの名無しさん :2014/05/27(火) 14:25:58.24 ID:wfBaHMaP
HDDの寿命って数年って言われてますけど本当ですか? USBメモリですら4本もってますが4本とも3年以上持ってます。 C言語の話と関係ないですがSSDとかのはなしもあるし聞いておきたいです。 どうなんでしょう? 家のパソコンですが 8万で買ったエヌイーシーのデスクトップ 毎日6時間使い続けて 未だにHDD壊れず、8年経過 4万で買ったノート、4年使い続けて動作鈍くなったと感じるけど リカバリーで常にスピード安定、HDD壊れず どうなんでしょう?
数年のソースはどこ?
稼働率と運次第。
関係ないって判った上でスレ違いの話を強引にするってのもなかなか
もろ精神病ぽいな
490 :
デフォルトの名無しさん :2014/05/27(火) 20:31:49.05 ID:5raxgz7B
C++はスレ違い
たぶん本人はC書いたつもり
>>490 だいたい読んでみた。
教えなくはないが、本当に自分で書いたか証明するために、
何を目的にどの変数を何の目的で使ってるか説明してみろ。
494 :
デフォルトの名無しさん :2014/05/27(火) 21:39:40.18 ID:5raxgz7B
>>491 >>492 >>493 すいませんスレチのようでした
プログラムの内容はコメントの通りです
中身の輝度値と中央値は色々模索した結果で自分でもよくわからないのです
だから聞こうと思ったんであります
http://nozomi.2ch.net/test/read.cgi/prog/1399958017/173 >>また若いうちは、a=0;b=1;・・・z=26;と体力でやっていたが
>これを解消するには
>struct{
>int a;
>int b;
>・
>・
>}alph;
>とやってからアドレスを取得
>int *p = &alph.a;
>for(i = 0; i < 27; i++){
>*(p+i) = i;
>}
>一個一個イコールでいれる場合(a=0;b=1;・・・z=26;)と比べ、
>宣言の書き換えがいり、コードを書くエネルギーはいるだろうが、
>間違いが少なくなる
プロはこうやるそうですが、これで破綻しないのはなぜですか?
>>494 自分でもよく分からんって、それプログラムとして意味あるんですかね……
最頻出と中央値の処理は「コードを読め」としか言いようがないなw
どうでもいいけど画像のピクセル数程度の大きさの配列をバブルソートしたくないでござる
bmpファイルって細かな形式があるけど、コードを読む限りだと8bitに決め打ち?
色々言いたいことはあるが、せめて「256」とかのマジックナンバーは無くそうぜ……
>>497 とりあえず一文字変数を大量に宣言して知らん顔する奴は屑だと思う
お前はそれで本当にいいと思っていたのかと小一時間問い詰めたい
人差し指でしかタイプできないので一文字変数は大事だよ。 残業になっちゃうじゃないか無意味に長い変数名なんて…
ところで、構造体内のメンバがintだと、intのサイズ単位でメンバごとにきれいに並ぶって保証されてたっけ?
処理系のデフォルト次第だな。ほとんどの処理系は詰め合わせを制御できると 思うけどデフォルトがどうなってるかはチェックしておくべきだろうね。
そんなの設定で変更できる処理系あるの? 変更したりしたら、過去のオブジェクトファイルとかライブラリと互換性まったくなくなるじゃん
プリプロセッサでパディングの明示指定する のではなく コンパイラへのコンパイル作業時のオプションでの制御か
メンバへのアクセス頻度で整理されたりはしないのか
手元に規格書が無いので確認できないけど sizeof int = 2,4,8 alignment = 1,2,4,8,16 なので常識的に考えて詰め物が必要になるケースはないよね
組み込みはCPU品種に合わせて調整・確認が必要だろ。 どこまでCの範囲にするかは微妙だけど
struct xxx {・・・} x; fread(&x, sizeof &x, 1, fp); 昔は、こういう構造体を丸ごとリード、ライトするような書き方が横行してたな。 今でもかもしれんけど。
GF(2)上の多項式のうち、既約であるものを列挙したいのですが、既約かどうかを判定する方法がいまいち分かりません
とりあえず、ここまで作りました
ttp://ideone.com/9qtVWS 上記コードの int isIrreducible(int poly,int m) で既約かどうかを判定しています。
明らかに既約でない場合(polyが偶数の場合)は除外していますが、それ以外の場合が分かりません…
どなたか、助けて下さい……
すみません。事故解決しました。
的外れの質問かもしれませんが、javaにはドラッグの関数がありますよね? javaでは関数ではなくてメソッドですが… Cも標準関数を組み合わせる事でドラッグ(物体を移動)の機能を持たせる関数を 作る事が出来るのでしょうか?凄い疑問に思っていたので質問しました。
できます
考えましょう
物体を移動させるんなら、ロボットか何か繋がないとね
まず物体を定義して下さい。
オッパイかオマンコです
typedef struct { double position_x; double position_y; double position_z; } Oppai; void idou(Oppai *oppai, double x, double y, double z) { oppai->position_x += x; oppai->position_y += y; oppai->position_z += z; }
>>511 そもそもCの"標準関数"には画面描画もマウス操作も含まれない
WindowsなりXなりプラットフォームの機能を使わないとダメ
>>519 端末にprintfで文字表示はwindowの機能じゃないんでしょうか?
分からない C言語例えばcygwinだと、OSは全く関係ないんですか? OSにcygwinをインストールしてるからprintfはOSの機能では? 正確に言うと、C言語の定義をもったOSの機能?
printf()はこう作れという規格に基づいて OSの機能を使って実装されてる
>>522 分かりやすい、
つまりprintf()も
windowabc()
windoudef()
................
とwindowsの関数に置き換わるってことですね?
で分からないのはDirectXがOSを介さないのは何故ですか?
Directx のdirection()関数があるとしたら、こう作れという規格に
基づいてOSの機能を使って実装されるのでは?
どう実装するかはC言語のコンパイラ開発者次第だし DirectXを使って実装してるコンパイラもあるかもしれんし そんなもん出回ってるCコンパイラ作ってる開発者ら本人に聞け
だいたい実行ファイルexeにコンパイルした時点でexeファイルに使うAPIの情報とか名前そのままで入ってるやろ
prinf()でHelloWorld出すだけのexeを解析でもすればいい
>>525 いやDirectX OSの機能を介さないって意味が分からなくて…
OS上で動くプログラムは全てOSの機能を使うってことになるので
OSの機能を使わない事なんてあるのかなと…
何の機能使ってるんだろうか…
あ、apiは使ってないってだけでOSの機能は使ってるってことですか そりゃそうですよね
531 :
デフォルトの名無しさん :2014/05/28(水) 20:30:54.77 ID:AwYxqhpy
ID:BR1Tkgwo の言ってることはデタラメだから信じない方がいい
全ての言語はそのOS上で動くならOSの関数に変わると思うのですが apiを使わない場合どうやってコードを実行できるのですか? 純粋な疑問です、というかいつまでたっても理解できない。
OSのサービスが必要なければAPIは使わないだろう。 APIを使わずにサービスと同等の処理をするのは現実的に 難しいだろうな。
ID:BR1Tkgwo 知ったか乙
>>532 DirectXもOSご提供の関数だよ。
OSの関数って言うのが何の事を言っているのかは良くわからないけど、別にWin32apiだけがOSの関数ってわけじゃないし。
特定条件下で特定用途に特化させたapiの一つがDirectXね。
>>535 OS提供って、windows提供ってことですか?
別にWin32apiだけがOSの関数ってわけじゃないし。 ↑ ??? windowsが提供する関数ってwin32apiだけじゃないんですか?
538 :
デフォルトの名無しさん :2014/05/28(水) 20:56:52.09 ID:Fg+maZpD
昔はVRAM直書きしていただろ。あれはAPI (INT21H/BIOS) 使用してないよ。 DirectXはよくわからんけど、マルチタスクの場合、独占使用権の管理はOSに任せないといかんわな。 直接描画するのは好き勝手にしてもかまわないけど。
>>536 そだよ。
って言うか、windowsでしか提供されない。
DirectXもOSの一部だと思っておけ。
>>537 えっと、win32apiってのは、windowsであれば、ほぼ必ず使える基本的な機能の関数群の総称ね。
それに対して、DirectXってのは動作環境に条件が着くの。
その条件さえ満たせば、(汎用の)win32apiより高速に動作するとかね。
想定する使い方が違うだけで、どちらもwindowsというOSが提供してくれる機能だよ。
>>539 え??macやunixは?
>>540 なるほど
標準スタンバイがwindows、directxもOS化するってことですね
何か凄い理解した気がする
面白い釣り師が現れたものよ
>>541 なるほどー、DirectXはコードがそのままwindowコードに変換されず
windowsが直接処理できるってことなな?
例えばjavaのsystem.println()関数は、
windowコードもしくはdirectxコードに変換するってことですよね?
ただ疑問なんですが、macやunixもwindowコードみたいに、osで直接
処理できるコードはないんですか?
macもunixもOSですよね?
windowしか提供しないってことは
macのコードもwindowコードなんですか?
>標準スタンバイ 変な単語作るなよ。
>>544 ちょっと勘違いと言うか、ソフトウェア一般に関する基礎知識が足りていないんじゃないかな?
コードの変換って何の事?
>>547 コードをコードに変換する事です。
cのコードがwindowsのコードに変わって、最後はデバイスドライバから
アセンブラから機械語に変わるんでしょう?間違ってるでしょうか?
>>546 すいません。
OSもCで書いてあるとか言ったら腰抜かしそうだな
頭痛いぐらい間違ってるな。
>>549 OSはミドルウェアで書かれてるんじゃないですか?
イメージ
printf→windows()........→device()......→pop() push() add()→
2b4a6c.....→101010101010101100110100110101
こんな感じですが間違ってますか?
>>549 OSを書くためにCが造られたとも.... (それだけじゃないだろうけどね)
ワロタ
インタプリタをイメージしてるようだな
>>549 昔のCはCの次がOSだったので、CとOSで協調しながらwindowsコードを
作ったんじゃないでしょうか?
つまり昔のCは間に何も挟まないC,今はOSを挟むCって事じゃないですか?
557 :
デフォルトの名無しさん :2014/05/28(水) 21:51:05.02 ID:cE7yyxsV
Windowsの場合 コンパイルしたら、拡張子が .o .obj のファイルができる。 リンクしたら、拡張子が.exeのファイルができる。 もうコンパイラがなくてもこれをそのまま実行できる。 ふつうのテキストエディタでは、.exeを編集できない
お前ら、たまにはCの話もしろよ…
OSは普通バイナリー(マシン語)です。 Cなどのコンパイル言語も(対象ハードの)マシン語のオブジェクトファイルに変換します。 アプリケーションはコンパイルされたオブジェクトファイルと実行環境に合わせたライブラリをリンクさせて生成(exe化)されます。 OSが提供する機能はアプリケーション実行時にアプリケーションが呼び出します。
え??? やっぱ分かりませんw CはOSに変換されるけど、OSはCで作られたんですか? 混乱するww OSは機械語を組み合わせて作ったんじゃないんですか?
もう飽きたから はよ釣り宣言しとけ
>CはOSに変換されるけど これが間違い。 Cはマシン語に変換されるだけでそれがOSになるかアプリケーションになるかは その後の処理しだい。
>>562 釣りじゃないです、プログラミングはできますが
言語が内部でどうなってるか考えた事もないので…
文法本に内部の事ってあんまり書いてませんし
配列はスタックとか、動的配列はヒープとかその程度しか内部事情は知りません
>>561 Cを変換(コンパイル)すると機械語になる
OSも、おまえの書いた糞コードも機械語
あとはそれらの連携
>>563 printf()関数はwindowsコードに変換されないんですか?
printf()という目的を達成するために何百種類ものwin32api関数が
生成されるんじゃないんですか?
AdvancedWindowsでも買って読めば? (投げやり
"windowsコードに変換"という変な概念とか、 "関数を生成する"という変な概念を捨てろ。 printf()はライブラリに入っている関数で、 お前の糞コードにリンクされている。 お前の糞コードがprintf()を呼び出したら、 printf()はwindowsのサービスを(やや特殊な形式で)"呼び出す"。 windowsは既に存在しているプログラムで、 呼ばれたらそれに応じた仕事をする。
呼び出される事をコードに変換されるって思ってる人もいるし 解釈の違いじゃないでしょうか? windows関数が呼び出される=Cがそのコードになるっていう解釈なんですが windowコードがCを機械語にするために仲介してることは間違いないんでしょう?
>>561 まず機械語(アセンブラ言語)と高級言語の違いは分かる?
今日日OSを全部アセンブラで書けるわけがない(現実的ではない)から、必要最低限を
除いた部分を高級言語(C言語等)で記述してコンパイル→リンク→実行ファイルとして使うわけ
毎度毎度決まりきった処理(画面描画など定型的なもの)を書くのは負担が大きすぎる
から、通常OSや他アプリによって提供されるライブラリやAPIを使ってアプリケーションを
開発する。コンパイルする際にアセンブラコードを吐いてからそれをテキストエディタ等で
読めば分かるけど、OSの機能とかをアセンブラ中で呼び出すことが度々あるのに気づくはず
さて、printf関数などは、C言語の仕様で決められた標準関数。「実装がどうあれ、
こういった機能を実現できるようにしてくださいよ」ってことで決められたものだ。で、
それを実現するためにWindowsならWin32APIとかそれより下のサービスとかを叩いて
機能を実現させてるわけ。「windowsコード」なんて謎の概念があるわけじゃないの。
全ての始まりは機械語(アセンブラ)。
つまり (Cコード+windowコード)=ソフト←やり取り→(標準スタンバイされたwindowコード)=OS こんな感じですか?間違ってます?
>>569 念の為にもう一度。C言語で書いたコードをコンパイラからコンパイルすると、
そのコードが直接機械語として翻訳される。で、その際にWindowsの機能を呼び出す
ための命令がちょくちょく挟まるけど、その「呼び出すための命令」も機械語。
どこから聞いたのか知らないが、「windowコード」なんて言葉は忘れることを強く勧める
>>570 機械語はハードのNANDの1と0のスイッチの切り替えの組み合わせですか?
「printfは実装がどうであれ、こういった機能を実現」
↑
非常に分かりやすくて本にも載ってない説明です、ありがとうございます。
これは分かります。もっと言えば、用意された端末に表示するというのも
加わりますよね?
自分はwin32apiとかwindowが提供するコード全般をwindowsコードって呼んでます。
すいません。
windowコードなんて概念は存在しない。
お前ら病人の相手して人生を浪費しないでください。 チョンや馬鹿の相手をしても何も得られません。
>>547 概念じゃなくてwindowというOSが提供してるから単にwindowsコードって
読んでるだけです、windowsのCD-ROMに刻まれた1と0のくぼみの組み合わせを
windowsコードって呼んでます…
ここまでwindowsにこだわっておきながら
>542 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/28(水) 21:09:02.01 ID:uT/cI3NV [10/20]
>
>>539 >え??macやunixは?
なんて投稿があったのを思い出すと怒りしかわいて来ない。
自分語使って話すな
>>573 >機械語はハードのNANDの1と0のスイッチの切り替え
どのレベル(段階)での意味か分からんが違うと思われ
CPUの仕組みとか言い出したら本格的にスレ違いかと
>自分はwin32apiとかwindowが提供するコード全般をwindowsコードって呼んでます。
!?
世界中でID:uT/cI3NVしか使わない単語 > windowsコード 二度と使うな! NGワード行きだ。
マイコンキット買ってきて、組み立ててみるところからやり直せ
そいつは自分の持ってる語彙かき集めて、 必死で話繕ってるだけだから相手するだけムダだよ。 釣りに見えてその実ガチだから可愛そうではあるが。
>>582 断片的な知識だけが多すぎて纏まらない
例えばカーネルっていう言葉も言葉だけは知ってるみたいな
OSの最下位プログラムみたいな認識ですけど
printf(標準ライブラリ)→windows()........(win32api)→device()......(ミドルウェア)→pop() push() add()→(アセンブラ) 2b4a6c.....(16進機械語)→101010101010101100110100110101(機械語) このイメージが間違ってると言われたらさすがにショックは感じざる負えないです これだけは自信を持って信じてました
こういうやつもコミュ障にはいるのかな?
>>583 だったら言葉理解するところから始めなよ
わからないまま語ってるからわけわからんのだよ
そういうのって知識って言わんよ
>>588 そいつは人より頭が悪いんだろうな。
ちょっとずつ間違って覚えちゃうんだろう。
まあそういう奴いるし、可愛そうだが仕方ない。
理解が遅いから覚えるのも大変なんだろうよ。
>自分はwin32apiとかwindowが提供するコード全般をwindowsコードって呼んでます。 頼むから自分用語を使うのだけは止めてくれ。話がわけわかんなくなってしまうんで
>>588 合ってることと合ってない事を区別して指摘してくれたら嬉しい
俺の言ってる事全部間違いですか?
>>591 ごめんなさい「windowが提供するコード全般」って呼ぶことにします
間違って覚えてるか 以前テレビで月の満ち欠けを理解してない理科教師だかの話とかあったな 色々な形の月がそれぞれ地球の周りをまわってるみたいな
>>592 それを人に平気で頼むところが一番腐ってるよお前は。
相手に負担を強いて平気なところ。
自分のために時間や労力を割いてくれた人に感謝する気持ちは大事だよね
ハードは1と0の組み合わせという事が分かってるから最初ハードを好きに弄る 弄り方を纏めたり、規則性をつける→機械語の出来上がり コンピュータの基本ってこれじゃないですか?
じゃ、俺に女紹介してくれ 感謝するで
>>597 今すぐブックオフにでも行って立ち読みでもしてこいや
おまえは本を読んで勉強してからレスしろ
とんちんかんな考え披露はやめれ
>>592 根拠おさえるということをすすめるわ
あとスレチだからな
俺の経験は、この種の人は精神病 マジで
その調子で、質問攻めで答えてくれるような場所があるかわからんけど C言語から遠ざかってるんで余所でやってくれないかな?
だれだID:uT/cI3NVをかまったやつは?
もう寝ろ。
最近この板、こいつが荒らしまわってないか? ずーっとトンチンカンなんだよ。 借り物の言葉でフワフワ。 とにかく徹頭徹尾トンチンカンなんだよ。 いろんなスレで出没してない?
>>602 元々統合失調症っぽくて言葉の使い方が分からなくなります
>>606 違いますよ、C以外の言語余りできないですし、次にできるjavaだけど
javaスレは過疎ってるから書き込みしません。
トンチンカン、借り物の言葉、これは認めます。
unixはCGIだから言語はスクリプト言語ですね pipeとかcat,whichとかhistoryですよね? windowsが生まれる前にunixでC言語のプログラミングってどうやって やってたんだろう?
ここはおまえの脳内を垂れ流すスレじゃないんですが
すいません、自重します。 とりあえずwindowが提供するコード全般が仲介しまくってることだけは 分かりました、有難う感謝してます。
>609 ggrks
>611 二度と顔出すな!
>>584 間違ってはいるがまるっきり出鱈目というほどじゃない
一つに繋げてしまうから訳わからなくなってるだけで
>>614 甘やかすな
それぞれの実体がさっぱりわかってないんだぞ
まとめたものをさらにまとめる、それをまとめる→高級言語の完成 これが言語のプロセスで俺の中のイメージです
>>609 >unixはCGIだから言語はスクリプト言語ですね
unixはスクリプトで出来上がっていると考えてます?
>>618 catとかpipe,historyとか今でいう高級言語みたいな感じですか?
unixはunixなりにwindowが提供するコード全般に相当するものが
あったんでしょう
C言語に関係ない話題を延々と続ける連中
windowsも色々な言語を扱える裏で、windows32api,windowsカーネルなどの 「windowが提供するコード全般」が連絡を取り合って処理を行っていたから。 unixも同じってことですよね?
自重するといいなが未だにこのスレに居付き全く悪びれる風もなくレスを続ける 流行りのファッションサイコパスというやつか
なんか罪の意識を感じずにはいられない。
すいませんこの話は自己完結という事で…
594 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/28(水) 22:41:50.14 ID:jgJmJNUO 間違って覚えてるか 以前テレビで月の満ち欠けを理解してない理科教師だかの話とかあったな 色々な形の月がそれぞれ地球の周りをまわってるみたいな 610 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/28(水) 23:01:39.97 ID:jgJmJNUO ここはおまえの脳内を垂れ流すスレじゃないんですが
今度はID:vA2c6Hl+かい?
一連の流れを追わない奴らが次々と釣られる
>>594 は暗にこのスレの連中の発言も正しい事を言っているかは疑問だと言っているのでは?
ここはC言語のスレ
puts("C言語で雑談すれば問題ないのでは");
printf("流れ的にはprintfの方が良さげな気がする\n");
windows("こんな関数使っていい?\n");
>>635 一瞬「え、そんな関数あるの?」ってググっちまったじゃないか……
窓関数(フーリエ変換)やWindow関数(SQL)ならあるんだけどね
printf()ってすごいね
前にディスプレイのOSが云々って質問したやつと同一人物かね?
>>606 専門板じゃないが
俺の見てるプログラミング系のスレにも日本語がおかしいのが湧いてるわ
unixはCGIだから(笑) CGIを使えるのはunixだけ!(笑)
64bitマシンか判定する方法ってsizeof(intptr_t) == 8とかでok?
>>642 それexeファイル作成時に確定しちゃうんじゃ……
(32bitなexeファイルだとsizeof(intptr_t)が当然4になる)
64bitマシン上で32bit用アプリ動かすと仮想的な32bitマシン環境上で走らされるんじゃないの?判定する意味ないんじゃ
Cはほぼコンパイルされるんでシステムのビットワイズには条件コンパイルで対応すれば いいんじゃないかしら?
>>644 その場合ってポインタのサイズは32ビットになるの?
ポインタのサイズが32なら32ビット判定で良いんだが
ポータブルなマクロとかありそうだが多過ぎてよくわからん
32bit分の入れ物しか用意してないんだから当然。 マクロはコンパイル時に解釈されるもんだから実行時のことは知らない。
WOWで調べろ
アセンブラレベルで調べるしかないだろうけど UNIX系だと判断不能じゃないかな? OS別ならシステム情報取得のライブラリとかないかな。
>>642 64bitマシンだけでは通じない。
実行しているCPUが64bitCPUかどうか判定したのか、
実行環境が64ビット実行形式をサポートしていることを判定したいのか、
自分自身が64ビット実行形式でコンパイルされたのかを知りたいのか、
また64ビット実行形式も一種類ではないし、アーキテクチャ(x64とかia64とか)も複数あるし
OSによるし、CPUによるし、仮想OSもあるし、何を知りたいのかを定義しないと
誰も答えられない
OS次第で実行環境を返すAPIぐらいあるんじゃないの。 CPUのbit数なんてのはCの仕様範囲外だから何かしら 言語仕様以外の方法を使うしかないだろうね。
こういう言い方すればよかったな ポインタのサイズが64ビットか32ビットかを知りたい マシンアーキテクチャやOSはどうでもよい これならどう?
それならsizeof()で可能でしょ。
コンパイル段階でポインタサイズは決定されるだろ。 配布はソース、インストール時にコンパイルってのを想定してるの?
sizeof(void *)でよくね?
事前定義済みマクロってので調べることも出来るらしい。
>>654 autoconfのconfigureの時に決めたい訳
実行環境関係なくポインタのサイズだけ知って何に使うつもりなんだろうか。
>インスト時にコンパイル 午後でこーだを思い出した
>>659 あれほんとうにコンパイルしてたの?インストーラにコンパイラ載っけてたの?としたら何?mingw?
なんだか信じがたかったし今でも信じていないなあ、そうそうこの前も再インストールしたっけ‥‥
とりあえずC言語スレの範囲外ってことで。
配列の初期化の時に A[0~255]=0 ; みたいに一気に0から255までの配列に入る値を決めることって出来ますか? for文はなしで。
全 0 で初期化するなら int A[256] = { 0, }; /* 省略されている部分は 0 扱いになっている */
int a[100]={0}; とか書くと残りの要素も0になる…と思う。
つ memset()
int a[256]={};でコンパイラがmemsetを呼ぶコードを生成することもあるね sparcのgccがそうだった。x86はrepで初期化するコードだろうけど
callocでも
669 :
デフォルトの名無しさん :2014/06/11(水) 18:30:46.81 ID:OXJX+SqI
1桁の整数をchar型の配列に1つずつ入れたいんだけどどうすればいいですかね
670 :
デフォルトの名無しさん :2014/06/11(水) 18:43:03.83 ID:84WXT5GV
ん? 2ケタ以上の整数を各ケタに分けて配列に1ケタずつ入れるんじゃなくて?
int a = 10; char c = (char)a;
char c[ ] = "\000\001.....";
>>669 char array[SOME_LENGTH];
があったとして、例えばこういうこと?
array[0] = 0;
array[1] = 1;
それとも、こういうこと?
array[0] = 0 + '0';
array[1] = 1 + '0';
char c[ ] = "\000\001.....";
675 :
デフォルトの名無しさん :2014/06/11(水) 19:14:22.40 ID:OXJX+SqI
具体的にいうと整数を2進数の文字列に変換したかったんです
>>673 最初は
>>671 みたいなやり方でやってたんですがうまくいきませんでした
先ほど後者の通りに入力したらしっかりと出力までできました!
Cから随分と離れてたんでchar型の細かいルールは忘れてしまったんですが、'0'は数値として足されて足し合わせたものがchar型として代入されるってことですかね
'0'は0という文字の文字コード。 数字は文字コードが連続してるので足し算するとうまいこと数値が文字になる
677 :
デフォルトの名無しさん :2014/06/11(水) 19:32:28.19 ID:OXJX+SqI
なるほど、助かりました
念の為に補足しておくと、文字コード表を見て'0'から'9'まで並んでなかったら使えないので注意。 まぁ、AsciiだろうとEBCDICだろうと数字文字は並んでいるけど。
仕様で並んでない可能性があるのはアルファベット
0が最後にある文字コードとかは存在せんのかな
>>681 Cでは0から連続してることが保証されてる
つまり。0x20,0x30,0x40,x050,x60,0x70の文字コードを認めいない宗派なのですか?
漢数字も連続で並んでないよ!
_人人人人人人人人人人人人人人人_ > そうなんだ、すごいね! < ´ ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ __、、=--、、 __ / ・ ゙! /・ `ヽ | ・ __,ノ (_ ・ | ヽ、 (三,、, _) / /ー-=-i'' (____,,,.ノ |__,,/ |__ゝ 〉 ) ( )
逆に考えたらいい 何でもいいから順に並んでいるものを数字として採用すればいい 最初は戸惑うかもだが しばらく使ってればすぐ慣れるよ
"0123456789"を入れたchar配列に添字でアクセスすれば流石に大丈夫じゃね? 漢数字なら、1文字辺りのバイト数を掛けて添字で。
1文字辺りのバイト数が固定だと誰が決めた? そういう石橋の叩き方をするなら char *kan[]={"〇","一","二","三","四","五","六","七","八","九"}; とかにしておかないと。
漢字はグラフィックであって文字ではない
するどい意見をありがとう
692 :
デフォルトの名無しさん :2014/06/12(木) 22:18:52.40 ID:9nauQpX3
>>688 おお、指摘ありがとう
そこまですりゃまず問題なかろうな
#include <stdio.h> int main (void) { int no; printf("整数を入力してください:”); scanf("%d",&no); no = 5 * no; printf("その数の5倍は%dです。\n" , no); return 0; } これの修正どころどこだい
fflush(stdout);を入れる
ちげーよ 全角のダブルクオートとか使うなと
ついでに括弧もな
別に要らんがな。
#include <stdio.h> int main() { int no; unsigned char buf[128]; printf("整数を入力してください:"); buf[0]='\0'; fgets(buf,128,stdin); sscanf(buf,"%d",&no); no = 5 * no; printf("その数の5倍は%dです。\n",no); return 0; }
親切にありがとう 修正後実行できた
701 :
デフォルトの名無しさん :2014/06/14(土) 06:09:41.08 ID:N0U7iM3x
違う scanf,sscanfの戻り値を調べるように修正しろよ
702 :
デフォルトの名無しさん :2014/06/14(土) 06:17:44.76 ID:N0U7iM3x
#include <stdio.h> int main (void) { int no; printf("整数を入力してください:”"); if(scanf("%d",&no)==1){ no = 5 * no; printf("その数の5倍は%dです。\n" , no); } return 0; }
エラーメッセージくらい出せよ
代わりに乳頭でもいいですか?
× > no = 5 * no; ○ > no *= 5;
それはどちらが良いというものでもない
最適化でどっちも同じになるだろうに。
小学校の掛け算の順序的な意味では × no = 5 * no; ○ no = no * 5; で、変数使い回しちゃうのもいただけない。
つまらん釣りだな
>>708 答えが最後にくるんだから、 no = 5 * no;で右から読むのが正しい
>>710 それはちょっと考えたけど割り算がなぁ…÷じゃなくて/だから違うといえば違うんだがそれ言うと×じゃなくて*だしうーん
no += (no<<2); って技術は時代遅れかのう...
・シフト演算にするだけのようなピーピングホール最適化は、相当トロいコンパイラでもやってくれる ・a + b * 4 を、うっかり a + b << 2 としてバグを入れてしまう危険がある 以上の理由で「やるな!」
ここまで no = no + no + no + no + no; なし
すげえ否定されてる感じになるな
typedefの用途がよくわからないんですが・・・ 何のために必要なんですか?
>>716 typedef struct ABC ABC;でstruct ABCのstructを省略できる。
関数ポインタの型はややこしいので名前をつけたりする。
ややこしさを半減する typedef double (*fptr_t)(int); /* int を引数に double を返す 関数のポインタ を 1つの型として別名で呼ぶ */ fptr_t array[10]; なんかしらんけど 10個の配列 なんかしらんけど の正体は 「int を引数に double を返す 関数のポインタ」
>>718 このとき、
型 fptr_t が宣言された、と考えていいのですかね。
>>716 typedef にのご利益はあまり感じられない
>718 も普通に
http://codepad.org/xm87ZqO7 と書いてなんの惑いもない
(a + b + c)(x + y + z) を計算するのに、いちいち 「A = a + b, X = x + y とおいて」 とかやらないだろう?
宣言を頭(優先度の高い順)から素直に読めば、あるいは書けばいいだけだ
何度も型名がでてきたり、宣言が別ファイルになったりするとないとわからなくなる あと、型が変わる可能性があるときとかに互換性保つ時にもつかう
そこでIDEやらエディタという文明の利器がある
使ってみりゃどこで便利なのかわかるよ。 要は抽象化だよね。なんかいろいろあるものを一つの概念にまとめてしまう。
型の実装を隠したい時かな
まあ C なら stdio.h の FILE みたいな使い方はあるな
typedef enumはよくやる
トゲゾーとサンダーを回避できるアイテムを常時所有しとけよ 何度でも使用可能で1度発動させたら数秒間のみ有効になるとかな 他の人のアイテム所有状況を確認する技術で差がつくようにすればいい
oops
C言語の開発環境って Visual Studio(統合開発環境) テキストエディタ+コンパイラ があるけど、どっちがいいの? あとVisual StudioってVisual C++と違うの?
Visual Studio って統合環境(←プログラマー向けのアプリケーション)で使用できる言語には、 Visual C++、Visual C#、Visual Basic、Visual FoxProとかある。 統合環境がなければ、メニューすら作れないってのがオチでは?
Visual Studio って統合環境(←プログラマー向けのアプリケーション)で使用できる言語には、 Visual C++、Visual C#、Visual Basic、Visual FoxProとかある。 ↑これって、プログラミング言語なの?統合開発環境の名前じゃないんだ。
Visual BasicはVisualまで含めて言語だけど、Visual C++は言語はC++だし、 難しいなぁ...
結局、C言語の勉強する上でベストな開発環境は何がいいの?統合開発環境じゃなくて、テキストエディタ+コンパイラで開発したほうがいいのか。それともどっちでも同じなのか。情報が色々ありすぎてわけわかんない。
Win上ならVisualStudioでいい
純粋にC言語やりたいならCygwinでも入れてgcc使えばいいんじゃないか テキストエディタはお勧めしない、せめてEclipse CDTを使おう
Windows環境でVSを避ける理由が分からない
まずはどれでもいいからひとつ使ってみて、こんなことやりたいと言うのが見つかったら、またおいで
gccだけはどのOS上でも動いてるんじゃないかな
>テキストエディタ+コンパイラ ウィンドウの操作が出来る事前提 pathの概念を知ってて、かつコマンドプロンプトでの操作(ディレクトリの移動等)が が出来ないと >統合環境 便利なんだろうけど、環境設定ではまると統合環境の勉強してんだか 言語の勉強してんだか判らなくなってしまうことがある
vimが最強でFA
DOS時代はテキストエディタ+コンパイラで作ってたけど、 もう統合環境のデバッガ無しじゃやっとれん。
もうコードコンプリートと構文解析がないと怖くて書けないよ
コードコンプリートとかまだ売れてんのか 下巻まできっちり読んでるやつそんないないんじゃねえの 今のトレンドだとリーダブルコードだろう
いや入力アシストの方な
>>735 C++とかならMinGWやCygwinでgccが有効だけど只のCならTCCも手軽で良いぞ
最適化が駄目なのとC++が使えないのとインラインアセンブラがGAS系なのは微妙だが、
入れるの楽だしコンパイル速いし出力ファイルサイズも小さいしスクリプト言語っぽく使えるのも便利
>>738 動くOSの数はトップだろうけど、どのOSでもって程かというと微妙
組み込みOSだとクロスコンパイル主流で、そのOS上では動かさない気が
入門書のサンプルをコンパイルしてみたいというぐらいの ことなら codepad.org とかもあり
Borland C++ Compiler 5.5 + WIN32API で大抵のことはできるよ。無料な。
あら、無料になったんだ
構造体のポインタなんですけど switch(c->type) これは、アドレスを指しているんですか? それとも実数の方ですか?
cのメンバーtypeの値
ありがとうございます
動かせばわかるだろうに
アロー演算子でぐぐる
switch( (*c).type ) と同じな。
関数の仮引数宣言で宣言した変数も関数の中だけの 自動変数なのですか?
パイプをpipe()を使わずに書きたいのですが、その場合プログラムの出力が入力側のプログラムに渡されるのは入力側の*argv[]ですか?
例として、 ./ex1.c | ./ex2.c この時、ex1の標準出力がex2に渡ると思うのですが、ex2のどの変数に出力が格納されるか知りたいです
連投すみません 例えばRubyでは、 # ex1..rb puts "hello, world" # ex2.rb s=gets print s ruby ex1.rb | ruby ex2.rb この時、標準出力にはex1から渡ってきた文字列がex2のプログラムで出力されているように見えるのです
>>756-758 いいえ、標準入力です。
なので、fgets(buf, sizeof buf, stdin)と言った取り出し方が多分Rubyの例と似た結果になります。
>>759 ありがとうございますm(_ _)mおかげさまでよく理解出来ました。パイプについて、知識が足りませんでした。
Cygwinとgccのダウンロードの仕方がわかりません?詳しいやり方を教えてください。
>>761 鼬害です。
cygwinのスタートアップをダウンロードして、スタートアップでgccにチェックを入れるだけだ。
それさえできないなら向いてないからやめとけ。
プログラマになるなら、わからないとかできないとかいうのをやめるべき こういう手順でやったけど、ページが404になっていてダウンロードできません ダウンロードしたけど、インストール時になんとかというエラーが出て止まってしまいます みたいに、自分のやったことぐらいかけ
>>764 setup.exe 64を押してダウンロードして実行したと思うんだけど、そこから先が意味不明。パッケージはgccの何を選べばいいかわからないし、パッケージのダウンロードもできてなかったと思う
cygwinのインストールなんてネット見りゃやり方転がってるわ そもそもC言語の質問じゃねーし
>>766 上でC言語勉強するならCygwin落としてgcc入れればいいって書いてあったんだよ。
>>767 Windowsでそのまま動くgccもあるよ
インストールできた。Cygwinを立ち上げたけど自分の名前がでてきたんだけど、ユーザー名がでるのは普通なの?
WindowsならVisualC++いれとけ
error: expected ‘)’ before ‘*’ token これは何が原因ででるんでしょうか?
セミコロン忘れとよんだ
Cygwinでhelloworldが表示できない、"が間違ってるのか、記号や改行が違うのかわからない
だから、自分がやったこととか表示されたエラーだとかも報告できないような間抜けは PC初心者板でも逝けよ。 つーか、自分の端末にコンパイラを入れるよりもいっそideon.comでも使った方がましだろ。
続きです 番号: 4 名前: 野々村議員 年齢: 22 身長: 168 体重: 70 出身地: 大阪 特技: メルトダウン会見 番号: 3 名前: 佐村河内 年齢: 20 身長: 162 体重: 55 出身地: 広島 特技: 人狼 番号: 2 名前: ASKA 年齢: 21 身長: 160 体重: 52 出身地: 福岡 特技: キメ●ク
19, 26 行目 profile を Profile に 32 行目 > を < に
>>782 できました!
ありがとうございます<(_ _)>
784 :
デフォルトの名無しさん :2014/07/10(木) 11:50:09.32 ID:iUfsrIHD
お探しのページは見つかりませんでした。
1200がデッドラインだったんじゃろ 南無…
以下のプログラムを cygwin上で $ g++ -Wall program.c $ ./a.exe で Segmentaion faultになります… (main() では hoge()を呼び出すだけです) 何がおかしいのでしょうか? FILE fp in NumberOfData void hoge(void) double time; fp = fopen(filename, "r"); if(fp == NULL){ fprintf(stderr, "hoge.data is not found. Program teminated.\n"); } fscanf(fp,"%lf",time); printf("Time_sim: %lf\n",time); fscanf(fp,"%d",&NumberOfData); printf("NumberOfData: %d\n",NumberOfData); fclose(fp); } 以下 hoge.dataの内容 0.000000 3570 0 -0.039900 0.000100 0.000000 0.000000 0.000000 6.539697 :
そういうときはな、何行目でエラーになったかデバッガでしらべるとか printf入れてどこまで表示されるかとかな 人に聞く前に最低限そのくらいはな 思いつくぐらいの頭がないとな 向いてないから死ねといいたくなるよね
FILE *fp;とかセミコロンが無いとか括弧が無いとか おかしいところだらけ。どうせ、手作業で書き写したときのミスで 重要じゃないと思ってるんだろうけど、そういう姿勢がよくない。 一見してあやしいのは、fscanf(fp, "%f", &time);
>>788 ,789
ありがとうございます.デバッガというもの初めて使いました.&timeにうまくいきました.
fpがNULLのときに脱出してないのは只の書き写しなんだろうか。
関数に渡す引数の数に上限ってあるんですか? まぁあまりに多くなるようなら構造体や配列のようにひとまとめにしてからにした方が 良いのでしょうけど。
特にないよ。 但し、余り多くなるようなら、寧ろ関数のI/Fを見直すべきだ。 本当にそこで切るべきかどうかをね。
スタックサイズなんかな
>>795 それ、仮に引き数を構造体に纏めて同じだけ消費するよね。ポインタ渡しにするなら話は別だけど。
スタックに問題なくてもパーサにだって物量に制約がある場合がある。 C99では引数が127個でもコンパイルして実行できるようにしろと要求されている。
上限があるか気になるなら自分で試せよ そして結果を書き込めよ
実はID:3tXoGCWWが一番気になっていて(ry
>>798 一般論あるいは仕様として上限があるかの質問なのに
特定の環境で試してみろって、このスレにいる必要ないよ
5.2.4.1 Translation limits - 127 arguments in one function call
>>796 構造体は(環境によるけど)Pack できるけど、引数で Pack できる環境ってあるっけ?
逆に引数は一部をレジスタ渡しにしたりもするし。
要するに
> それ、仮に引き数を構造体に纏めて同じだけ消費するよね。
は、ダウト
それは実装上たまたまそうなっているものもあるだけ
ん? 一つでもあったらダウトでしょ?
どっちもダウト
ダウトって何だよ、はいダウトって
トランプでダウトってゲームがあって、ダウトってのは嘘って意味なんだけど以下略
>>807 doubt『疑い』, 『疑う』
●『疑い』, 疑惑; 疑わしさ, 疑問
●を『疑う』, 疑問に思う
確実に誤りレベルのことでも「ダウト」としか指摘できない程度の奴
未定義だからどうでもいい
ダウトの意味も知らなかった
>>809 が不憫だわ w
807はトランプの場合の話だから以下略
hide out
間違いに対していつもダウトと言ってる奴が 擦り付けに必死w