■ 2ちゃんねるは、ここのサーバを使ってるです。。。
 .jp ドメインお持ちのお客様大歓迎。maido3.jp
 .fm 取得代行します。(US) maido3.fm
 .ca 取得代行します。(US) maido3.ca
 .com .net .org 取得代行します。(US) maido3.com
 .cc .to .tv 取得代行はじめました。NEW
人気サイト
月々1,000円からの BinboServer.com 2ちゃんねるも使っている Big-Server.com
>> 2ちゃんねる、サーバ監視所

■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
C言語なら、俺に聞け! <13>
1 名前: ハイソサエティーハッカー日下部陽一 投稿日: 02/02/18 09:04
おれは39才、22年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったらオレに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419

K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419

・前スレ C言語なら、オレに聞け! <12>
http://pc.2ch.net/test/read.cgi/tech/1012348974/l50



2 名前: デフォルトの名無しさん 投稿日: 02/02/18 09:06
hayasugi


3 名前: デフォルトの名無しさん 投稿日: 02/02/18 09:25
>>1
ぜんて?


4 名前: デフォルトの名無しさん 投稿日: 02/02/18 09:37
すべて→全て→ぜんて


5 名前: デフォルトの名無しさん 投稿日: 02/02/18 09:44
>>1って「全て」を「ぜんて」と読むと思ってる人なの?外国人?


6 名前: デフォルトの名無しさん 投稿日: 02/02/18 10:02
>>5
ネタだYO!!(w

#マジレス カエシチャ ダメ ダッテ


7 名前: デフォルトの名無しさん 投稿日: 02/02/18 10:13
愚問一発お答えください。
「明解c」を読んだら普通はどれくらいのレベルのソフトが作れるんですかね?
この1冊でフリーソフトで公開できるくらいのものが作れるんでしょうか?


8 名前: デフォルトの名無しさん 投稿日: 02/02/18 10:30
>>7
フリーソフトって、いろんなレベルがあるしなぁ。



9 名前: デフォルトの名無しさん 投稿日: 02/02/18 10:31
>>7
どれくらいってのがどんなもんか分からんけど
Hello、Worldだってフリーで出そうと思えば出せるっしょ。

君の事を知らないんでなんだけど
基本的に入門書一冊読んだくらいでは無理。


10 名前: デフォルトの名無しさん 投稿日: 02/02/18 10:36
>>8-9
どうもありがとう。
他にどんなことしていけばいいですかね?
「明解c」にはifとかwhileとかの説明は載ってますが
ある程度のプログラム?の作り方とかは書いてないみたいなんですけど・・・
K&R読んだら作れるんですかね?


11 名前: デフォルトの名無しさん 投稿日: 02/02/18 10:39
>10
なんか根本的にカンチガイしてないか


12 名前: デフォルトの名無しさん 投稿日: 02/02/18 10:39
>>10
K&R読んだら作れるようになるということはないよ。
演習問題を解くのは力になると思うけど。

ソース公開されてるソフト探して
解析したり改良したりするのがいいんじゃない?


13 名前: デフォルトの名無しさん 投稿日: 02/02/18 11:06
>>11-12
違うんです。文法を覚えた後の設計図?みたいなのの書き方はどうやって身に付けていくんですか?




14 名前: デフォルトの名無しさん 投稿日: 02/02/18 11:11
だから>>12の言うように
他人のソースをいっぱい読め。
で、なんでもいいから作り倒せ。

設計図と言うとUMLとかあるが
それを勉強するとC++とかJavaとかに手を出したくなる罠。


15 名前: デフォルトの名無しさん 投稿日: 02/02/18 17:48
age


16 名前: デフォルトの名無しさん 投稿日: 02/02/18 19:35
厨房な質問すいません。
本なんかを見たのですが、今ひとつ構造体と共用体の差がわかりません。
教えてもらえないでしょうか?


17 名前: デフォルトの名無しさん 投稿日: 02/02/18 19:45
>>16
構造体は普通に構造体。
共用体は、メンバがメモリを共有する。
例) union { int x; int y; }; だったら、 x を書き換えると y も変わる。

絶対unionじゃなきゃいけないって理由でもない限り、普通はunionは使わない。


18 名前: デフォルトの名無しさん 投稿日: 02/02/18 19:49
共用体はレジスタの定義とかで使うくらいだね。


19 名前: デフォルトの名無しさん 投稿日: 02/02/18 19:53
union little_endian_word {
char low_byte;
char high_byte;
struct{
short word;
};
};
こんな感じかな。


20 名前: 16 投稿日: 02/02/18 19:56
>>17
unionじゃなきゃいけない場合っていうのはどんな時でしょうか?

ごめんなさい。>>18-19よくわかりません。ホントすいません。


21 名前: デフォルトの名無しさん 投稿日: 02/02/18 19:57
使えるメモリがかぎられてるときとか?


22 名前: デフォルトの名無しさん 投稿日: 02/02/18 21:07
正直、16にはunion要らないとおもう。


23 名前: デフォルトの名無しさん 投稿日: 02/02/18 21:12
俺は通信絡みでよく使うなぁ。

 struct Hoge {
  int foo1;
  int type;  ← ここの値によって、この後のフォーマットが変わる!
    :
 };

こういう時、

 struct Hoge {
  int foo1;
  int type;
  union {
   struct Hoge1 hoge1;
   struct Hoge2 hoge2;
      :
      :
 };

みたいな。

そういや X Window System のイベント構造体もこんな感じになってる。


24 名前: 16 投稿日: 02/02/18 21:36
メモリを使うのが限られてたり通信絡みの関係で使うんですか。
難しいですが、うっすらとわかったような気がします。
ありがとうございました。


25 名前: 超初心者 投稿日: 02/02/19 00:02
最近C言語の勉強を始めたのですが、エラーの意味が分かりません

〜c 19: illegal character

ってどういう意味ですか?


26 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:05
>25
英語の辞書持ってないの?
英単語検索の仕方知らないの?



27 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:09
>>25
コンパイル中にレジストリが壊れたという警告です。
再起動した方が良いです。


28 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:13
>作ってわかるCプログラミング
アマゾン見たら、「作ったがわからなかった」っていうレビューに
ものすごく賛成票がついてました。
あんまり評判はよくないのでは?


29 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:15
>>28
作って「解らないことが」わかる
なのでは


30 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:18
>>28
賛成してる大部分は、読んでもいない 2ちゃんねらと思われ。
本自体はいいと思うんだけど、如何せん著者がね…


31 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:22
↑ついにそれを言ってしまったか・・・
絶対にそうだね。他の票とあまりに差がありすぎるしね。



32 名前: 超初心者 投稿日: 02/02/19 00:24
>26
意味は不正文って意味だと思うのですが、その前の19って19行目って事なんですか?

>27
嘘つき!
初心者なんだから、何でも本気にするぞ!!


33 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:27
>>32
19は三月で解散します。


34 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:29
↑ワラタ


35 名前: 超初心者 投稿日: 02/02/19 00:31
マジで泣くぞ・・・


36 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:31
>>35
どうぞ


37 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:32
へい

>>35
涙の数だけ強くなれます


38 名前: 超初心者 投稿日: 02/02/19 00:33
   ||
 ∧||∧
( / ⌒ヽ
 | |   |
 ∪ 亅|
  | | |
  ∪∪
   :
   :

 ‐ニ三ニ‐



39 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:33
        +激しく満足+


                     | ̄ ̄|
                      ┬┬           ∩ ≡≡
           _       | ̄ ̄ ̄ ̄ ̄|         | |(‘台‘)
         ∠  \     |;;;;...      |         \⌒ ̄⌒l
         ∩|/゚U゚| I   |;;;::.      |           |bob |_|
          \||_||つ  .(⌒|;;::.. .    |⌒)        |---|U
           |  |    |⌒⌒⌒⌒⌒⌒|          | | |
           (_ノ _)  .  | ̄ ̄ ̄ ̄ ̄ ̄|           | | |
_______U ∪ ___|______|______(二(二)______




40 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:36
>>33
ホント?


41 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:37
>>40
らしいぞ


42 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:37
すぐAAで荒らさない。
本を読め、なければ買え。


43 名前: 超初心者 投稿日: 02/02/19 00:38
いいもん、負けないもん
漏れ頑張る!


44 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:39
>>43
19の解散の先行記念として、殉死しろ。


45 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:41
>>42
万匹ではダメですか?


46 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:42
>>45
できれば万個で


47 名前: 超初心者 投稿日: 02/02/19 00:43
>42
38,39は俺じゃないし…


48 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:45
>>43
なんかカワイイな( ;´Д`)


49 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:47
メガネが飛んだ 超初心者 のメガネが飛んでった
空の彼方の峠を越えて イカロス墜落株価も暴落  超初心者の右手に30円
明日の暮らしも定かでないが 5年後見据えて超初心者 が今
一人寂しく残された メガネケースを庭に埋め
メガネのなる木に望みを託す
これで将来ウッハウハ 「父さん愛ってホントだね」


50 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:52
>>49
30円でCのほんはかえますか?


51 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:52
>〜c 19: illegal character
どっか、大事なところが壊れてるとおもうけどなぁ…


52 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:53
CPUとか?


53 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:54
>>51
だからレジストリが壊れてるんだろ?


54 名前: デフォルトの名無しさん 投稿日: 02/02/19 00:59
>>51
はっ!
お、俺の・・

男じゃ無くなっちゃった!


55 名前: デフォルトの名無しさん 投稿日: 02/02/19 05:31
イリーガル→不正な
キャラクタ→文字
19→19行目


56 名前: 日下部幼一 ◆YjtUz8MU 投稿日: 02/02/19 07:18
>バブー

はつみみです;)


57 名前: デフォルトの名無しさん 投稿日: 02/02/19 11:23
>>25
そろそろ勘弁してあげよーよ。
>〜c 19: illegal character
エラーの意味は、何度も出てるけど「変な文字が入ってるぞゴルァ」
です。で、変な文字とは、大概全角スペースだったりします。


58 名前: デフォルトの名無しさん 投稿日: 02/02/19 11:29
>>1
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

            わ          ,..-―-、           
              |         /:::::::::::::::::l         み
                 ∩  /::::::::::::::::::::|      ,、   ん
      -―-、        |⌒ヽ/::::::::::::::::::::::|    _/|ノ  な
   /´Y    (´ヽ  ,、    l: : : i::::::::::::::::::::::::|-―'´: :丿  大
 ,、 _し' l     lヽJ/|ノ   \: |∧/l/|ノレ : : : :/  変
 Y: : `ー`ー-―'´一': : |     /: : : : : : : : : : ::i-‐'′   だ
  \: : : : : : : : : : : : /      /: : : : : : : : : : : |         |
   Y: : : : : : : : :r'´      /: : : : : : : : : : : :|
   /: : : : : : : : : :|       /: : : : : : : : : : : : |
  /:: : : : : : : : : ::|      / : : : : : : : : : : : : |
  /: : : : : : : : : : : |      /: ::_: : : : : : : : : :|
  `77ー--┬r一'       ̄/ / ̄`ー-┬r-'
  l'´)   ├|           l'´)     |~|
  し'    (ニ⊃        し'      (ニ⊃


59 名前: デフォルトの名無しさん 投稿日: 02/02/19 14:32
どんどん書き込んでー


60 名前: デフォルトの名無しさん 投稿日: 02/02/19 15:27
ここって、ascii-net, pcs時代からの怨念を引きずっている人が多そう。


61 名前: デフォルトの名無しさん 投稿日: 02/02/19 18:48
C++のメリットとはなんぞや?
ちょっとみてみたけど全然Cとはちがうし。
どこが便利なの?
やっぱりC++やったほうがいいの?


62 名前: ラジャラオイン 投稿日: 02/02/19 18:55
>>61
STLが使える、あとオブジェクト指向プログラミングがしやすい。


63 名前: デフォルトの名無しさん 投稿日: 02/02/19 19:26
本当に今さらだが、>>1の名前がちょっとウケタ


64 名前: デフォルトの名無しさん 投稿日: 02/02/19 19:38
>62
うちの職場に「C++はどこでも変数の宣言ができて便利」と言ってるヤツがいますが、
吊るして良し! ですか?

でもたしかC99からできるんだっけ?


65 名前: デフォルトの名無しさん 投稿日: 02/02/19 19:42
>>62
逆にJava、いやいやC#を薦めておあげなさい。
フォッフォッフォ・・・


66 名前: 65 投稿日: 02/02/19 19:43
>>64でした。


67 名前: デフォルトの名無しさん 投稿日: 02/02/19 20:27
>>64
出来ますね<C99。
けど C99 使えない環境ってまだまだ多そうだから、C++ を
C の拡張版と割り切って使う、ってのもアリだと思うけどな。

(勿論、人には「C++ やってるんですよ」なんて言えない)


68 名前: デフォルトの名無しさん 投稿日: 02/02/19 21:44
最近C言語を勉強しはじめたんですが、
OSがMeなんでMS-DOSプロンプトのスクロールバーがなくてすごい不便なんです。
出来ればcygwinを使ってやっていきたいんですが、
何かいい方法ないですか?
#OS替えるとかは無しで。


69 名前: デフォルトの名無しさん 投稿日: 02/02/19 22:06
>>68
バックスクロールしたいのかcygwinのインストールの仕方が
知りたいのかはっきりせい。それによってgoogleでの検索ワードが
変わってくるぢゃないか。



70 名前: 68 投稿日: 02/02/19 22:39
すいません。
知りたいのはバックスクロールの方法です。


71 名前: 64 投稿日: 02/02/19 23:14
>67
一時変数ならブロックスコープ変数使え、って突っ込み入れたかったけど、
保守が大変になりそうなので止めたのでした。

C++はCのスーパーセットなんでそれもありだけど、
それを会社でやるとcoutでログ表示してC++使ってる気分になってる奴が増えそうで鬱。
# 俺だってこのくらいではC++やってるなんて言えない。


全然関係ないけど、
オブジェクト指向でオブジェクトをたくさん設計するなら、
データベース関連でいうテーブルの設計チーム(兼DBA多し)みたいのがないと、
まずプロジェクトがコケるかデスマーチの実地訓練になる、と思ってるのは俺の勘違いですか?


72 名前: 69 投稿日: 02/02/19 23:17
>>70
これと
http://www.vector.co.jp/vpack/filearea/dos/util/other/xscript/index.html
これ(こっちはcygwinでやるらしい。オトクオトク!)
http://homepage2.nifty.com/murase/diary/200111.html


73 名前: 投稿日: 02/02/19 23:26
コマンドプロンプトを使いたくない人が良くやる方法はTeraTermで
localhostにtelnet。


74 名前: 超初心者 投稿日: 02/02/20 00:07
>>57
あなた神!
本当にありがとう。世の中にはいい人っているもんだね!
全角スペースが原因だったのか〜。
間違いないはずなのにエラーになるから訳分からなかったんだけど、これで謎が解けた!
ありがとう!続き頑張ろうっと


75 名前: デフォルトの名無しさん 投稿日: 02/02/20 00:08
>>73
どう変わるの?


76 名前: デフォルトの名無しさん 投稿日: 02/02/20 00:09
> 間違いないはずなのに
なんで初心者さんはこういう痛い思い込みをしてそれを平気で口に出来るのでしょうか。
少しは反省してみろと小一時間はめんどうだから言わない。


77 名前: デフォルトの名無しさん 投稿日: 02/02/20 00:14
>>74
なんかかわいい…


78 名前: 57 投稿日: 02/02/20 00:15
>>74
神だった。ウハウハ。


79 名前: 68 投稿日: 02/02/20 00:21
rxvtを使って出来ました。
でもteratermを使う方法も興味があるので調べてみます。
回答してくださった方々ありがとうございました。


80 名前: デフォルトの名無しさん 投稿日: 02/02/20 02:16
ヘンなハナシを振らせてください。

gccやVisual C++6.0の実装のハナシだけど、
ifstream(fd)/ofstream(fd)でファイルディスクリプタを渡せますよね。
これでソケットやパイプに対してgetlineやマニピュレーターを適用できる。
(Visual C++だと_get_osfhandle()なんかでハンドル→ディスクリプタ変換)
さあて、ここで、open/read/write/socket/pipeなんてのは
POSIXでもANSIでもありませんよね。

あと、↓の仕様って妥当だと思うけど、これに外れる実装例ってあるのかしら。

ファイルがコンストラクタまたは open メンバ関数を使って開かれているときだけ、
ファイルはクローズされます。

あ、引数にもどしてないや・・・



81 名前: デフォルトの名無しさん 投稿日: 02/02/20 02:20
>>80
↓こちらがよろしいかと

C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/

VisualC++相談室 6
http://pc.2ch.net/test/read.cgi/tech/1011615035/



82 名前: デフォルトの名無しさん 投稿日: 02/02/20 02:27
「初心者というか、わたしにとっては、もう東京に来てからずうううっと
 間違いないはずなのになんですよ。わたし、けっこう家族とか複雑
 だったから、痛い思い込たちが家族みたいなものなんです。」


83 名前: デフォルトの名無しさん 投稿日: 02/02/20 09:15
ハイソサエティー上げ


84 名前: デフォルトの名無しさん 投稿日: 02/02/20 09:39
はい


85 名前: デフォルトの名無しさん 投稿日: 02/02/20 09:45
ふぇい


86 名前: 投稿日: 02/02/20 11:14
最近くそ壁いないね・・・


87 名前: デフォルトの名無しさん 投稿日: 02/02/20 11:26
スクでゲーム作りたいんですけど、何できればOK?
Cで募集してるけど、Javaはダメかいね?
Cならどの辺のレベルがいるわけ?
数学と物理バリバリじゃないと無理っぽいけど・・・
3Dプログラミングってどれくらいの高校程度の物理と数学でいけるもん?
誰かシットル人おらんかね。


88 名前: デフォルトの名無しさん 投稿日: 02/02/20 11:39
>87
FFなみのゲームつくれりゃOK


89 名前: デフォルトの名無しさん 投稿日: 02/02/20 11:41
スクとは?


90 名前: デフォルトの名無しさん 投稿日: 02/02/20 11:42
スクウェアじゃないの?
おいらカンチガイしちゃった?


91 名前: デフォルトの名無しさん 投稿日: 02/02/20 11:45
スクールみじゅぎでゲーム作るのは大変そうだが頑張れ。
出来たら俺も遊びたい。


92 名前: デフォルトの名無しさん 投稿日: 02/02/20 12:08
>>87
> スクでゲーム作りたいんですけど、何できればOK?
> Cで募集してるけど、Javaはダメかいね?
Cにはスクはないよ。
Javaにはスクはあるけど、JavaとJavaスクは名前は同じだけど別の言語だよ。

とボケてみるテスト



93 名前: デフォルトの名無しさん 投稿日: 02/02/20 12:17
>>87
>スクでゲーム作りたいんですけど、何できればOK?
シベリア抑留並みの苛酷な労働に耐えられること。
あと、このようなクソレスをしない常識。


94 名前: デフォルトの名無しさん 投稿日: 02/02/20 12:25
>>87MIT、ハーバードを好成績で出た奴しか無理。
もちろん、数学、物理ともバリバリでな。
この板にはそんな奴はいないので何を聞いても無駄ってもんよ。


95 名前: デフォルトの名無しさん 投稿日: 02/02/20 13:05
>>92
> Cにはスクはないよ。
csh という選択もあるぞ。


96 名前: デフォルトの名無しさん 投稿日: 02/02/20 14:00
VC++6.0アカデミックを近々購入したいのですが、
プロフェッショナルとスタンダードのどちらを
買えばいいのか悩んでいます。
Microsoftの製品の紹介を読んでも
ちんぷんかんぷんです。
最終的にはDirectXを使った3Dゲームを
作りたいのですが、スタンダードは
そこまでの使用に耐えますか?
また、スタンダードに付属する初心者向けの
マニュアルの使い勝手はどうなんでしょう。


97 名前: デフォルトの名無しさん 投稿日: 02/02/20 14:03
十分


98 名前: デフォルトの名無しさん 投稿日: 02/02/20 14:05
マニュアルはいきなり
MFCの話題からはいってくる。
Windowsプログラミングがわかれば
それなりに理解できると思う。


99 名前: 96 投稿日: 02/02/20 14:13
>97
スタンダードで十分ってことですか。
ならスタンダードを買います。
万一不満を感じるようになっても、
そのころには7.0が出てるかもしれないし。
>98
Windowsプログラミングは全然わかりません。
組めるのはDOSのプログラムだけです。
でもまぁ頑張ってみます。

ありがとうございました。では。


100 名前: デフォルトの名無しさん 投稿日: 02/02/20 14:38
>>99
君の状態から見て、VCを買っても死蔵する可能性がかなり
高いと思われる。
まだ買わないほうがただしいとおもわれる。


101 名前: デフォルトの名無しさん 投稿日: 02/02/20 14:46
>>99
>組めるのはDOSのプログラムだけです。

これはなんかマズーなよかん。
実は大して組めません、というオチが予想できると思われ。

#類例:Cは大学の演習でひとおおりやりました。


102 名前: デフォルトの名無しさん 投稿日: 02/02/20 14:46
>また、スタンダードに付属する初心者向けの
>マニュアルの使い勝手はどうなんでしょう。

マイクロソフトに多くを期待しない方が人生を豊かに過ごせます。


103 名前: デフォルトの名無しさん 投稿日: 02/02/20 15:11
>>96
Visual Studio6.0のEnterprise版を買え。
アカデミックなら35000円くらいだろ。


104 名前: デフォルトの名無しさん 投稿日: 02/02/20 15:28
>99
>万一不満を感じるようになっても、
>そのころには7.0が出てるかもしれないし。

3月22日に7(.NET)が出るわけだが・・・。
ttp://www.microsoft.com/japan/


105 名前: デフォルトの名無しさん 投稿日: 02/02/20 16:35
>>103
Enterprise はデータベースがらみのプログラミングしたり、付属のエンタープライズ
ツール (Rational Rose のサブセットとか) 使わなければ要らんよ。Pro で十分。


106 名前: デフォルトの名無しさん 投稿日: 02/02/20 17:08
vc6ならプロ版でも屋夫億とかで4Kぐらいで買えると思われ


107 名前: デフォルトの名無しさん 投稿日: 02/02/20 22:51
>>79
>でもteratermを使う方法も興味があるので調べてみます。

やめとけ。多分キミのマシンにtelnetdはいない。


108 名前: デフォルトの名無しさん 投稿日: 02/02/21 00:03
SEとネットワークエンジニアの違いを知りたい


109 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:09
>>108
そういう意味不明な質問をC言語のスレでしている君の非常識
がどういうふうになっているのか知りたい。


110 名前:   投稿日: 02/02/21 01:12
C言語でdelayの様な処理を遅くする方法(標準装備関数)ってありますか?


111 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:14
ネタってわかれよ。


112 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:19
>>110
delayってなんじゃろか〜
おじ〜いちゃんは、はつみみだ〜

delayってなんじゃろか〜
おじ〜いちゃんは、はつみみだ〜

delayってなんじゃろか〜
おじ〜いちゃんは、はつみみだ〜



113 名前:   投稿日: 02/02/21 01:27
何の言語かは知らんけど、
delay(200)とかdelay(500)とか書いてプログラムの実行速度を
遅くする命令文です。(数字が大きいほど負荷がかかって実行速度が遅くなる)



114 名前: 96 投稿日: 02/02/21 01:28
>100-101
以前知り合いのVC++を立ち上げて、
その訳わからなさに畏怖したことがあるので、
VC++の恐ろしさについては理解しているつもりです。
とりあえずVC++を買うまでは、
「猫でもわかるプログラミング」でも読んで、BCCを使って
Windows SDKのプログラミングについて学んでみます。
>102
そうします。
>103
欲しいのはVC++だけなので…。
>104
うげ、また選択肢が増えた。検討してみます…。
>106
検討してみます。いまヤフオクを覗いてみると、
VC++6.0 Enterprise Academic が最低\5000で出品されてました。
「勉強しようとして挫折した」からだそうです。他人事とは思えない…。

では。


115 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:28
迷惑な命令だな


116 名前:   投稿日: 02/02/21 01:32
>>115
わざわざ遅くしてるんだってば
マリオブラザーズで言うと亀が緑の時は(500)で赤になったら(200)にするとか
そうゆう使い方。


117 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:32
とりあえずスレッドの優先順位でも落としておけ。

SetThreadPriorityだぼけ



118 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:37
>>116
> 負荷がかかって実行速度が遅くなる
迷惑なのは「負荷がかかって」の部分だろ。どうでも良いが、ゲームプログラミング
でキャラクタの動きを遅くするためにビジーループを使うのは禁じ手だ。

そんなコードがあちこちにあったら、並行して実行されるゲーム全体のタイミングを
取れなくなる。


119 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:38
CPUのクロック下げれ。
環境にもやさしくてウマー


120 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:38
平行して実行しないから大丈夫です。


121 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:39
キャラクタが一つしか現れない、新感覚のゲームなのです。


122 名前:   投稿日: 02/02/21 01:53
つーか俺はただ初心者だからC言語で作ったプログラムをゆっくり実行させたいだけ・・



123 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:57
型落ちのパソコンで実行したらいいよ、うん。解決。


124 名前:   投稿日: 02/02/21 01:58
>>123
一応ありがと・・


125 名前: デフォルトの名無しさん 投稿日: 02/02/21 01:59
最近のマシンでも、BIOSの設定でキャッシュを全部OFFにすれば、ほほえましいくらい遅くなるよ。


126 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:01
       √ ̄ ̄ ̄ ̄ ̄\
     / ̄          |
    /   / ̄ ̄ ̄ ̄ ̄\|
    |   /         |
    |  /  `      ´ |
    | /  _     _ |  初心者の文字が目に入らぬか!!
     (6      つ.   |
     |     ___     |
  _  |     /__/    |
⊃|房| |        ___/
つ  ̄ ⊂



127 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:02
>>122
世の森羅万象すべては気でなりたっておる。
人間気持ちの持ちようでなんとでもなるものです。

ゆっくりしていると念じればゆっくりしてるように感じられます。


128 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:04
>>126
ヲタクは氏ね


129 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:09
>>122
デバッガで実行。で、ステップ実行に割り当てられたキーの上に消しゴムでも乗せておく。


130 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:10
>>113
delay()って、TurboCにあったような・・・
で、プログラムを遅くするような命令じゃなくて、
ミリ秒単位でウエイトするだけだったような・・・


131 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:11
デバッガでトレースすればよいだけの話しだったりして


132 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:11
ゲームの1動作ごとにgetcharを入れておく。
キーをかちゃかちゃする速度でゲームの速度は思いのままに。


133 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:12
>>131
初心者なのでデバッガを知らないと思われ。


134 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:21
>>132
ハイパーオリンピックだ


135 名前: デフォルトの名無しさん 投稿日: 02/02/21 02:24
そういえば昔のBASICには TRACE ON なんて命令があったな。
1行ごとに自動的にポーズするやつ。


136 名前: デフォルトの名無しさん 投稿日: 02/02/21 03:10
>>133
まぁ、自分の開発環境も説明できないようなやつだからなぁ。

一般には、プログラムの特定部分の実行の様子を詳細にチェックしたい場合には
デバッガで

1. その直前にブレークポイントを設定
2. ブレークポイントに達するとデバッガが呼ばれる
3. 後はデバッガでステップ実行

して様子を追うんだが >>122 の開発環境は何なんだ? VC6 とか gcc とか具体
的な処理系と動作プラットホームを書くと、より詳細な回答が得られる可能盛大だ
ぞ。


137 名前: デフォルトの名無しさん 投稿日: 02/02/21 03:23
>名前:名前は開発中のものです。 投稿日:02/02/20 07:04 ID:SsD5xIm7
>「ozawa-ken」というタイピングソフト知ってますか?
>ああいうのを作りたいんですけど、初学者が一から作るには何ヶ月くらいでできますか?
>それと、何言語でつくられているかわかりますか?

>名前:名前は開発中のものです。 投稿日:02/02/20 12:29 ID:???
>ozawa-kenはshockwaveじゃなかったっけ?
>1ヶ月もあれば雛型(とりあえずタイピングっぽいもの)までは作れるでしょ。
>あとは、納得のいく形になるまで果てし無く仕上げていく。どちらかというと技術力よりもセンス。
>VC++とかで作ろうとするなら、もちょっと時間かかるかもね。

別スレで発見しました。C言語だったらどれくらいかかりますでしょうか?


138 名前: デフォルトの名無しさん 投稿日: 02/02/21 03:27
>>107
> やめとけ。多分キミのマシンにtelnetdはいない。
cygwin にはtelnetd.exe sshd.exeがありますが…



139 名前: デフォルトの名無しさん 投稿日: 02/02/21 04:05
>>137
       √ ̄ ̄ ̄ ̄ ̄\
     / ̄          |
    /   / ̄ ̄ ̄ ̄ ̄\|
    |   /         |
    |  /  `      ´ |
    | /  _     _ |  初心者の文字が目に入らぬか!!
     (6      つ.   |
     |     ___     |
  _  |     /__/    |
⊃|房| |        ___/
つ  ̄ ⊂




140 名前: デフォルトの名無しさん 投稿日: 02/02/21 13:12
>>137
Cだけで組むのか・・・。
もう、がんばれとしか言いようが無い。

がんばれ!


141 名前: デフォルトの名無しさん 投稿日: 02/02/21 14:55
>>137
素直にマルチポストだと自供しようね。


142 名前: デフォルトの名無しさん 投稿日: 02/02/21 15:13
>>137
「C言語だったら」じゃなくて、「ハイソサエティハッカーの手にかかれば」
だろ?
多分、8時間あればプロトタイプができるだろう(勝手な予想)
なんたってハイソサエティだぜ?みくびんなよ。


143 名前: デフォルトの名無しさん 投稿日: 02/02/21 15:43
ポインタはCを学ぶ人が必ずつまずくという大きな壁と言われますが、
僕は全くポインタにつまずいた覚えがありません。
要するに、メモリのアドレスを保持する変数ってだけでしょう?
アドレスを直接に指定して内容にアクセスすることが可能になるわけですよね。
一体ポインタの何がそんなに難しいのか教えてください。
ひょっとして僕がまだポインタのさわりしか理解していないだけですか?


144 名前: デフォルトの名無しさん 投稿日: 02/02/21 15:45
Spy++ってVC6Pro版についてます?


145 名前: デフォルトの名無しさん 投稿日: 02/02/21 15:48
>>143
メモリとアドレスがわかっていたのならつまづかないですよね。
私もそうでした。


146 名前: デフォルトの名無しさん 投稿日: 02/02/21 15:51
>>143
そりゃ良かったね、としか言いようが無い。

>何がそんなに難しいのか教えてください。
もっとC言語を理解できないアホが集まる場所で質問してください。
ここで聞いてもどうにもなりません。


147 名前: デフォルトの名無しさん 投稿日: 02/02/21 15:52
二次元配列とかポインタのポインタとか
配列へのポインタとかポインタの配列とか
そーゆーのがこんがらがる場合もありうる


148 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:02
http://member.nifty.ne.jp/maebashi/programmer/c_yota/pointer.html
ここにウダウダ書いてあるがまだ良く読んでいない...
おまえら、暇だったら読んで感想聞かせて下さい。


149 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:11
farってのがわからないのですが、どなたか教えてください。


150 名前: 日下部圭子 投稿日: 02/02/21 16:11
>>144
ついてますよ。


151 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:15
あるメモリー領域がalloc系関数で確保された領域かどうか判断する方法はありますか?
頭でプログラムの流れを間違いなく追うしかないのでしょうか。


152 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:17
>>151
一体どう言う状況でそういう必要性にせまられるのか、
まるで解りません。


153 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:20
>>152
必要性というか、間違っていないか判断したいだけです。
単に一つの変数に代入したくらいでは間違いませんが。


154 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:21
>>153
動的に確保した領域を指すポインターには特定の前置詞で始まる
名前をつけとけ。

終わり


155 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:22
>>154
ないんですね。わかりました。


156 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:23
>>152
機種依存の方法でよければ、アドレス見ればわかると思う。


157 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:26
>>156
そうなんですか?デバッグ中に使うだけなので機種依存でも大丈夫です。
Win+VC6.0pro,Linux+gccです。


158 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:29
そのばあいにしてもデバッガの仕事ではないのか?


159 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:31
>>158
仕事じゃないので・・・


160 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:44
>>159
・・・・・・・
もしかして「デバッガ」って人間のことだと思ってない?


161 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:48
「デバッガ」って人間も指すよね。


162 名前: デフォルトの名無しさん 投稿日: 02/02/21 16:49
>>161
ポインタを調べるのに人間を呼ぶか?


163 名前: 159 投稿日: 02/02/21 16:53
>>160
すみません(笑)
ツールですね(笑)


164 名前: デフォルトの名無しさん 投稿日: 02/02/21 18:35
C言語で作られたゲームで「これはすごい!」というのはありますか?
また、そういうのが見れるサイトを知ってたら紹介してください。


165 名前: デフォルトの名無しさん 投稿日: 02/02/21 18:51
みんなは「char」をなんて呼んでるの?
自分は「チャー」って呼んでるんだけど。「int」は「イント」。


166 名前: デフォルトの名無しさん 投稿日: 02/02/21 18:51
キャラ


167 名前: デフォルトの名無しさん 投稿日: 02/02/21 18:55
>>164
FF7

>>165
ちゃー
他人に話すときはキャラクタ


168 名前: デフォルトの名無しさん 投稿日: 02/02/21 19:00
キャラって呼び方あったんだ。そっちの方が良い感じ。
チャーだとなんだか格好がつかない気がしてたんだ。ありがと。


169 名前: デフォルトの名無しさん 投稿日: 02/02/21 19:50
これは?
hoge


170 名前: デフォルトの名無しさん 投稿日: 02/02/21 19:54
>>165
チャーに決まってんだろ。
竹中尚人


171 名前: デフォルトの名無しさん 投稿日: 02/02/21 19:56
>>165
しーえいちえーあーる


172 名前: デフォルトの名無しさん 投稿日: 02/02/21 19:56
>>165
しゃー


173 名前: デフォルトの名無しさん 投稿日: 02/02/21 20:20
>172
ちゃんとカタカナでシャアって書けよ


174 名前: デフォルトの名無しさん 投稿日: 02/02/21 20:26
>>173
いや


絶対いや


175 名前: 修行僧 投稿日: 02/02/21 20:47
スイマセン!C++ Builder に関するスレはないんですか?


176 名前: 初心者 投稿日: 02/02/21 21:44
大域的な構造体定義内の構造体定義の、他から使われる範囲は
ブロック内だけでしょうか、ファイル全体でしょうか。

struct _1{
int i;
struct _2{ //これとか
char *p;
};
};


177 名前: デフォルトの名無しさん 投稿日: 02/02/21 22:15
>>144
きますよ。


178 名前: 176の初心者 投稿日: 02/02/21 22:51
すいません、言い方が悪かったですね。

struct STRCT{
struct STRCT_IN{
int i;
};
};
// としたとき
int main()
{
/* 関数の中でSTRCT_INを型としてオブジェクトを作る手段はあるのか?
またできたとしてもそれは許されるのか? */
return 0;
}

を聞きたかったのです、よろしくお願いします。


179 名前: 144 投稿日: 02/02/21 22:51
>150 >177 ありがと。


180 名前: デフォルトの名無しさん 投稿日: 02/02/21 23:01
>>178
普通に
struct STRCT_IN obj;
で作れないか?

C++なら
STRCT::STRCT_IN obj;
とか。


181 名前: デフォルトの名無しさん 投稿日: 02/02/21 23:06
double buffer;
scanf("%lf",&buffer); // <=ここで

セグメンテーションエラーが出てしまうんですけどどうしたらいいんでしょう


182 名前: デフォルトの名無しさん 投稿日: 02/02/21 23:09
>>180さん、ありがとうございます。
普通にしたらできましたm(_ _)m
迷惑かけてすいません(;_;)



183 名前: デフォルトの名無しさん 投稿日: 02/02/22 01:58
ファイル読み込みで、
1 2 3.....
1/2/3 4/5/6 7/8/9.........
最初から要素が何個あるか解からない時は、
fgets(line, 255, fp);
で一行読み込んでから、空白ごとに読み込んでいく
以外に方法はないんでしょうか?
最初から何要素在るか解かる関数など在るんでしょうか?
m(__)mm(__)mm(__)m



184 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:08
>>183
無い。


185 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:09
>>183
       √ ̄ ̄ ̄ ̄ ̄\
     / ̄          |
    /   / ̄ ̄ ̄ ̄ ̄\|
    |   /         |
    |  /  `      ´ |
    | /  _     _ |  初心者の文字が目に入らぬか!!
     (6      つ.   |
     |     ___     |
  _  |     /__/    |
⊃|房| |        ___/
つ  ̄ ⊂



186 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:18
>>185
ヲタクは氏ね


187 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:23
>>183
助けてください。


188 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:24
>>183
読まないで個数をどうやって数えるんでしょうか?


189 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:26
>>183
C言語には念写する機能はついていません。


190 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:27
>>183
解る関数が無ければ解る関数を作ればよい(藁
色々な面で処理効率は落ちるが、コーディングで難しいって点は無い筈。

補足。意外と使われてない気がするけど、こういう処理にはstrtokって関数が有る。
貴兄の求める仕様に合致するかは知らないけど、知識外なら一度調べてみては。




191 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:32
>>190
オーバーヘッドが多いような。

というか、FGETSしてるのならすぐに調べられるだろうが。
FGETSせずに調べるのは超能力が必要だし。
愚かな質問。


192 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:33
>>183
何を悩む必要があるのかまるでわからん。

「コードを書きたくない」と書いてるように見えるが。


193 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:37
データの頭に要素数突っ込んどけ


194 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:41
なぜにこんな質問ばかりなのかと小1時間問い詰めたい。


195 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:46
ファイルポインタで
while((c = fgetc(fp)) != EOF) fputc(c,wp);
のようにして最後まで読んでしまって
また一から読みたい場合はどうすればよいのですか?
lseek()を使うのでしょうか。


196 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:48
>>195
普通に開きなおしたら?


197 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:48
>>183
fgetcで1文字ずつ読んでった方が楽なケースというのも世の中にはある。


198 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:48
>>195
OSの再インストールが必要になります


199 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:50
>>195 それでいいと思う。確実にしたいなら閉じてからまた開く。


200 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:51
>195
fgetc, fputc ときたら fseek だろ。もしくはrewind。


201 名前: 200 投稿日: 02/02/22 02:52
やあ。
今日もGETかな( ´ー`)y-~


202 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:53
>>201



203 名前: 195 投稿日: 02/02/22 02:54
みなさん、ありがとうございます。
開き直しかfseekかrewindやってみます。


204 名前: デフォルトの名無しさん 投稿日: 02/02/22 02:56
>>203
知ってることで出来ることを無理に知らないことでやろうとしないこと。



205 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:13
const int foo[3]={1, 2, 3};

int const foo[3]={1, 2, 3};

はどう違うんですか?


206 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:16
>>205
とりあえずお約束だが「プログラミング言語C」は読んだか?


207 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:20
>>205
初心者なら気にしなくても大丈夫な気も・・


208 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:24
>>205 intとconstの位置が違うだけです
>>207 いーかげんなこといわないように


209 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:28
関数の定義で
function(i1, i2){
unsigned char i1[size1][size2];
unsigned char i2[size1][size2];
{
・・・

なら大丈夫なのに
function(i1, i2, x, y){
unsigned char i1[size1][size2];
unsigned char i2[size1][size2];
int x,y;
{
・・・

ではダメなのはどうしてなんでしょう?



210 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:30
古いスタイルだな...


211 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:32
constを先に書いたほうが読み良いな。


212 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:38
>>209
どんなエラーが出るかを書け。



213 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:44
>>211
int *const p;

とかも考えると、修飾子は右に書く方が、統一はとれてるんだけどね。

でも、

 int const *p;
 const int *p;

だと、後者の方が良く見かける気がする。


214 名前: デフォルトの名無しさん 投稿日: 02/02/22 16:47
>>213
あうあう、そうか。
C言語でややこしい宣言をする時には
(ポインタのポインタの関数のポインタの・・みたいな)
「段階的宣言」をして明確にする口なので気がつかず。

constの方が「重要な情報」であることは確実だとおもうのと
constが色々な方にまたがって複数ある時にはconstを
先に出して連ねた方が見やすい。

・・と思ってるんですけど、正しい?


215 名前: デフォルトの名無しさん 投稿日: 02/02/22 17:12
大体ポインタの「*」表記がいかん。
一見便利だが、複雑になると死にそうになる。

長いけど例えば
AddressOf
みたいな感じだったら混乱しなかったはず。

p : AddressOf Const Integer;
p : Constant AddressOf Integer;

pf AddressOf Array AddressOf func();

例えばこんな感じで


216 名前: デフォルトの名無しさん 投稿日: 02/02/22 17:17
>>208
>>>205 intとconstの位置が違うだけです

そうなのですか。どうもありがとうございます。

constって不思議ですね。

#include <stdio.h>

main(int ac, char **av)
{
const int a=1;
const int b=2;
const int *p = &a;

printf("%d\n", *p);

p = &b;
printf("%d\n", *p);

*p = 3;
printf("%d\n", *p);
}

*p=3でWarning出ますが、実行すると書きかえれちゃう(gccです)
こんなものなのでしょか。



217 名前: デフォルトの名無しさん 投稿日: 02/02/22 17:19
>>215
なんか Pascal っぽいね。


218 名前: デフォルトの名無しさん 投稿日: 02/02/22 17:23
>>216
ROMに焼くようなプログラム作るときには、重宝するかも。
漏れあんまりconstってかいたことない。


219 名前: デフォルトの名無しさん 投稿日: 02/02/22 17:26
>>218
テーブルとかconstで宣言しとかないと心配じゃ無い?


220 名前: 218 投稿日: 02/02/22 17:28
>>219
お〜なるへそ。
そうかも。


221 名前:   投稿日: 02/02/23 00:06
>>215
“*”じゃなくて“〒”はどう?


222 名前: デフォルトの名無しさん 投稿日: 02/02/23 00:07
>>216
C 言語で「警告」が出たら、他の言語だと「致命的エラー」に相当すると思って
おいた方がいい。特にキャストやポインタがらみの場合。


223 名前: デフォルトの名無しさん 投稿日: 02/02/23 00:11
bakaがたくさんいる


224 名前: デフォルトの名無しさん 投稿日: 02/02/23 00:13
>>223
bakaですが何か?


225 名前: デフォルトの名無しさん 投稿日: 02/02/23 00:14
>>223
ですが何か?


226 名前: デフォルトの名無しさん 投稿日: 02/02/23 00:15
>>223
たくさんいますが、何か?


227 名前: 投稿日: 02/02/23 00:44
C言語を勉強して、ポインタで挫折するという典型的なパターンをふんだものです。
学校では「コンソールアプリケーション」とかいうので、DOSプロンプトで実行するやつしか
作ったことがないのですが、VBみたいにボタンとかテキストボックスとかをCでも作れるのですか?


228 名前: デフォルトの名無しさん 投稿日: 02/02/23 00:58
>>227
C++Builderっ、買え!


229 名前: 183 投稿日: 02/02/23 01:11
大変遅くなり申し訳ありません。
お答え下さいました皆様方、真に
ありがとうございました。

>193
要素数とゆうか、Lineが数千行在るんでなんとも・・・・。
今のところ、中身が解かるので、

for(hoge=0 ; !feof(fp);)
{
fgets(line, 255, fp);
sscanf(line, "%s", ky);

if(!strcmp(ky, "文字"))
{
sscanf(line, "%*s %lf %lf %lf",
&hoge[v][0],
&hoge[v][1],
&hoge[v][2]);
v++;
}
.
.
.
の様にしているので、改良してみます。


230 名前: 229 投稿日: 02/02/23 01:12
訂正
for(v=0 ; !feof(fp);)
{
fgets(line, 255, fp);
sscanf(line, "%s", ky);

if(!strcmp(ky, "文字"))
{
sscanf(line, "%*s %lf %lf %lf",
&hoge[v][0],
&hoge[v][1],
&hoge[v][2]);
v++;
}




231 名前: デフォルトの名無しさん 投稿日: 02/02/23 01:49
>>230
いまいち何を悩んでるんだかつかめないんだけど、

1.各行の要素数がまちまちなので、最大の要素数を知らないと配列確保できねーじゃねーかゴルァ
2.1行が長すぎて、fgets()で読み切れない時があるんじゃゴルァ
3.sscanf()しか知らんから、要素数可変でスペースで区切られてる文字列をパースできねーんじゃゴルァ

のどれなのよ?


232 名前: デフォルトの名無しさん 投稿日: 02/02/23 02:05
お前ら、ポインタのポインタって何か教えてください。


233 名前: デフォルトの名無しさん 投稿日: 02/02/23 02:10
>>232
http://pc.2ch.net/test/read.cgi/tech/1012348974/n208
でもどうぞ。この場合はポインタの配列だけど、応用でわかるかな?
チミのお脳にかかっている!


234 名前: 232 投稿日: 02/02/23 02:12
早いレスさんくす!!!!!!!!!!!!!!!!!!!こ。


235 名前: デフォルトの名無しさん 投稿日: 02/02/23 02:39
>>232
int i = 9999,*p = &i,**pp = &p;
printf("%d",**pp);
---結果---
9999

つまり
int i = 9999
はこういうこと

 0x0001番地 ←アドレス(例)
 | ̄ ̄ ̄ ̄|
 | 9999  | ←変数i(中身はデータ)
 |____|

次の
*p = &i


 0x000A番地 ←変数iとは必ず異なるpのアドレス
 | ̄ ̄ ̄ ̄ ̄|
 | 0x0001  | ←ポインタ変数p(中身は変数iのアドレス)
 |_____| 

ほんで
**pp = &p;
でポインタ変数pのアドレスを代入

 0x000FF番地 ←ppのアドレス
 | ̄ ̄ ̄ ̄ ̄|
 | 0x000A  | ←ポインタを指すポインタ変数pp(中身はポインタpのアドレス)
 |_____| 

最後の
printf("%d",**pp);
は単項の*演算子で指すものを取り出している。
単項の結合規則は右から左なので
*(*pp)
こういうことだから

 pp           p          i
 ↓          ↓          ↓
| ̄ ̄|        | ̄ ̄|        | ̄ ̄|
|__}→(*参照)→|__|→(*参照)→|__}

こうなって見事に繋がりを参照することによってiが取り出されて
printf()関数に9999を渡し、表示されるわけ。


236 名前: 235 投稿日: 02/02/23 02:41
遅かったしなんか違うかな(´-`)??
まあ暇だからいいや。


237 名前: 229 投稿日: 02/02/23 03:04
>>231
1ぽいです。
何か良い方法があったらと思いまして。
2はstd::getline()で・・・。
3の意味が良くわかりませんスマソ。


238 名前: 231 投稿日: 02/02/23 05:39
>>237
なんか長くなっちゃった・・・鬱

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

#define LINE_BUF_GROW_STEP 8
#define MAX_LINE 10240

char **hoge[MAX_LINE];

main() {
  char *line,*line_tmp;
  char *word;
  char **line_element_ptr;
  int lines = 0;
  int chars;
  int count;
  int line_buf_len = 2; /* 最低でも 2 は必要(man fgets) */
  int i,j;

  /* 行バッファ確保 */
  line = (char *)malloc(line_buf_len);
  line_tmp = (char *)malloc(line_buf_len);
  if (!line || !line_tmp) {
    puts("メモリ買えや・・・");
    exit(1);
  }

  /* 読み込むよぅ */
  while(fgets(line,line_buf_len,stdin)) {
    /* 継続読み込み */
    while(line[strlen(line)-1] != '\n' && !feof(stdin)) {
      /* 行バッファ伸ばす */
      line_buf_len += LINE_BUF_GROW_STEP;
      line = (char *)realloc(line,line_buf_len);
      line_tmp = (char *)realloc(line_tmp,line_buf_len);
      
      if (!line || !line_tmp) {
        puts("メモリねぇんだゴルァ・・・");
        exit(1);
      }

      /* 続きを読み込む */
      fgets(line+(line_buf_len - LINE_BUF_GROW_STEP -1),
         LINE_BUF_GROW_STEP+1,stdin);
    }




239 名前: 238のつづき 投稿日: 02/02/23 05:40
    /* 改行コード削除 */
    if (line[strlen(line)-1] == '\n') line[strlen(line)-1] = '\0';

    /* strtok は引数で渡した文字列破壊するので、コピーしる */
    strcpy(line_tmp,line);

    /* 単語数カウント */
    count=0;
    for(word = strtok(line_tmp," \t"); word; word = strtok(NULL," \t")) {
      count++;
    }

    /* 単語数分のポインタ領域確保 */
    line_element_ptr = hoge[lines] = (char **)malloc( (count+1) * sizeof(ch\
ar*) );
    if (!line_element_ptr) {
      puts("メモリねーよ");
      exit(1);
    }

    /* 単語を複製し、そのアドレスをさっき確保した領域に入れてく */
    for(word = strtok(line," \t"); word; word = strtok(NULL," \t")) {
      *line_element_ptr++ = strdup(word);
    }
    *line_element_ptr = NULL;

    lines++;
  }

  /* 行バッファ開放 */
  free(line);
  free(line_tmp);

  /* ついでに表示するよぅ(ついでにメモリ開放しる) */
  for(i=0; i<lines; i++) {
    for(j=0;hoge[i][j];j++) {
      printf("[%s]",hoge[i][j]);
      if (hoge[i][j+1]) printf(",");
      free(hoge[i][j]);
    }
    free(hoge[i]);
    puts("");
  }
}



240 名前: 239 投稿日: 02/02/23 05:42
>>237
あーーー途中行末が\で切れてるとこは、次の行とひっつけてくれー
・・・さらに鬱


241 名前: デフォルトの名無しさん 投稿日: 02/02/23 06:04
puts("メモリねーよ");

fprintf(stderr,"殿!メモリがたりませぬ!\n");


242 名前: デフォルトの名無しさん 投稿日: 02/02/23 07:59
>>238
>>239

なんか結構つっこめちゃんですが?


243 名前: デフォルトの名無しさん 投稿日: 02/02/23 08:24
なんかある度に鬱鬱言うなよ。
お前の気分なんてどうでもいい。
大体お前だって本当は鬱でもないんだろ。


244 名前: デフォルトの名無しさん 投稿日: 02/02/23 09:56
>>242
つっこむ以前に汚すぎて読む気もおきねーよ


245 名前: デフォルトの名無しさん 投稿日: 02/02/23 13:13
そんなに鬱ならメンヘル板逝け


246 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:03
画像などの大きなデータを交換する方法としては、
どれが適してるのでしょうか?
本来なら私自身が全方法をテストして調査するべきなのでしょうが、
みなさんのご意見を聞かせていただけると有り難いです。



247 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:11
>>244
「ダメなコメントのつけかた」のサンプルじゃないのか?


248 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:14
>>246
DVD-RAM

(その質問だと、前提が正しく示されてないから、こういう大ボケな答えが返って
きても文句言えんと思う)


249 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:29
>>248
無駄レスすんな

>>244
同意


250 名前: 投稿日: 02/02/23 14:35
このプログラムの解説をしてもらえませんか?
ハノイの塔っていうプログラムです。


#include<stdio.h>

hanoi(char src,char dst,char tmp,int n)
{
if(n > 1)
    {
hanoi(src,tmp,dst,n-1);
hanoi(src,dst,tmp,1);
hanoi(tmp,dst,src,n-1);
    }
else
{
printf("move from %c to %c\n",src,dst);
}
}
main()
{
int n;
printf("何個?   ");
scanf("%d",&n);
hanoi('A','B','C',n);
}


251 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:36
>>250
実に読んだままです。


252 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:37
・・・まさか貴様、
ハノイの塔の説明でも聞きに来たんじゃないだろうな?


253 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:37
>>249
いやん。「246 だと答えようがないから、もう少し詳しく書け」と遠回しに言ってる
だけだって。

> 画像などの大きなデータを交換する方法
これだけじゃ、圧縮方法聞きたいのかメディアを聞きたいのか、一対多なのか
分からんから、何とも言えんでしょ。


254 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:38
>>250
なんか酷く人使いの荒い質問が来てるぞ・・・
宿題全部やってください、よりも酷いかも。


255 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:40
>>250

進呈 : 最低努力賞


256 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:43
>>250
ほれ
http://www.google.com/search?hl=ja&q=%83n%83m%83C%82%CC%93%83%82%CC%90%E0%96%BE&lr=lang_ja


257 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:47
エロサイトなんですけど
なんかHP上にリンクが多すぎて
それ自体の入り口がどこか分かりにくいし
実際に中に入ってみると
全然違う内容のページが表示されるのですけど何故でしょう?


258 名前: 投稿日: 02/02/23 14:53
>ハノイの塔の説明でも聞きに来たんじゃないだろうな?
ハノイの塔の事は分かってます。
hanoi()関数の中身がいまいち分からないんです。


259 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:54
>>258

回答は終了しています。


260 名前: 256 投稿日: 02/02/23 14:57
>>258
>>256はエロサイトじゃないけど、見とけって。


261 名前: デフォルトの名無しさん 投稿日: 02/02/23 14:58
MEで使えるフリーのCコンパイル
あるとこ教えて!!


262 名前: 投稿日: 02/02/23 14:59
>>256さん、ありがとうございます。
このHPでアルゴリズムとやらを勉強してみますね。


263 名前: デフォルトの名無しさん 投稿日: 02/02/23 15:00
>>261
日本語が解りません


264 名前: デフォルトの名無しさん 投稿日: 02/02/23 15:00
Cコンパイル をさがしてるんですか?
コンパイル は開発現場に行けば見かけることが出来ます。



265 名前: デフォルトの名無しさん 投稿日: 02/02/23 15:03
>>261
http://pc.2ch.net/test/read.cgi/tech/1012348974/n448
http://pc.2ch.net/test/read.cgi/unix/1013144113/n82


266 名前: デフォルトの名無しさん 投稿日: 02/02/23 15:04
>>261
コンパイル=コンパイラならココ。
http://www.digitalmars.com/




267 名前: デフォルトの名無しさん 投稿日: 02/02/23 15:33
共用体って本当に便利なの?


268 名前: デフォルトの名無しさん 投稿日: 02/02/23 15:42
>>267
うん


269 名前: デフォルトの名無しさん 投稿日: 02/02/23 15:51
>>268
ほんとに?


270 名前: デフォルトの名無しさん 投稿日: 02/02/23 16:11
>>269
あんまりつかわないよ


271 名前: 268 投稿日: 02/02/23 16:12
>>269
疑うんなら質問するな〜〜〜〜


272 名前: デフォルトの名無しさん 投稿日: 02/02/23 16:47
疑ってすまん。
では、どんな場面で使います??


273 名前: デフォルトの名無しさん 投稿日: 02/02/23 17:04
ぽいんたのキャストをせずにメモリ領域を共用したいとき。
その他もろもろ。

有益な使い方はたくさんある。



274 名前: デフォルトの名無しさん 投稿日: 02/02/23 17:06
>>272
yacc 使うとき


275 名前: デフォルトの名無しさん 投稿日: 02/02/23 17:09
variant型の実装に持つかっとるな



276 名前: デフォルトの名無しさん 投稿日: 02/02/23 17:24
うーむ。。。
メモリ領域の共用だったらキャストしたほうが
融通が効くように思うのですが。

イマイチ理解できないっすTT


277 名前: デフォルトの名無しさん 投稿日: 02/02/23 17:43
>>276
単純にキャストすると、アライメントがらみで死ぬと思うが。


278 名前: デフォルトの名無しさん 投稿日: 02/02/23 18:01
キャストで済むのはもっともなんだが、
コンパイラの型検査機能を台無しにしたり
277の言うようにアライメントが保証されずにバスエラーが発生したり、
キャストでコードが汚くなる。

それよりは共用体をうまく使った方が
「同じバイトデータを異なる複数の型でアクセスするんだ」という
意志がはっきりと読みとれてよい。

仕様目的はメモリ領域の共用。
わざわざ共用体を試用する意義は、それをコンパイラにもコードの読み手にも
それをはっきりと明示できるから、に他ならない。

キャストは最後の手段だぞ。



279 名前: デフォルトの名無しさん 投稿日: 02/02/23 18:04
誤字でござるよ。
ニン、ニン。



280 名前: 232 投稿日: 02/02/23 18:29
>>235-236
詳しく書いてくれてありがdjc


281 名前: デフォルトの名無しさん 投稿日: 02/02/23 19:01
>>278
ありがとう。
納得しました。



282 名前: デフォルトの名無しさん 投稿日: 02/02/23 19:04
よく関数呼び出しにはオーバーヘッドがかかるから
マクロ呼び出しの方が有利とか言うでない??
一体全体、オーバーヘッドってなんなの?
仮引数をスタックにつんだり、おろしたりする作業のことですか??


283 名前: デフォルトの名無しさん 投稿日: 02/02/23 19:18
>>278
はっきり言ってWin32APIのようなAPIや関数設計だと
いちいちunionで共用を宣言してたらトンデモソースになるぞ


284 名前: デフォルトの名無しさん 投稿日: 02/02/23 19:57
>>266
そのサイトってUG?
MFCとか非オブジェクトコードで配っちゃってるし、
イマイチ聞いたことがないコンパイラなので


285 名前: デフォルトの名無しさん 投稿日: 02/02/23 20:09
>>283
CreateWindow の引数 hMenu とかの話か? あれは API の設計が腐ってると
思うんだが、まぁ CreateWindow() を使う側の人間としては、キャストで済ませ
るしかないな。

Win32 API でも MMTIME や MIXCONTROL, LARGE_INTEGER なんかは union
を使ってるよ。


286 名前: デフォルトの名無しさん 投稿日: 02/02/23 21:03
>>282
「呼び出し」にかかるオーバーヘッドについての議論が
以下にあります。

http://curry.2ch.net/test/read.cgi/occult/1014129830/



287 名前: デフォルトの名無しさん 投稿日: 02/02/23 21:06
>>284
元 Symantec C++、と言えばそんなに聞いたことのない
コンパイラでもないのではなかろうか。


288 名前: デフォルトの名無しさん 投稿日: 02/02/23 21:13
昔 : Apple純正 VS Symantec C++
今 : Apple純正 VS CodeWarrior


289 名前:   投稿日: 02/02/23 23:25
この糞スレまだあったのか


290 名前: ビル・ジョブス 投稿日: 02/02/23 23:31
今のCPUなら、実際のスタックに積むオーバーヘッドなんか無いに等しい。
だって、実際は内部REG or キャッシュにしか積まないだろ?
デバッガから一見Stackに見えるエリアもCPUの中だよな?



291 名前: デフォルトの名無しさん 投稿日: 02/02/23 23:33
>>290
おいおい(w

試しに関数呼び出しと、inline 展開した場合のコードを使ってプロファイルを
とってみなよ。


292 名前: 289 投稿日: 02/02/23 23:35
まだ続ける気なの?


293 名前: ビル・ジョブス 投稿日: 02/02/23 23:39
あのさーマルチタスク環境で、なにが「プロファイル」だよ!
もう少し別のところに頭使おうよ。
関数コールのオーバーヘッドなんて議論は10年前に終わってるんだよ。
あんたはその「プロファイル」とやらをJ-TAG ICEでとるのか?
ならばすげー(w



294 名前: デフォルトの名無しさん 投稿日: 02/02/23 23:44
マルチタスク環境下で、意味のあるプロファイルが取れないと思ってるんだろうか。



295 名前: ビル・ジョブス 投稿日: 02/02/23 23:48
今時「ms」オーダーで満足するヤツが居れば使えばいい。
プラットフォームによってまったく意味ないと思う。



296 名前: デフォルトの名無しさん 投稿日: 02/02/23 23:53
> プラットフォームによってまったく意味ないと思う。
逆にターゲットによっては重要になるだろうよ。
あんた、一体何が言いたいの?


297 名前: デフォルトの名無しさん 投稿日: 02/02/23 23:59
授業の課題でソートのプログラムを2種類作成しました。
で、実行時間を比較したいのですが、
どうすればよい??


298 名前: デフォルトの名無しさん 投稿日: 02/02/23 23:59
>296
シングルタスク専門の組み込み屋さんが
特殊なケースを勝手に一般化して語ってるだけ。
捨て置けい。


299 名前: デフォルトの名無しさん 投稿日: 02/02/23 23:59
>>297
ストップウォッチではかる。


300 名前: ビル・ジョブス 投稿日: 02/02/24 00:00
>>296
論点が曖昧で議論に値しないということ。

それと・・・おまえに「あんた」と呼ばれる覚えはないな、
このスレの創設者に対して失礼じゃないか?
君は出禁にします。



301 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:01
>297
OS・開発環境による。


302 名前: ビル・ジョブス 投稿日: 02/02/24 00:05
>>297
CPUのデーターシートからインストラクションの実行時間を
計算すれば?
後は、GetTickCount()っていうクソ「プロファイル」APIで
測ったふりでもしたら?



303 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:06
>>301
学校の課題ってことは UNIX だろうから time コマンド使え、が正解かな。


304 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:06
>>300
君が知ったか君だという事だけは判った。


305 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:07
>>302
(プ


306 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:08
>>302
キミが出入り禁止で良いよ。回答が役に立たな過ぎ…。


307 名前: ビル・ジョブス 投稿日: 02/02/24 00:10
言い忘れたけど・・・
P4 1.6GHzとかにすればプロファイルする必要ないね。
今の世、スピードはH/Wで稼いでS/Wは設計手法重視するべし。



308 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:11
環境はWindowsです。関数の呼び出し元前後に仕掛けを入れる形にしたいのですが。。。


309 名前: ビル・ジョブス 投稿日: 02/02/24 00:11
>>306
おまえのIPって・・・いい?


310 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:12
>>308
コンパイラも書いとけ。


311 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:13
>>309
今時IPとか言ってるのも寒いな。


312 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:13
borlandのフリーのやつです。。。


313 名前: ビル・ジョブス 投稿日: 02/02/24 00:14
>>308
Windows?の何?
リアルタイムクラスとか使ってる?
なら、ほぼ正確に測定できるよ。



314 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:14
>>309
今は b-mobile からアクセスしてるから、端末の IP アドレス外から見えるのは
proxy server のアドレスだけだぞ。(そもそも削除人じゃなきゃ見えないだろうが)


315 名前: ビル・ジョブス 投稿日: 02/02/24 00:17
>>314
うそうそ、子供みたいにすぐムキになるなよ。



316 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:18
寒いスレになりつつあるな


317 名前: ビル・ジョブス 投稿日: 02/02/24 00:21
相変わらず、このサイトってバカが多いな。



318 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:22
>>312
なら #include <time.h> して clock() 関数を使うのが良いと思うが。
これは呼び出し側プロセスが使った


319 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:23
CPU 時間を tick 数単位で返す。CLOCKS_PER_SEC で割ると秒単位に
変換できる。



320 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:28
>>317
お前、氷魚なみの妄想君だな。
厨房入ってるし。


321 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:28
> P4 1.6GHzとかにすればプロファイルする必要ないね。
もうね、アフォかと、バカかと…


322 名前: ビル・ジョブス 投稿日: 02/02/24 00:29
シングルスレッドならね・・・
comとかが勝手にスレッド生成してますよ・・・
関数レベルの正確なプロファイルは簡単に出来ないよ。
そして、意味がない。



323 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:31
質問なのですが、inlineを関数の前につけると、プログラムが早くなりますよね

そうならば、どの関数にもinlineをつければいいんじゃないかと思うのですが、
そうではないんですよね?

inlineは、ローカル関数として宣言している時
意外ではつけてはいけないのでしょうか?


324 名前: ビル・ジョブス 投稿日: 02/02/24 00:31
>>321 おれは間違えてるか?教えてくれ!



325 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:33
>>324
致命的に間違ってる。


326 名前: ビル・ジョブス 投稿日: 02/02/24 00:36
>>323
関数コール・リターンのオーバーヘッドよりも、キャッシュヒットする
事のほうが遥かに重要なんだよ。よって速くなりません。

もうー・・・だからバカは嫌いなんだよ。



327 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:38
俺はバカよりキティ飼いの方が嫌いだ。
バカは教え諭せば話が通じるが、
キティ飼いは意思の疎通が図れん。


328 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:40
>>322
正確なプロファイルってなんだ?
もしかしてかかった時間を1ms単位で計れと?

あくまでプロファイル結果は処理集中個所を探すための指標にすぎないから、
大まかで良いんだよ。


329 名前: 298 投稿日: 02/02/24 00:40
俺も致命的に間違ってた。スマン。
ビルは単なる無知な素人だったみたいだ。

>326
>関数コール・リターンのオーバーヘッドよりも、キャッシュヒットする
>事のほうが遥かに重要なんだよ。よって速くなりません。
だから勝手に一般化するなっての。
単純なsetter/getterはinlineにしたほうがいいだろ。


330 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:42
>>323
明示的な関数ポインタ (C++ なら暗黙的にも) 使ってたら inline 効かないし
何より、全部の関数に付けてたらサイズが肥大して仮想記憶のスワップが
バカにならなくなるからねぇ。
ローカルである必要は無いけど、ほんの数行で済む様な関数なら inline に
しとけばいいんじゃないかな。

>>326
「キャッシュには連続した領域がひとつだけ読み込まれる」と思ってないか?


331 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:44
>>326
なんか、珍しく(部分的に)正しいことを言ってるな(w

inline 関数展開してしまうと、同じ関数の中身が複数の場所に展開されることに
なるため、プログラムのサイズが肥大化します。その結果として命令キャッシュ
のヒット率が落ちかねないので、

 「どこまで inline 展開するのか」

は慎重に判断する必要があります。

また inline 展開をするためには、関数の定義(宣言ではなく中身)が見えてる必
要があります。ということは定義をヘッダに書く必要があるわけで、プログラム間
の相互依存関係が深くなるというデメリットもあります。

一般的には「スタックフレームを削除できる程度」に簡単な関数なら inline 化
した方がお得です。それ以上は、場合によりけり。


332 名前: ビル・ジョブス 投稿日: 02/02/24 00:45
>>328
「大まかで良いんだよ。」って、それで意味ある?
1万回とかの平均とるなら話は別だけど・・・?



333 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:47
>>332
ベンチじゃないんだから、実行時間そのものが重要なわけじゃないんだが?


334 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:49
(´−`)。o ○ (重要なのは比率だよね)



335 名前: ビル・ジョブス 投稿日: 02/02/24 00:51
>>330
nウェイセットアソシエイティブって知ってますが・・・
というか、昔おれの作った同ロジック(S/W)のデバイスドライバを
皆さん使ってますが・・・(EMMなんとかってやつで、DOSに付いてたよな)

ハー・・・



336 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:53
すごい遅いアプリがある。
そのアプリは関数f1()..f100()の100個の関数で構成されている。
そのアプリを高速化しようと思ったら
まずプロファイラをとって各関数の実行時間の割合を調べる。
プロファイラの結果は大体こんな感じ
f33() 33%
f21() 18%
f65() 5%
f43() 1%
...
この結果から全体の速度を10%あげたければ
f33()を33%->23%になるように高速化すればよいことがわかる。
割合に多少の誤差があってもこの方針はあまり狂わない。
これがプロファイラの基本的な使い方。


337 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:55
>>335
デバイスドライバ?


338 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:56
>>319
サンクスです!
でも、オレが作った関数、、、おそっ!


339 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:58
あのさーマルチタスク環境で、なにが「キャッシュヒット」だよ


340 名前: ビル・ジョブス 投稿日: 02/02/24 00:58
>>336
んなことしても意味ないね。
プロファイルする以前に設計が悪いんだよ。事前に分からないのか?
お勉強ツールにはいーかな?



341 名前: デフォルトの名無しさん 投稿日: 02/02/24 00:59
>>337
emm386の事か?
emsメモリ用のドライバだが…
電波は放置推奨。


342 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:00
>>337
ディスクのキャッシュかも


343 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:02
> んなことしても意味ないね。
> プロファイルする以前に設計が悪いんだよ。事前に分からないのか?
事前に予測できなかった性能上のボトルネックを探ってるんでしょ。
設計して実装したらその後のチューニングはしないんですか?
“ア ン タ”は?


344 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:03
f43()を100倍高速化して嬉々としてるタイプだな>ビル


345 名前: ビル・ジョブス 投稿日: 02/02/24 01:04
>>339
「だからこそ」だよ。
みんなで少しでもコードの肥大を抑えるのが「エチケット」。



346 名前: ビル・ジョブス 投稿日: 02/02/24 01:06
>>343
しねーよ、テメーは死ねよ。



347 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:08
>>340
> プロファイルする以前に設計が悪いんだよ。事前に分からないのか?
ふつーわからない。設計が良くても、思わぬ実装上の問題でボトルネックが
発生している事は良くある。


348 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:09
> しねーよ、テメーは死ねよ。
うわぁ(笑
あんさん、めっちゃおもろいわ
その駄洒落! 最高、流石!!
惚れたね、もう


349 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:10
>>347
ビル様くらいになってくると、生成されるコードすべても考慮して設計できるんだよ、きっと。


350 名前: ビル・ジョブス 投稿日: 02/02/24 01:10
>>347
じゃーそのボトルネックとやらが、MS提供のDLL内だったらどうする?



351 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:11
ビルに遊ばれている人々多数…


352 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:12
>>350
2番目以降の候補に手をつける。


353 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:13
http://pc.2ch.net/test/read.cgi/tech/1013995470/
ここの1の親戚か?>ビル


354 名前: ビル・ジョブス 投稿日: 02/02/24 01:14
>>352 アフォ?



355 名前: ビル・ジョブス 投稿日: 02/02/24 01:16
>>353
John ◆0z.4Is5E は知らないが・・・
変なヤツと一緒にするなよ。



356 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:18
> じゃーそのボトルネックとやらが、MS提供のDLL内だったらどうする?
アンタがこう書いた意図は、
“自前の処理に置き換える”というのはコストが掛かりすぎるし、現実的には対応不能
という意味じゃねぇのか?

ならそこは置いておき2番目以降のボトルネックを改善するのが
なんでアフォな事なのかと、問い詰めたくも無いんで消えてくれ。
むしろ氏んでくれ。


357 名前: ビル・ジョブス 投稿日: 02/02/24 01:19
>>ALL
おいおい小僧ども!もう終わりか?
Windows環境でプロファイルなんて、大した意味がないって分かったか?



358 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:20
>>351
っつか、ビルはこの板では John に続く逸材だし。マ板のほうでは氷魚が活躍
中だが。


359 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:21
>>350
ボトルネックがはっきりしていいじゃない。

問題の API / 関数を極力呼ばないで済むように考える。


360 名前: ビル・ジョブス 投稿日: 02/02/24 01:22
>>356
じゃー50番目のボトルネックとやらまで、
>“自前の処理に置き換える”というのはコストが掛かりすぎるし、現実的には対応不能
だったらどうする?



361 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:23
…その三人で好いただけ殴りあってくれ。
他所様には迷惑かけないようにな。
体力・スタミナ面では氷魚が抜きんでてるか?


362 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:24
>>361
氷魚の書き込み量は Kusakabe と張り合える。他のスレッドに伝染しないだけ
マシだけど。


363 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:26
>>360
それ、ボトルネックとは言わんが。

いくつかの関数で均等に CPU 時間食ってる場合には、たいていは実装上の
致命的なミスはない(よって実装レベルでの最適化は必要なし)と判断される。


364 名前: ビル・ジョブス 投稿日: 02/02/24 01:27
バカ相手にしてるのは退屈でもう眠い。
頑張ってプロファイルしてくれ!
最後に言わせてもらうが、プロファイル以前の問題を解決してくれよ。

また語ろう!さらば!



365 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:28
>>360
ネタにマジレスするが、、、
そこまで深刻なら普通はボトルネックの原因であるMSのDLLを使わないようにするだろ。


366 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:29
>>362
どのスレか参考までに教えてください。
是非みたい!

以前一般のPC系BBSに居た電波もそんな名前だったな


367 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:31
>>366
http://pc.2ch.net/test/read.cgi/prog/1013093799/


368 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:38
FBI心理分析官のローバート・レスラーですがなにか?


369 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:38
アメリカ大統領ブッシュですがなにか?


370 名前: 323 投稿日: 02/02/24 01:41
>>330
>>331
ありがとうございました
やみくもに5個程度inlineしていました
今から改良します


371 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:41
>>364
やばくなると逃げる。
ネズミ男の類だな。


372 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:42
この前凄いプログラマ見たよ!
あたまで全部処理してる人・・・。(凄い・・・


373 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:43
>>371
去るものは追わず。来たら叩け。


374 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:47
C言語のCはなにの?


375 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:48
むむ、ここは一体なんのスレじゃ?


376 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:48
>>374
VitaminC


377 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:49
>>374

そ、そんなアンタ、放送できませんがな・・


378 名前: sage 投稿日: 02/02/24 01:50
ビルもぼろが出ない程度に書き込んでりゃ
適度に尊敬されてたものを..



379 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:51
>>378
また、死体に鞭を打つような真似を…

ゾンビのごとく復活してきたら、ロケットランチャーで追い払うことにして、
とりあえずは放置しときましょうよ。


380 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:55
>>374
むずかC〜


381 名前: デフォルトの名無しさん 投稿日: 02/02/24 01:55
>378
プロファイラ関連の発言を見る限り
やたら視野の狭い厨房にしか見えんが...


382 名前: デフォルトの名無しさん 投稿日: 02/02/24 02:33
なんか、だんだんハイソサエティから遠ざかって行くな。
カルシウム足りねぇんだな、きっと。
面白いからいいけど。


383 名前: (・∀・) 投稿日: 02/02/24 15:21
mallocなんかで確保したメモリ領域をファイルみたいに
readしたいんだけど、うまい方法ありますか?


384 名前: デフォルトの名無しさん 投稿日: 02/02/24 15:27
ワケワカラソ
memcpy()で何か問題が?


385 名前: デフォルトの名無しさん 投稿日: 02/02/24 15:33
>>384
read() といってるから、そもそも * (間接参照) で終わりじゃないのか?


386 名前: デフォルトの名無しさん 投稿日: 02/02/24 15:36
>>385
オレもそう思う。なんでコピーしたがるかなぁ?


387 名前: sage 投稿日: 02/02/24 15:40
#define MEMFILE_EOF -1
typedef struct tagMEMFILE {
char *buf;
size_t bufsize;
size_t readcnt;
} MEMFILE;

MEMFILEBUF *MemFileOpen(MEMFILEBUF *pmem, char *p, size_t len)
{
if ((pmem->buf = (char *)malloc(len)) != 0)
{
memcpy(pmem->buf, p, len);
pmem->bufsize = len;
pmem->readcnt = 0;
}
return pmem;
}

void MemFileClose(MEMFILEBUF *pmem)
{
if (pmem->buf != 0)
{
free(pmem->buf);
}
}

int MemFileGetChar(MEMFILEBUF *pmem)
{
if (pmem->readcnt >= pmem->bufsize)
return MEMFILE_EOF;
return (unsigned char)pmem->buf[readcnt++];
}

unsgiednchar *MemFileGetLine(MEMFILEBUF *pmem, char *buf, size_t bufsize)
{
size_t cnt = 0;
int c;
while ((c = MemFileGetChar(pmem)) != MEMFILE_EOF)
{
if (c == '\n')
break;
if (cnt >= bufsize - 1)
break;
buf[cnt++] = c;
}
buf[cnt] = 0;
return buf;
}

こんなんじゃねえの?


388 名前: (・∀・) 投稿日: 02/02/24 16:15
>>384-387 ありがとね。標準入力からデータ加工するときと
メモリ領域から加工するときがあって、ロジックを
あまり変えないでメモリもストリーム・イメージに
ならないかな?とおもたんで。387を参考にしてみます。



389 名前: デフォルトの名無しさん 投稿日: 02/02/24 16:27
>>388
ならば、最初からそう書いておかないと、
またヴァカ質問が振ってきたのかと思うですよ。


390 名前: デフォルトの名無しさん 投稿日: 02/02/24 16:31
>>388
それなら、ストリームのほうに統一しないで、標準入力から加工する
時も、メモリに一旦読み込むってのはダメなの?


391 名前: デフォルトの名無しさん 投稿日: 02/02/24 17:14
Cっていまでもたくさんの人が学んでいるのねえ


392 名前: デフォルトの名無しさん 投稿日: 02/02/24 17:43
>>391
では、何を学べばいいと思います?


393 名前: デフォルトの名無しさん 投稿日: 02/02/24 17:56
自分で考えろ


394 名前: デフォルトの名無しさん 投稿日: 02/02/24 18:00
>>393
いやあねえ、
私が教えて欲しいのではなくて、
なにか代替案でもあってそう言っているのかな、と思って
ご意見を伺って見ましょうかと。


395 名前: デフォルトの名無しさん 投稿日: 02/02/24 18:03
ただ俺は他のスレとみくらべて
続いてるなーと思っていっただけでふ


396 名前: デフォルトの名無しさん 投稿日: 02/02/24 18:03
>>395
なあんだ。

Cは古いぜ、とかわざわざ書きに来たのかと思った。


397 名前:   投稿日: 02/02/24 18:08
C言語のファイルIOって、高水準入出力と低水準入出力があるみたいなんだけど、
何が違うのですか??



398 名前: デフォルトの名無しさん 投稿日: 02/02/24 18:09
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C



399 名前: デフォルトの名無しさん 投稿日: 02/02/24 18:26
高水準は遅いけどバッファリングとか改行コードの処理をライブラリレベルでやってて(あるいみ)便利。
低水準は速いけど読み書きだけなので不便。

unix:
低水準入力はシステムコールで実現。
高水準入出力は、たぶんおそらく内部的に低水準入出力を呼び出している。

win:
低水準入出力はAPIで実現。
高水準入出力もAPIで実現。
仮想記憶に頼りっきりなので性能はあまりかわらんが、どっちかというと高水準の方が遅い。



400 名前:   投稿日: 02/02/24 18:49
>>399
thx!


401 名前: デフォルトの名無しさん 投稿日: 02/02/24 19:58
int 32bit、short 16bit、char 8bit と仮定します。

例えば、
int n = 0x00000000;
short i = 0x1111, j = 0x2222;
char c = 0x33, d = 0x44;
とした場合、デバッガでメモリの確保のされかたを見てみると、
僕の環境では以下のようになっていました。

44 CC CC CC 33 CC CC CC 22 22 CC CC 11 11 CC CC 00 00 00 00

つまり、各変数に置き換えると、

DD xx xx xx CC xx xx xx JJ JJ xx xx II II xx xx NN NN NN NN

となっています。
すべて 4 バイトの倍数番目から確保されていて、
それぞれの変数の間にはすきまが空いています。


ここで思ったのですが、それぞれの変数間を詰めないのであれば、
メモリの消費をできるだけ抑えるために、
int の代わりに char や short を使ったりするのは意味がないんじゃないでしょうか?
結局、int 分の領域が用意されていることと同じになりませんか?
それとも、この変数間のすきまは何かにちゃんと有効利用されているんでしょうか?

どなたか教えてください。
(説明がややこしくなってすいません。)



402 名前: デフォルトの名無しさん 投稿日: 02/02/24 20:01
>>401
処理系依存。
コンパイラによってpaddingを調整できるものもある。
VCだと1〜16byteまでかな?


403 名前: デフォルトの名無しさん 投稿日: 02/02/24 20:03
>>401
> メモリの消費をできるだけ抑えるために、
> int の代わりに char や short を使ったりするのは意味がないんじゃないでしょうか?
いまどきのプラットホームだと、あまりない。

ただし配列やら malloc() やらで連続したデータ領域を取ってくるときには、効い
てくる。


404 名前: デフォルトの名無しさん 投稿日: 02/02/24 20:04
>>402
構造体の padding じゃなくて stack のアライメントな。


405 名前: デフォルトの名無しさん 投稿日: 02/02/24 20:16
>>401
>>401のような環境で、メモリ消費を抑える目的”だけ”でintのかわりにcharやshortにしている場合は、
まったくもってその通り。

ちなみに、スキマができるのは理由がある(アクセスが速くなったりする)ので、
使っているCPUのアーキテクチャを調べてみるのがお薦め。
Intelのホワイトペーパー(?)の日本語訳は、めちゃくちゃ読みやすいよ。


406 名前: デフォルトの名無しさん 投稿日: 02/02/24 20:44
表示する文字に色をつける方法はありますか?具体的なソースもおねがいします。


あと、画面消去の方法も教えてください。


407 名前: デフォルトの名無しさん 投稿日: 02/02/24 20:47
C FAQ嫁。



408 名前: 401 投稿日: 02/02/24 21:21
>>402-405
みなさんレスありがとうございました。
勉強になりました。




409 名前: 七誌 ◆AYAYAwqU 投稿日: 02/02/24 21:23
C言語を実行するツールで使いやすいのはありますか?
学校で使ってるのは、WINDOWSでは使えないやつなので
WINDOWS対応の奴を教えてください。お願いします。


410 名前: デフォルトの名無しさん 投稿日: 02/02/24 21:40
Delphi 6 Personal


411 名前: デフォルトの名無しさん 投稿日: 02/02/24 21:45
gcc
bcc32


412 名前: デフォルトの名無しさん 投稿日: 02/02/24 21:48
http://paming.s7.xrea.com/ykwk166_kai/yukiwiki.cgi?mycmd=read&mypage=%5B%5B%82%DC%82%B8%82%CDC%8C%BE%8C%EA%82%F0%8Ao%82%A6%82%BD%82%A2%82%CC%82%C5%82%B7%5D%5D


413 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:00
すまん、教えてください。
C言語勉強中なんだけど、配列のソートでつまづいてます。

int main(void)
int test[NUM];
int tmp;
int i,j,s,t;

printf("%d人の点数を入力してください。\n", NUM);
for(i=0; i<NUM; i++){
scanf("%d", &test[i]);
}
for(s=0; s<NUM-1; s++){
for(t=s+1; t<NUM; t++){
if(test[t] > test[s]{
temp = test[t];
test[t] = test[s];
test[s] = tmp;
}
}
}

for(j=0; j<NUM; j++){
printf("%d番目の人の点数は%dです。\n, j+1, test[j];
}

return 0;

}

これをすると点数が一番高い人から表示されるようになるらしいんだけど、
プログラムの意味がよくわかりません。
めんどくさいけど、プログラマー様教えてくださいな。。


414 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:04
NUM個の中で一番大きい数値を探し、それを0番目に置く
上の数値を除いた(NUM-1)の中で一番大きい数値を探し、それを1番目に置く


バブルソート、っていうんだけっか




415 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:05
隣接交換法で調べれ



416 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:06
>>413 google で「馬鹿ソート」と検索すれば説明があるよ。
それでもわからなければ、トランプを使って同じことをやればよし。


417 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:06
>>414
そうなんです。教科書にはそう書いてあるんですけど、
ifが絡んでるところがわからないんです。

よろしければ、言葉で流れを説明してもらえませんか??


418 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:07
こういうのってデバッガでステップ実行すればすぐわかるよ。


419 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:10
=413
馬鹿ソートということでしたら、
もっと、効率的なプログラミングはあるんですか??
よろしければ、そっち(効率てき方)を教えてもらえませんでしょうか?


420 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:12
これもわからないようじゃ無理。
ひらがながわからないんで漢字教えてくださいって逝ってるようなもんだ。



421 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:12
うむ、見事な“教えて君”だ。
これほど見事な“教えて君”を見るのは久しぶりだ。


422 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:15
=413
見事な教えて君ですんません。
これがわからなければ言語はきついのかな・・
んでも、マジでやってるんで、よろしくです。


423 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:16
#pragma comment
ってなに?


424 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:17
それより効率的だと
シェルソートかクイックソートかヒープソートかシェーカーソートかその他


425 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:23
struct hoge{
int hoge_i;
struct hoge *next;
};

↑これはコンパイル通るけど、↓これは通らないけど、なんで?(BCCで)

struct hoge{
int hoge_i;
struct hoge (*next)[5];
};




426 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:24
>>420-421
で、>>414になにかアドバイスしないのか?


427 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:24
カッコ抜いても?


428 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:30
馬鹿ソート(バブルソート)でお世話になったものです!!
わかりました。アドバイスありがとうございました。

実は単純だったんですね。お世話になりました(_O_)


429 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:35
あ〜ぁ、>>428が勘違いしたまま帰って行くよ・・・


430 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:35
>>427
カッコを取ったらできたけど、カッコをつけた状態のソースが
意図する変数を宣言したい場合どうしたらいいの?


431 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:36
…ならアンタがアドバイスしてやれよ。
アフォか?


432 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:36
「愛」ってC言語でなんていうんですか?


433 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:37
同じだよ


434 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:48
>>430
「struct hoge (*next)[5];」は“hoge 5個の配列へのポインタ”だが
struct hoge は定義している途中なのでサイズが判らない。
一方「struct hoge *next;」はポインタだから、hoge の定義が終わってなくても
サイズが判る。
…で本当に“hoge 5個の配列へのポインタ”を意図してるの?


435 名前: デフォルトの名無しさん 投稿日: 02/02/24 22:48
>>431
バブルソートではない、と言いたいのだろうけど、
思わせぶりにする程の事か?


436 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:05
>>433
今まで何か勘違いしてたみたい。
俺のやりたかったのは、カッコが無いやつだった。
アドバイスありがとうございました。 >>428 >>433



437 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:08
>>436
誤爆。
#define 428 427
#define 433 434



438 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:25
表示する文字に色をつける方法はありますか?
具体的なソースもおねがいします。


あと、画面消去の方法も教えてください。
好きなタイミングでそれまでの表示を削除することは可能ですか?
これもソースキボン


439 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:29
バカにC FAQ嫁といっても効かない場合はどうしたらよいのでしょうか?


440 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:31
答えられないやつはだまってろアフォ


441 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:44
>438
環境依存の質問を書いてるのに、自分の環境を書いてない。
ちゃんとCFAQよめよ。



442 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:46
調べられたらとっくに調べてますが?
そのつもりがないから聞いてるんですが。


443 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:46
文字列の中からある文字列とある文字列の間にある文字列を抽出したいのですが、
いかようにすればいいでしょうか?

"あいうえおかきくけこさしすせそ"
上記のような文字列を格納した変数があるとします。
その変数と"かき"と"さし"の二つの文字列を引数に与えると
"くけこ"
が返ってくるような関数が作りたいのですが・・・


444 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:50
>>438
色つけたり画面消去したりはエスケープシーケンスていう文字列を
標準出力にprintf()すればKだ。

C言語なら、俺に聞け! <12>
http://pc.2ch.net/test/read.cgi/tech/1012348974/n783

具体的なソースは自分でさがしてちょ。
中途半端なソース書くと、叩かれるからね。

あとは、ライブラリを使うって手もある。
http://www.google.com/search?hl=ja&q=ncurses%81@%90F&btnG=Google+%8C%9F%8D%F5&lr=lang_ja


445 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:51
>441
環境ですか?コンパイラとかでしょうか

一応Visual C++ですが


446 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:53
>443
問題:以下のプログラムを書きなさい
"かき”の位置を調べる処理
”かき”の長さを求める処理
文字列の位置と長さを指定して抜き出す処理
 getstr("abcde", 1, 3)="bcd"
それらを組み合わせた処理


447 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:53
>>443
お好きなように。

strstr() で最初の文字列見つけて、その末尾から strstr() するとか。


448 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:56
基本的に文字にいろをつけたり画面を消去するのは無理なの?

じゃぁみんなはそんな問題をどう処理するの?

やっぱりそれまでの流れは全部後ろに表示されっぱなしなわけ??
消したいときもあるでしょ?そんなときはどーしてるの?


449 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:57
>443
おなじ文字列が複数あった場合の動作を規定しないと。
"あいうえおかきくけこさしすせそさし"
のときは、"くけこ"を返すのか"くけこさしすせそ"を返すのか。



450 名前: 444 投稿日: 02/02/24 23:59
>>448
>>444を見てね。


451 名前: デフォルトの名無しさん 投稿日: 02/02/24 23:59
>448
これをあげるからおとなしくしていてね、ボク。
http://www.kumei.ne.jp/c_lang/index_c.html


452 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:02
>>448
我らはあなたのしもべではござらん。
なんでも聞けばよいってものではない。

・過去ログを読みましたか?
・1のリンク先を見ましたか?
・Googleでしらべましたか?

すべて既出頻出とうちゃん楽勝ホームランです。
どの方法をとっても、答えは見つかります。


453 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:05
>基本的に文字にいろをつけたり画面を消去するのは無理なの?
無理ではないです

>じゃぁみんなはそんな問題をどう処理するの?
どうにかします。

>やっぱりそれまでの流れは全部後ろに表示されっぱなしなわけ??
そうじゃないかもしれません。

>消したいときもあるでしょ?そんなときはどーしてるの?
どうにかします。


454 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:12
>>448
       √ ̄ ̄ ̄ ̄ ̄\
     / ̄          |
    /   / ̄ ̄ ̄ ̄ ̄\|
    |   /         |
    |  /  `      ´ |
    | /  _     _ |  初心者の文字が目に入らぬか!!
     (6      つ.   |
     |     ___     |
  _  |     /__/    |
⊃|房| |        ___/
つ  ̄ ⊂




455 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:12
>>452-453
>>440を読んでねーのか?
質問してくるシロートには過去ログ読めだの言っておきながら・・・



456 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:18
>>455
もうちょっと礼儀正しく質問してください、質問君。


457 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:24
はい。ごめんなさい。


458 名前: 質問くん 投稿日: 02/02/25 00:42
DOS上で作ったEXEファイルをウィンドウズ上で実行(ダブルクリック)すると
終了した途端にドスプロンプトの画面が閉じちゃうんだけど何故?


459 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:46
>458
そーゆーもんだから。
最初からDOC窓開いて実行するか
cmd.exe /k yourprog.exe
ってショートカット作ってやってみな。


460 名前: 443 投稿日: 02/02/25 00:49
今回は最短の"さし"を調べたいので
1.文頭からstrstr()で"かき"の位置を調べる。
2.文頭からstrstr()で"さし"の位置を調べる
3.
2ー1の値が抽出する文字列の長さだから(?)
>446のgetstr(格納してある変数,1の値+"かき"の長さ,2,)を完成させればよしと言うわけですね。
ありがとうございました。挑戦してみます!



461 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:51
>>458
とりあえず動体視力を鍛えなさい。
・・ではなくて、

気がついて欲しい回避方法
・mainの最後にgetsを入れとくだけでとりあえず回避できる。

正しい方法
・DOS窓の設定を「実行後に閉じない」にする。(ショートカットのプロパティ)




462 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:52
>>460
strstrとかStrtokをごちゃごちゃいじりまわす知識を付けるよりは、

自分でゼロから書いたほうが絶対勉強になります。


463 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:56
独習Cの評判ってどうなの?


464 名前: デフォルトの名無しさん 投稿日: 02/02/25 00:57
>>461
動体視力を上げることで対応しようとした人って
結構いると思う。その一人>>464


465 名前: 459 投稿日: 02/02/25 01:01
>>461
>・DOS窓の設定を「実行後に閉じない」にする。(ショートカットのプロパティ)
こんなのあったっけ?
Win2k/XPにはないような。


466 名前: デフォルトの名無しさん 投稿日: 02/02/25 01:04
char *pickup(const char *str, const char *key1, const char *key2, char *buf, size_t bufsize)
{
size_t len1;
char *p1;
size_t len;

len1 = strlen(key1);
if ((p1 = strstr(str, key1)) != 0)
{
if ((p2 = strstr(p1 + len1, key2)) != 0)
{
len = p2 - p1 - len1;
if (len >= bufsize)
{
/* 長すぎ。ぶった切る */
len = bufsize - 1;
}
strncpy(buf, p1 + len2, len);
buf[len] = 0;
return buf;
}
}
return 0;
}



467 名前: 質問くん 投稿日: 02/02/25 01:04
>>461
それは「プログラムを終了時に閉じる」のチェック
を、はずすということですか?それでもむりだったんですけど・・・



468 名前: デフォルトの名無しさん 投稿日: 02/02/25 01:08
>>465
む、確かに無い・・・Win98とかにはあったのになぁ
>>467
諦めて、DOS窓を開いてから手でファイル名入力して実行しましょう。


469 名前: 468 投稿日: 02/02/25 01:09
>>467
あ、訂正。手で入力しなくても、DOS窓開いてから、そこにexeファイルを
ドラッグ&ドロップすれば、ファイル名入力されるんだった。


470 名前: デフォルトの名無しさん 投稿日: 02/02/25 01:14
気がついて欲しい回避方法
・mainの最後にgetsを入れとくだけでとりあえず回避できる。


471 名前: デフォルトの名無しさん 投稿日: 02/02/25 01:15
それは邪道と心得よ


472 名前: 質問くん 投稿日: 02/02/25 01:16
>>470
それも無理でした、ちなみにOSはWIN95です。


473 名前: デフォルトの名無しさん 投稿日: 02/02/25 01:17
プログラムの最後にfor(;;);を入れるのは?


474 名前: デフォルトの名無しさん 投稿日: 02/02/25 01:22
>>472
それはありえん!


475 名前: デフォルトの名無しさん 投稿日: 02/02/25 01:22
>>471
そういうこだわりは、Cが出来るようになってからでよろしい。


476 名前: 質問くん 投稿日: 02/02/25 01:22
>>469
成功しました
>>473
うお〜、フリーズみたくなってしまいました。


477 名前: デフォルトの名無しさん 投稿日: 02/02/25 01:22
>>473
カコイイ!


478 名前: デフォルトの名無しさん 投稿日: 02/02/25 05:49
普通、最後にgetchar();を入れて待機させない?
俺はDOS窓からコンパイルしているからそのまま実行しちゃうけど。


479 名前: デフォルトの名無しさん 投稿日: 02/02/25 09:39
>>466
なんなのそれ?

$ gcc -c a.c
a.c: In function `pickup':
a.c:13: `p2' undeclared (first use in this function)
a.c:13: (Each undeclared identifier is reported only once
a.c:13: for each function it appears in.)
a.c:21: `len2' undeclared (first use in this function)



480 名前: 質問くん 投稿日: 02/02/25 15:03
>>478
大成功しました。
皆さんご協力有り難うございました。


481 名前: デフォルトの名無しさん 投稿日: 02/02/25 17:58
windows2000でプリンタポートを汎用ポートとして
使うにはどうすればよいの? なんかgiveioとか言うのいれたけどできません。
ちなみにC言語でポート制御しようとしてます
誰か教えて〜







482 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:21
超初心者です。
本(独習C)で、
int main(void)
{
としているのですが、
main()
{
と何が違うのでしょうか。下のを使っていてもいいんですよね。


483 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:24
型は省略するとintになる。
仮引数は省略するとvoidになる。
はずだけど、明示的に書いておいたほうがコンパイラタンに文句を言われない。


484 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:27
4桁の数字intがあって、
これを文字.txtつけてcharポインタを返す関数を作りたいんですが、
1000を入れれば、1000.txtと返すような。。。
char *itotxt(int nu){
char fn[9];
sprintf(fn,"%d.txt\0",nu);
return fn;
}
これじゃダメですよね?シクシク


485 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:30
482です。ありがとうございます。
return(0); と return 0;
は何が違うのですか?


486 名前: 暇人 投稿日: 02/02/25 23:31
char *itotxt(int nu){
static char fn[9];
sprintf(fn,"%d.txt",nu);
return fn;
}



487 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:37
>>485
何も違わない。


488 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:39
>485
1+1 と (1)+(1) くらいには違う。


489 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:40
>>485
タイプ量


490 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:47
>489
タイプ量って何ですか?


491 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:52
type ryou = キーボード鬱量


492 名前: デフォルトの名無しさん 投稿日: 02/02/25 23:55
>>484
一体誰が文字列の中に "\0" を入れ始めたんだろうか…
要らんですよ。

char fn[9] は、その関数の中にしか存在しません。
(文字列への) ポインタを返すなら
 1. static char fn[9] にして、関数を抜けても無くならないようにする。
 2. 文字列へのポインタを引数で貰う。
 3. malloc() 等で動的にメモリを割り当てて、そこに文字列を格納して返す。

のどれかでしょう。マルチスレッドなプログラムで無ければ 1. が最も
簡単ですね。


493 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:07
質問です。
この問題を教えてください。

次のプログラムの誤りを指摘しなさい。
#include<stdio.h>
void sqr_it(int num);
main()
{
sqr_it(10.0);
return 0;
}

void sqr_it(int num)
{
printf("%d", num*num);
}



494 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:09
5行目
sqr_it(10.0); → sqr_it(10);



495 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:10
main()

void main()


496 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:11
コレはコレである意味間違いでもなんでもないんだがよ。
出題者、DQNか?


497 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:14
>494
ありがとうございます。

その解答に「sqr_it()関数には整数の引数が必要だが、
呼び出す時には浮動小数点値を必要とします。」
とかいてあるのですが、どういう意味ですか?


498 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:15
誰がどう考えても、
>void main()
ここだろ。


499 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:16
>497
整数の引数を要求する関数に実数を渡した場合、
自動的に実数->整数変換されるのはまったく正しい動作です。
よって実は誤りがないという誤り。


500 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:18
とんでもない無能が講師やってるという誤り。


501 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:19
関数内の static 変数のアドレスを返すコーディングに違和感を
覚えるのは俺だけ?(確かに間違ってはいないけど。。。)


502 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:21
>501
安易に
static char buf[256];
...
return buf;
とかやると破綻するよね。


503 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:22
>501
マルチスレッド時代に生きていると
違和感を覚えるのが正常です。


504 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:31
スレッドローカルにすれば違和感が消えるかといえばそうでもなかろう。


505 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:35
>501
おれも違和感ある。
その関数を複数回呼び出すとき混乱しそうで。



506 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:37
>501
でも、関数の中でmallocしてそのアドレスを返すと
誰がfreeするのか気になって仕方がないんですが。


507 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:39
>506
そういう場合呼び出し側がmallocしてそのバッファのアドレス渡して
使い終わったら呼び出し側でfreeするのが良い。


508 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:40
>>506
呼び出し元が free() すれば良いじゃない。もしくは文字列長が呼び出し側で
予測つくなら、snprintf() のように

 char *buf, size_t n

を渡すのも手だ。これなら呼び出し側でメモリ領域を確保できるから、自動
変数だろうが malloc した領域だろうが global 変数だろうが OK だし。


509 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:41
501はmallocについて何も語っていませんが?


510 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:47
>>509
「static 変数を返す」で、即座に対案として malloc の単語が思い浮かばないよう
なら逝って良いぞ。


511 名前: デフォルトの名無しさん 投稿日: 02/02/26 00:49
ハァ?


512 名前: 509 投稿日: 02/02/26 00:55
失礼しました、文をよく読んでませんでした。
勘違いは逝ってきます;- -)


513 名前: デフォルトの名無しさん 投稿日: 02/02/26 01:19
>>512
逝って良し!


514 名前: デフォルトの名無しさん 投稿日: 02/02/26 01:21
つまり、
教訓としては

Staticは内部で消えない変数としては使って良いが、
外部に渡せることを期待してはいけません。

ですか。


515 名前: 501 投稿日: 02/02/26 01:42
いい例が思い付かないが、
シングルスレッドでも割り込みルーチンで static 変数のアドレスを返す関数を呼んで、
その関数内で static 変数の操作+呼出元のルーチンで変数の参照をしてたら目も当てられない
というのを今思い付いたが、どうだろう?(かなり強引な例だが、やはり static 変数の
アドレスを返す関数は良くないと思う)



516 名前: 501 投稿日: 02/02/26 01:49
再帰ルーチンだと簡単に破綻しそうだな。
どうも寝ぼけてるようなので逝って来ます。


517 名前: デフォルトの名無しさん 投稿日: 02/02/26 05:28
Cで内部音源のMIDIを鳴らしたいんですけれども
どの様にすれば良いですか?


518 名前: デフォルトの名無しさん 投稿日: 02/02/26 06:30
>>517
OSはなにをご所望?


519 名前: デフォルトの名無しさん 投稿日: 02/02/26 06:32
>>501
printf("%s,%s",itotxt(3),itotxt(4));
でアウトってことだよね。はげどー。


520 名前: デフォルトの名無しさん 投稿日: 02/02/26 07:20
みんなそんなに安易にmallocを使うの?


521 名前: デフォルトの名無しさん 投稿日: 02/02/26 08:02
>>520
おれはmalloc()に特に抵抗ないよ。
必要ない時は使わないけど。
不安ならleakチェッカーみたいなのがお薦め。


522 名前: デフォルトの名無しさん 投稿日: 02/02/26 08:09
inet_ntoa()は思いっきり内部バッファから文字列返しとるが...


523 名前: デフォルトの名無しさん 投稿日: 02/02/26 08:29
>>486
>>492
どうもありがとうございますです。
変数のスコープが問題だったのですねん。

確かに複数回呼ぶのでmainの方に作ろうと思ってますです。


524 名前: デフォルトの名無しさん 投稿日: 02/02/26 08:41
>>522
ほんとだ。
struct in_addr in1,in2;
in1.s_addr = inet_addr("1.1.1.1");
in2.s_addr = inet_addr("2.2.2.2");
printf("%s\n%s\n",inet_ntoa(in1),inet_ntoa(in2));

1.1.1.1
1.1.1.1
自前でコピーしとけってことか。


525 名前: デフォルトの名無しさん 投稿日: 02/02/26 09:17
そんなの山ほどあるよ
gmtime,localtime,asctimeなんかみんなそうだし、
strtokもstatic変数使ってる
たとえマルチスレッドライブラリを使用していても
関数引数に2つ渡せない、+-等の演算で2つ使えない、再帰処理中に使えない、は皆同じ


526 名前: デフォルトの名無しさん 投稿日: 02/02/26 09:34
>>525
で、結論的には、
1.static変数を戻り値で返すな。gmtimeなんかうんこ。もう使ってやらん。
2.なんか山ほど例があるので、いいんじゃないの。あんま気にすることないだろう。
の2ってことでよろしいか?


527 名前: デフォルトの名無しさん 投稿日: 02/02/26 10:05
結論は、
一長一短あるからmallocしようがstatic返そうが好きにしろ。


528 名前: デフォルトの名無しさん 投稿日: 02/02/26 11:20
STATICで戻り値の関数は、知らないで使うとバグの元になりそうだね。

gmtimeなどは一般的な注意知識として、喚起されているので
しょうか。
知らなかったので、自分が今までに書いたソースが大丈夫か
と一瞬焦ったのですが。


529 名前: デフォルトの名無しさん 投稿日: 02/02/26 12:40
>>528
> gmtimeなどは一般的な注意知識として、喚起されているので
> しょうか。

UNIX系だと man gmtime すれば書いてあるし、
WindowsだとMSDNにはあるし…。知らないのは不注意という気がする。


530 名前: デフォルトの名無しさん 投稿日: 02/02/26 13:23
> WindowsだとMSDNにはあるし…。知らないのは不注意という気がする。
OSだけに依存するの?


531 名前: デフォルトの名無しさん 投稿日: 02/02/26 13:28
argumentとparameterは意味的にどうちがうのでしょうか?


532 名前: デフォルトの名無しさん 投稿日: 02/02/26 13:50
数学用語ではargumentは「独立変数」parameterは「媒介変数」だろ?

C的に言うとargumentは関数の引数、parameterは関数の引数とは
限らずグローバル変数かもしれない。


533 名前: デフォルトの名無しさん 投稿日: 02/02/26 13:56
>>532
プログラミングでは訳語が決まってて、それぞれ実引数と仮引数となってる。
意味は次のとおりね。

実引数 (argument)
 関数呼び出し時に、関数に渡す値

仮引数 (parameter)
 呼ばれた関数で、渡された値を参照する引数


 int foo(int n);  // n は仮引数
 foo(3);      // 3 は実引数


534 名前: デフォルトの名無しさん 投稿日: 02/02/26 13:58
>>532
そうすると、占めるメモリ領域の違いに応じて本来ならば
厳密に使い分けないといけないということですか?

今FAQを読んでました。そこにはこう書いてあります。
argument:
関数呼出し式において、括弧で囲みコンマで区切った並びの中の式
関数形式マクロの呼出しにおいて、括弧で囲みコンマで区切った並びの中の前処理字句の列
parameter:
関数宣言あるいは関数定義の一部として宣言され、関数に入る時点で値を得るオブジェクト
関数形式マクロ定義におけるマクロ名の直後の括弧で囲まれコンマで区切られた並びに現れる識別子

これだけじゃなんのことかよく分からなかったので。
解釈の細部に関する事柄になるのかな?


535 名前: デフォルトの名無しさん 投稿日: 02/02/26 14:03
>>532-533
どうもありがというございます。
言語的な詳細は分かりませんが、
お二方の説明を総合して、
引数を関数の内側と外側のどちら
見た違いという理解に留めておきます。

ありがとうございました。


536 名前: デフォルトの名無しさん 投稿日: 02/02/26 19:02
#include <stdio.h>
{
printf("ガンバッテルね\n");
}



537 名前: デフォルトの名無しさん 投稿日: 02/02/26 20:43
↑何言語だよ


538 名前: デフォルトの名無しさん 投稿日: 02/02/26 20:49
C♭


539 名前: デフォルトの名無しさん 投稿日: 02/02/27 06:51
>>537-538
>>536は perl でフツーに実行できますが何か。


540 名前: デフォルトの名無しさん 投稿日: 02/02/27 21:16
>>539
なるほどね。だが、残念ながらスレ違いだ。


541 名前: デフォルトの名無しさん 投稿日: 02/02/27 23:03
でかい配列使うのに、static宣言とmalloc()使うのどっちがいいの?


542 名前: デフォルトの名無しさん 投稿日: 02/02/27 23:09
時と場合によるが基本的にはmallocだな。



543 名前: デフォルトの名無しさん 投稿日: 02/02/27 23:10
配列の長さが不定ならmalloc


544 名前: デフォルトの名無しさん 投稿日: 02/02/27 23:14
>>541
使い捨ての数値計算プログラムなら前者。
というかグローバル変数を使う。


545 名前: デフォルトの名無しさん 投稿日: 02/02/27 23:23
>>543
malloc を使う理由
 - 必要なサイズが、実行してみるまで分からない
 - 再入可能にしたい
 - スレッドセーフにしたい

static を使う理由
 - ヒープの断片化を防ぎたい
 - コンパイル時に決まった値で初期化したい


546 名前: デフォルトの名無しさん 投稿日: 02/02/27 23:25
>>544
そりゃなぜに??
簡単だから?



547 名前: デフォルトの名無しさん 投稿日: 02/02/28 00:49
\#include <stdio.h>

int main ( void )
{
int a;
unsigned int b;

a = -1;
b = 0;

if ( a < b )
{
printf ( "b is bigger then a.\n" );
}
else
{
printf ( "a is bigger then b.\n" );
}

return 0;
}
この結果に驚くのは私だけ?


548 名前: デフォルトの名無しさん 投稿日: 02/02/28 00:50
警告出るだろ


549 名前: デフォルトの名無しさん 投稿日: 02/02/28 00:52
>>547
thenはthanの間違い?どうでもいいけど。


550 名前: デフォルトの名無しさん 投稿日: 02/02/28 00:52
gcc-2.95.3-8(linux)では警告がでなかったが?


551 名前: デフォルトの名無しさん 投稿日: 02/02/28 00:53
then の間違い。


552 名前: デフォルトの名無しさん 投稿日: 02/02/28 00:55
bは大なり 是a。
aは大なり 是b。



553 名前: デフォルトの名無しさん 投稿日: 02/02/28 00:55
if(a<b)
こうした時はaの型で見るんだっけ?bの型でみるんだっけ?
unsignedで比べたらfalseになるけど。


554 名前: デフォルトの名無しさん 投稿日: 02/02/28 01:00
同じサイズの符号付き正数と符号無し正数を比較もしくはその他の二項演算を行う場合
符号付きの項は符号無しのほうに符号拡張される。

-1を符号無しに符号拡張したときの動作は未定義。
だが普通は0xffffffffのような大きな符号無し正数に変換される。

コンパイル時に警告がでる場合がほとんどだろう。



555 名前: デフォルトの名無しさん 投稿日: 02/02/28 01:01
同じサイズの符号付き正数と符号無し正数を比較もしくはその他の二項演算を行う場合

同じサイズの符号付き整数と符号無し整数を比較もしくはその他の二項演算を行う場合



556 名前: デフォルトの名無しさん 投稿日: 02/02/28 01:03
>550
もちろん、-Wallはつけた上での話だろうな。


557 名前: デフォルトの名無しさん 投稿日: 02/02/28 01:05
げっ、gcc version 2.95.3-5 (cygwin special)だとでないぞ
腐っとる・・・


558 名前: デフォルトの名無しさん 投稿日: 02/02/28 01:10
>>554
符号無しとして見るんですね。ありがとうございました。
符号ありなら要キャストか。


559 名前: デフォルトの名無しさん 投稿日: 02/02/28 01:36
>>556
-Wallを付けたでも警告無し。


560 名前: 240 投稿日: 02/02/28 01:52
>>541
プラットフォームにもよるが一般的にはmalloc。
static配列デカイの作ると実行モジュールサイズでかくなるだろ。
かといってStack上に作ればstack overflow起こすし。


561 名前: デフォルトの名無しさん 投稿日: 02/02/28 04:00
>>560
初期化してない、もしくは0初期化なら実行モジュールサイズには
影響されないんちゃう?


562 名前: デフォルトの名無しさん 投稿日: 02/02/28 04:31
#define D(a) itte
として
D(a)yosi
が itteyosi ではなく itte yosi(スペースが入る)と展開されるのは
規格で決まってますか?決まってれば少しありがたいのですが。

vc6では cl /E の出力ではスペースがないが、実際のコンパイルではスペースが入ってるようです。
gccでは gcc -E も実際のコンパイルでもスペースありになってました。




563 名前: 投稿日: 02/02/28 08:19
>>559
gccで符合のありなし比較の警告を出すのは -W だよ。


564 名前: デフォルトの名無しさん 投稿日: 02/02/28 08:37
unsigned char から const char * に変換する方法在りますか?
len = (int)strlen(byte型);
としたいのですが・・・。



565 名前: デフォルトの名無しさん 投稿日: 02/02/28 08:39
お前向こう一年間キャスト禁止。

VCなら

len = _mbslen(bytes);

長さを取り扱う型はsize_tだぼけ。



566 名前: デフォルトの名無しさん 投稿日: 02/02/28 08:43
>>565
激サンクス!
い、逝って来ま〜す。


567 名前: デフォルトの名無しさん 投稿日: 02/02/28 08:56
もっか一回だけお願いします!
byte bitmaps[][12] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},



とあるのを
for (i=32; i<127; i++){
len = _mbslen(bitmaps[i-32]);
と出来ますか?





568 名前: デフォルトの名無しさん 投稿日: 02/02/28 09:12
>>567
なんだ そりゃ?
何がやりたいんだ?
つーか、出来るか出来ないか自分でやってみりゃイイだに。


569 名前: デフォルトの名無しさん 投稿日: 02/02/28 09:15
( ゚Д゚)ハア?
_mbslenで何を取得する気?
> unsigned char から const char * に変換する方法在りますか?
「unsigned char* から const char*」か?



570 名前: 567 投稿日: 02/02/28 09:21
>>568
glutで文字を出したいんですけど・・・。
glutBitmapCharacter(void *font, int len);
glの方で自分が間違ってるか、上で書いた部分が
間違ってるのか良くわからないので・・・。



571 名前: デフォルトの名無しさん 投稿日: 02/02/28 09:29
>>570
それぢゃあ_mbslen()ではムリだべ。

OpenGLスレ使え。
http://pc.2ch.net/test/read.cgi/tech/981044659/l50



572 名前: 570 投稿日: 02/02/28 09:30
glutBitmapCharacter は OpenGL を用いて,
ビットマップ・キャラクターを描画します.


void glutBitmapCharacter(void *font, int character);

font
使用するビットマップ.
character
描画しようとする文字(8ビットに制限されていません).

の様です・・・。


573 名前: 572 投稿日: 02/02/28 09:32
>>571
すいませんその様に致します。m(__)m m(__)m m(__)m


574 名前: デフォルトの名無しさん 投稿日: 02/02/28 14:38
お客さんに渡す資料のなかにフックという言葉があり
物議をかもしています。フックのうまい説明ないですかね?



575 名前: デフォルトの名無しさん 投稿日: 02/02/28 14:41
フックって何?


576 名前: デフォルトの名無しさん 投稿日: 02/02/28 14:44
自分はC組めないからよく説明できないんだけど、
仮にプログラムに3D描画機能があるとする。
でも外部からその3Dを呼び出すためのAPIがない。
そこでフックなるコードをプログラムに埋め込んで、
任意で呼び出せるようにする、みたいなもんだと思う。

ただし完全なAPIではないのでいろいろ制限がある。


577 名前: デフォルトの名無しさん 投稿日: 02/02/28 14:50
fuck?


578 名前: デフォルトの名無しさん 投稿日: 02/02/28 14:57
hookです


579 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:00
イベントのよこどり


580 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:10
"W" モードでfopenしたらファイルのオープン失敗した...
なぜ?


581 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:13
>>580
perror()してみろ


582 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:17
>>576
ハックじゃねぇの? それ。



583 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:18
横山フック


584 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:21
>>574
どういう文脈で使ってるんだ?


585 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:22
>>584
ボクシングゲームだったりして。


586 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:23
string操作関数(strcmpやらもろもろ)で
日本語テキスト(SJIS,JIS,EUC,UNICODE)での
動作は処理系によっては保証されてないと思って
コーディングすべきでしょうか。


587 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:23
フロントフックブラ


588 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:27
>>574
脇をしめ,内角に向かってえぐり込むように打つべし



589 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:28
>>586
べきだ


590 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:38
七フック神


591 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:39
フック山雅治


592 名前: デフォルトの名無しさん 投稿日: 02/02/28 15:51
モックン フックン


593 名前: デフォルトの名無しさん 投稿日: 02/02/28 16:27
FreeBSD な環境で、ログインする時のパスワード打ち込み時のように、
端末にエコーバックされないようにするためにはどうすればいいのでしょうか。
特別なファイルオープンだとかがあるのでしょうか。



594 名前: デフォルトの名無しさん 投稿日: 02/02/28 16:43
>>593
簡単に済ませるなら stty コマンドを使って stty -echo

マジメにやるなら ioctl システムコールを使って、端末の動作を設定


595 名前: デフォルトの名無しさん 投稿日: 02/02/28 16:45
>>593
パスワード入力目的なら、getpass()にしよう。
自力でやろうとすると、>>594のいうように、結構大変だよ。
man termios とか調べないとだめかも。


596 名前: 593 投稿日: 02/02/28 17:30
>>594, 595
man termios,ioctl しましたけど私の実力だとかなり厳しそうなので
取敢えずの所、getpass() でやってみようと思います。
どうもありがとうございます。


597 名前: デフォルトの名無しさん 投稿日: 02/02/28 18:25
横取りとかそういういみじゃないの? < hook
たとえば、割り込みルーチンをCでかくときに、
hook するよね。
曖昧なしったか君なんで、偉い人のマジレスきぼんぬ。


598 名前: デフォルトの名無しさん 投稿日: 02/02/28 18:47
>>580
ファイルがないとか?
W+ でopen したら?


599 名前: 名無しさん 投稿日: 02/02/28 19:43
移植コーディング中に問題発生。
旧いコンパイラでは、0/2 のように 0の除算をすると0を返していた(信じられん)
が新しいコンパイラでは不定値 が返る。
そのため、除算専用の共通関数を作って該当箇所を全て置き換えるか、
マクロを定義して置き換えるか迷っている。
俺的にはマクロだと思うが、おまえらどう思いますか?
また、ほかにもっといい方法はありませんか?
よろしくおながいします。


600 名前: デフォルトの名無しさん 投稿日: 02/02/28 19:50
>>599
>旧いコンパイラでは、0/2 のように 0の除算をすると0を返していた(信じられん)
おまえの頭が信じられん


601 名前: 599 投稿日: 02/02/28 19:58
>>600
>>旧いコンパイラでは、0/2 のように 0の除算をすると0を返していた(信じられん)
>おまえの頭が信じられん

すまそ。
2/0のように0で除算をすると
の間違いでした。(鬱


602 名前: デフォルトの名無しさん 投稿日: 02/02/28 20:38
>>599
なんとなくマクロで。
ちなみに、0除算(あ、これじょざんて言うのか・・・じょさんかと思ってた)
でトラップだか例外だかが発生しない環境なのー?


603 名前: デフォルトの名無しさん 投稿日: 02/02/28 23:39
初心者です。
if文でCの式はその結果が0以外の値なら真、0ならば偽と評価される
というのはどういうことですか。

また、「次の式のうち真なのはどれか答えなさい」という問題で
a. 0
b. 1
c. 10*9<90
d. 1==1
e. -1
で答えはb,d,eなのですが、bとdがどうして答えなのかわかりません。


604 名前: デフォルトの名無しさん 投稿日: 02/02/28 23:51
>>603
そのままの意味です。0以外=真、0=偽。日本語読めませんか?

そーすると b と e が真なのは、定義そのままで、疑問の余地なし。
d は、1==1 は真なので、真です。


605 名前: 562 投稿日: 02/03/01 00:01
反応きぼんぬ
>>562


606 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:02
>>604
0というのはどういうことですか?


607 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:02
>>605
ごめん。オレ知らない>#define展開時の詳細規則


608 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:07
>>606
どういうことって、数字の 0 だ。 1 より 1 小さい奴。 -1 より 1 大きいの。


609 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:08
>>606

0だよ0。全てのビットが0。


610 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:08
>>606
整数のゼロです。

>>605
スペースが入るというか、そこにホワイトスペースがあるのと同じ扱いのはず。そういう妙な識別子の連結は ## を使わない限り行われないはず。


611 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:11
>>606
0はゼロだよ。で例えば、Cで何かを比較した場合、
a<b
a==b
a!=b
とかね。これらの関係が成り立っていれば、1を返すことに決まってるのよ。
ちゅまり、
printf("%d\n",1>0);
printf("%d\n",0>1);
ってやると、
1
0
って表示されるわけ。なので、
if (11<10) とか
if (0)
は、どちらもelse以降が実行される。
if (10<11) とか
if (1) とか
if (30)
は、どれも直後の文が実行される。実際やってみれば判るはず。


612 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:13
1というか、非0


613 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:13
if文が判断できるのはゼロか非ゼロだけ。


614 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:15
>0というのはどういうことですか?
見れば見るほどすごい質問だな…


615 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:17
くだらない質問ですみません。

printf("2数を入力せよ");
scanf("%d%d", &i, &j);

printf("整数を入力せよ");
scanf("%d", &i);
printf("整数を入力せよ");
scanf("%d", &j);

上の2つは同じことですよね。どちらを使いますか?
一番上のは、一つめの数を入力してからエンターキーを
押してから2つ目の数を入力しますが、なぜエンターキー
なのですか?


616 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:19
>>615
別にエンターでなくても、スペースで区切って2つの数を入力してもおっけー。


617 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:19
scanfは改行飛ばしがなんたらじゃなかったけ(´-`)?


618 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:20
あれほどscanfは使っち(略


619 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:21
>>615
まずscanfを使わない。
エンターキーなのは、標準入力が行単位でフラッシュされるバッファを
経由しているから。


620 名前: 611 投稿日: 02/03/01 00:32
>>612
組み込みの演算子は1か0しか返さないことが保証されてると思うんだけど。
http://www.bpel.tutics.tut.ac.jp/~take/basement/faq-c/faq-c8.html
のA8.2に書いてあった。

真意のほどフォローキボンヌ



621 名前:   投稿日: 02/03/01 00:35
これからwindows上でC言語の勉強を始めようと思っています。
そこでフリーソフト等のソースファイルを参考書代わりに
勉強しようと考えているですが、
お勧めのものはありませんでしょうか??


622 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:36
615です。
scanfを使わないってどういうことですか?

>>619
初心者なので言葉の意味が分からないです、すみません。
標準入力、フラッシュ、バッファを経由する、の意味を教えてほしいです。


623 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:36
>>620
そゆことじゃなくて、真=1、偽=0って思わせるような書き方がマズいんだと思われ。


624 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:36
>>621
標準関数のソース


625 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:37
>>622
俺はよく知らないけど、scanfは使わない方がいいらしい。
でも、scanfって必要になることある?


626 名前: 611 投稿日: 02/03/01 00:39
>>623
なる。
if(1)外して、if(30)だけにしとけばよかったかな。


627 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:39
フラッシュ → fflush(stdout);



628 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:40
厨房:gets
初級:fgets
中級以上:scanf


629 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:42
>>622
例えば、

 char c[10];
 scanf("%s", c);

で、画面から20文字入力しちゃったりすると…


630 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:44
#include <stdio.h>
int main (void)
{
char arry[2][5] = {'o','r','e','a','h','o','\0'};

for (int i = 0 ; i < 2 ; i++ ){
printf ("%s\n",arry[i]);
}

return 0;
}

を実行すると

oreaho
o

って表示されます。

自分的には

oreah

(↑2行目は何も表示されない)

という結果になるのかと思ってたんだけど・・・・・
arry[2][5]が大きさ5の物を2つ宣言しているのはわかってます。
printfで%sが文字列(最初の\0まで)を表示することもわかってます。
でも、%sにchar[5]の物を与えているんだからoreahまでしか
出力されないもんだと思ってました。
charの配列に\0を入れないのが悪いというのはわかってるんですが
なんかしっくり来ません。

こんなお猿さんに愛の手をっ!!




631 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:48
>>630
残念ながら、多次元配列はふつーめもり上に一直線に確保されます。
なので、切れ目っていうのはありません。そこはプログラマの責任で
がんばらないといけません。


632 名前: catch! 投稿日: 02/03/01 00:48
unknown software exception が0x00000027で発生しました


633 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:49
>>632
きゃー恐い。


634 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:54
2/8
はなぜ0になるのですか?


635 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:55
>>634
整数型で計算すると余りが破棄されるから。


636 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:55
これはさすがにネタぽ


637 名前: 635 投稿日: 02/03/01 00:55
2/8 = 0.25
小数部を破棄して0


638 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:57
じゃあ、2/14はなぜ0になるのですか?


639 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:57
>>638
リッチータンに聞いて。


640 名前: デフォルトの名無しさん 投稿日: 02/03/01 00:58
2/14に貰ったチョコが0個だったからさ・・・


641 名前: デフォルトの名無しさん 投稿日: 02/03/01 01:01
>>640
流石!!!


642 名前: デフォルトの名無しさん 投稿日: 02/03/01 01:05
(´-`).。oO(自演だね)


643 名前: デフォルトの名無しさん 投稿日: 02/03/01 01:06
じさくじえんだろう


644 名前: デフォルトの名無しさん 投稿日: 02/03/01 01:07
640=641=642=643


645 名前: デフォルトの名無しさん 投稿日: 02/03/01 01:08
なるほど。だからオレの環境では
printf("%d\n",2/14);

Inf
ってなるのか・・・


646 名前: 630 投稿日: 02/03/01 01:25
>>631

ヨーク考えてみたらわかった。

%sに与えているのはchar[5]の配列ではなくて
特定のchar(あえて書くならchar[1])のアドレスなのね。
そこのアドレス以降ではじめて\0が出てくるところまで
出力すると・・・・・




647 名前: デフォルトの名無しさん 投稿日: 02/03/01 01:52
>>645の環境は%dでInf出るのかYO!
ネタ結構だけどせめて%fでやってホスィ


648 名前: 645 投稿日: 02/03/01 03:03
>>647
ツッコミさんきゅーーー!!!
だれもネタにつっこんでくれなかったらどうしようと心配だった・・・

あぁそうさ。オレの環境でも0って出るのさ。ちょっと見栄はってみたかったんだよーーーん。


649 名前: 名無しさん@Meadow 投稿日: 02/03/01 10:11
正直氏んでホスィ


650 名前: デフォルトの名無しさん 投稿日: 02/03/01 14:01
>>624
標準関数のソースってどこにあるんですか?



651 名前: デフォルトの名無しさん 投稿日: 02/03/01 15:06
>>650
環境は? *BSD とか使ってるなら /usr/src/lib/libc 以下にあるし、VC6 なら
C:\Program Files\Microsoft Visual Studio\VC6\CRT\SRC (インストール先
を変えてなければ) あたり。


652 名前: 650 投稿日: 02/03/01 15:31
>>651
cygwin の gcc です。*.c で検索してみたけど出てきたのは違う気が...
glibcか何かのソースに入ってるのかな?ちょっと探してきます。


653 名前: 650 投稿日: 02/03/01 15:40
ちなみに今 GNU の fileutils-4.1 を拾ってきて ls のソースを読んでみてい
るんですが...難しい。


654 名前: デフォルトの名無しさん 投稿日: 02/03/01 18:08
GNU のソースはどれも汚いよ。職人芸の極みだ。


655 名前: デフォルトの名無しさん 投稿日: 02/03/01 19:25
>>653
GNU のソースはポータビリティの優先度が高いので、はっきりいって汚いコード
が多い。勉強のために読むなら *BSD の方が良いと思うぞ。


656 名前: デフォルトの名無しさん 投稿日: 02/03/01 19:33
>>653
ついでに、読んでるだけだと、どこが良くてどこが悪いのかわからないっていう
場合のために、ひとつおすすめ。

Cプログラミング診断室のオンライン公開版
http://www.pro.or.jp/~fuji/mybooks/cdiag/


657 名前: デフォルトの名無しさん 投稿日: 02/03/01 22:20
is_prime =1;
for(i=2;i<num/2;i++)
if((num%i)==0) is_prime =0;
if(is_prime==1)printf("素数です");
else printf("素数ではありません");

こう書いてある本があるんですけど、おかしくないですか。
for文に{ }ってつけますよね。




658 名前: デフォルトの名無しさん 投稿日: 02/03/01 22:21
おかしいのは>>657の頭、に256.NET


659 名前: デフォルトの名無しさん 投稿日: 02/03/01 22:30
>>657
> for文に{ }ってつけますよね。

ループ内で実行する文が複数あればな。


660 名前: デフォルトの名無しさん 投稿日: 02/03/01 22:31
>>657
ifやelseならおかしくないの?


661 名前: デフォルトの名無しさん 投稿日: 02/03/01 22:58
 char *Generate(void)
 {
   char c[12];
   ……(文字列を生成してcに代入する処理)
   return c;
 }

上記のような、文字列のポインタを返す関数を書いて、
ダイアログプロシージャで以下のように書きました。

 SetWindowText(GetDlgItem(hDlgWnd, IDC_EDIT), (LPCTSTR)Generate());

Generate()で生成した文字列がエディットボックスに
表示されるはずなんですけど、どうも期待した動作になりません。
どうやったら文字列のポインタを渡してそれを表示できますか。
仕方ないので今は c をグローバル変数に変えて

 Generate();
 SetWindowText(GetDlgItem(hDlgWnd, IDC_EDIT), (LPCTSTR)c);

としています。でも何か格好悪いです。


662 名前: デフォルトの名無しさん 投稿日: 02/03/01 23:00
>>661
自動変数のアドレスを返してどうする。
静的変数にしろ。



663 名前: デフォルトの名無しさん 投稿日: 02/03/01 23:01
Generateの戻り型をCStringにしる!


664 名前: tsukkomikun 投稿日: 02/03/01 23:18
>>663
ここC言語スレ。


665 名前: デフォルトの名無しさん 投稿日: 02/03/01 23:19
#define CString static char


666 名前: 666! 投稿日: 02/03/01 23:25
今だ!666ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧,,∧,,,,,, )      (´⌒(´
  ⊂ミ゚Д゚⊂ `つ≡≡≡(´⌒;;;≡≡≡
       """""  (´⌒(´⌒;;
      ズザーーーーーッ


667 名前: デフォルトの名無しさん 投稿日: 02/03/01 23:27
>>660
まったくもっておかしくないよ。
試しにコンパイルしてみればいいじゃん。


668 名前: 661 投稿日: 02/03/01 23:28
>>662
 static char c[12];
と宣言したら期待していた動作になりました!
>>663
CStringなる型を使ってみましたが、
未定義のシンボルだと叱られてしまいました。

では、どうもありがとうございました。


669 名前: デフォルトの名無しさん 投稿日: 02/03/01 23:31
>>667
そういう意味じゃなくて、forには疑問を抱いているのに、ifやelseには疑問を抱いていないということがおかしいと思ったから聞いたの。


670 名前: デフォルトの名無しさん 投稿日: 02/03/01 23:35
関数も一文だけならできるかと思ったけど
当然できない(;_;)


671 名前: デフォルトの名無しさん 投稿日: 02/03/01 23:36
>>670
今、俺もそう思って試しやってみたところ(笑)



672 名前: 671 投稿日: 02/03/01 23:36
×試し
○試しに


673 名前: 670 投稿日: 02/03/01 23:41
一文なら関数にするまでも無いからかな。
さすがリッチィ様(愛)


674 名前: 653 投稿日: 02/03/02 00:22
>>654-656さんありがとうございます。
アドバイスいただいた通り、http://www.jp.freebsd.org/mirror.html にある
FreeBSD の ftp サイトをうろついてみたのですがソースのありかが分かりま
せんでした(鬱 src ディレクトリとかはあったんですがその下にもそれらし
いのはないし。それらしいの落としてみたら binary のようだったし。
どこにあるんでしょ?もしかして探し方が間違ってる?


675 名前: 667 投稿日: 02/03/02 00:41
>>669
あ、諒解。勘違いすまんです。


676 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:00
動的にfor文の最大値を動かすのはどうなのでょうか?



677 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:01
>>676
え?for文の最大値って何?


678 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:02
forの判定式の部分に変数を使えばいいんでないの?


679 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:03
for(i=0; i<max_count; i++)
 if(finish) max_count = i;


680 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:07
>>676
こう?
for(i=0; i < i+1; i++);



681 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:08
それ実行しないよw


682 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:09
>>670
>>671

unsigned char main = 0xc9; /* Z80 */




683 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:09
違う。止まらないよだ。


684 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:09
とまるよ


685 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:09
>>680
Ctrl+C必須ですか?


686 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:10
とまるってばよ


687 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:10
>>684
オーバーフロウ時?


688 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:10
ハァ?どやって止めんのよ?


689 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:11
やってみなよ


690 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:13
>>689
>>687であっている?

char型でやってみよ。


691 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:13
intだからってオチはないよな?藁
そもそもiの宣言書いてないんだし。


692 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:14
>>691
unsignedでも止まることは止まる・・・けどね・・・


693 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:15
bignumという罠


694 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:16
ここはCスレ


695 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:19
longlongという罠。


696 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:22
char*という罠


697 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:23
名スレの予感・・・


698 名前: デフォルトの名無しさん 投稿日: 02/03/02 02:26
#define for(exp) do{}while(0)


699 名前: 676 投稿日: 02/03/02 02:43
すいません書き方が悪かったです・・・。
プログラム的には良く使われるかどうか聞きたかったでが・・。


700 名前: 680 投稿日: 02/03/02 02:47
>>699
問題なっすいんぐ。


701 名前: 699 投稿日: 02/03/02 02:48
>>700
差し支えなければ、たとえばどのような時に
多く使用されるのでしょうか?


702 名前: 680 投稿日: 02/03/02 03:04
>>701
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/q/quickSort.html
ここにクイックソートがあるけど、whlie(i<j)ってあるよね。
これ、for(i=first; i<j ; ) {} とも書けるんだけど、このループ中って、
iもjも変化してるよね。あんま良い例じゃなくてごめん。


703 名前: 701 投稿日: 02/03/02 03:25
>>702
遅くまですいません・・。
紙にカキコして流れを追ってみます。φ(`∇´)φ
ではオレンジジュースに行ってから寝ます。
後、SONYのVAIOに詳しい人居ませんか〜?( ゚Д゚)ホスィ 
ではでは。m(__)m




704 名前: デフォルトの名無しさん 投稿日: 02/03/02 03:39
>>703
この問いには正解ってもんは無いと思うが・・・
forの継続条件が動的に可変なのは、正直お薦めしない。
forはwhileで置き換え可能なんだから、こちらの使用をお薦めする。
こちらの方が可読性が上がると思われ。

で、VAIOは板違いだ!( ゚Д゚)ゴルァ!


705 名前: デフォルトの名無しさん 投稿日: 02/03/02 04:19
caseが一つしかないなにswitchを使う理由はなんなんでしょう?
ifを使わない理由が知りたいです。


706 名前: デフォルトの名無しさん 投稿日: 02/03/02 04:34
>>705
世の中にはif文を嫌うキティちゃんがいます。


707 名前: デフォルトの名無しさん 投稿日: 02/03/02 04:42
>>706
その理由が知りたいです。簡単でいいので
彼らがifを嫌う理由、教えていただけませんか?


708 名前: デフォルトの名無しさん 投稿日: 02/03/02 04:47
単純な比較ならswitchの方が最適化されるということですね。
こんどからそう理解しておこうと思います。


709 名前: デフォルトの名無しさん 投稿日: 02/03/02 04:48
>>707
さあ?俺には理解できないので。
嫌う人がいるのは知っているけど、その理由まではわからない。
自己満足とか?


710 名前: デフォルトの名無しさん 投稿日: 02/03/02 04:50
>>708
単純な比較の最適化なら大して変わらないと思うが。


711 名前: デフォルトの名無しさん 投稿日: 02/03/02 05:10
今は一つでも、後から付け足して
結局 case を使うかもしれないような場所では
そういうふうに書くかも。
コマンドラインのオプションのような
後から増えることがありそうなものとか。
そういうものでは if 使うより意味的にも合ってる感じもするし。


712 名前: デフォルトの名無しさん 投稿日: 02/03/02 05:10
>>705
その条件が仕様変更とかで、将来増える可能性が有るからかと。
1つの条件が2つ3つと増えるかもしれないって考えるなら、
最初からswitchで書くのもアリかと。

単純にtrue,falseだけの条件ならif使うけど。


713 名前: 712 投稿日: 02/03/02 05:12
>>711
ケコーン?


714 名前: 711 投稿日: 02/03/02 05:13
> 結局 case 使う
でなく
> 結局 switch 使う
です。

普段 switch がなくて case はある言語を使ってるもので…。


715 名前: 711 投稿日: 02/03/02 05:16
>>713
ケコーン ですな…。よろしく♥


716 名前: 712 投稿日: 02/03/02 05:23
こんな時間にケコーンしてしまうとは・・・
会社に泊まって仕事してたばっかりに(w


717 名前: デフォルトの名無しさん 投稿日: 02/03/02 05:26
>>714
ヴィビ?


718 名前: 711(真性ひきこもり) 投稿日: 02/03/02 05:29
>>716
こんな時間に仕事っすか…。ご苦労様です。
ガムバッテください。


719 名前: デフォルトの名無しさん 投稿日: 02/03/02 05:31
ちっ・・・無視された・・・・
VBか?って聞いただけなのに。


720 名前: 712(DSPぷろぐらま) 投稿日: 02/03/02 05:32
>>718
4時位で仕事切り上げて、ここで遊んでた(w
でももう寝る。おやすみー


721 名前: デフォルトの名無しさん 投稿日: 02/03/02 06:43
むしろ条件が増える可能性があるところでは
可能な限りswitchを使えということかな?
そうすれば後から見たときに、ああ条件が増える
こともあるんだな、って分かるというか。。

こういうコーディング規約なんて見たことありますか?


722 名前: デフォルトの名無しさん 投稿日: 02/03/02 10:43
>>707
まっとうな理由なら、今朝ご結婚なされた>>711>>712夫夫(ふうふ)の
おっしゃることが理由かも。

ただ、if のかわりに switch case と聞くと、どうも昔のBASICのなごりで、
「ifは遅いからON GOTOを使え!(by Dr.D)」ってのがいまだにひっかかってて、
コンパイラ時代に取り残されてしまった可哀想な方々を想像して
しまうんだけど、想像力逞しすぎですか?



723 名前: デフォルトの名無しさん 投稿日: 02/03/02 11:28
>>721
ない。

というか、後から条件が増えそうな場合には、条件をデータファイルに切り出して
switch - case や if else のロジックでプログラムに埋め込まないようにする。


724 名前: デフォルトの名無しさん 投稿日: 02/03/02 11:30
普通、Cもコンパイラなんだけど・・・


725 名前: 仕様書無しさん 投稿日: 02/03/02 11:35
コンパイラ時代に乗り遅れた、これなら意味とおる?>>724


726 名前: デフォルトの名無しさん 投稿日: 02/03/02 11:38
>>722
switchはジャンプテーブルに変換されるんでifより速いよ。
全てがではないけどね。


727 名前: 724 投稿日: 02/03/02 11:41
>725
なるほど。逆の意味にとってたよ〜(;´Д`)。
スマソ。


728 名前: デフォルトの名無しさん 投稿日: 02/03/02 13:45
strlen("abc");
sizeof "abc" - 1;

どっちが早いですか?


729 名前: デフォルトの名無しさん 投稿日: 02/03/02 13:48
0.5秒くらい考えればわかるはずだが?


730 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:03
>>729
初心者いじめるなよ・・・ 禿同だけど。

>>728
strlenは、文字列を1文字づつ確認して長さを求める。
sizeofは、コンパイルする時に値が確定する。

あと5秒考えれば解るぞ(w


731 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:15
>>730
> strlenは、文字列を1文字づつ確認して長さを求める。
とは限らない。C 標準関数呼び出しは、コンパイラの判断でインライン展開する
ことも許されてる。結果的に strlen("abc"); がオブジェクトコードでは定数になっ
てるかもしれんぞ。(まぁ重箱の隅だけど)


732 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:21
>>731
>C 標準関数呼び出しは、コンパイラの判断でインライン展開する
>ことも許されてる
へ、そうなの?初めて知ったよ、そんなの。


733 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:24
たとえインライン展開してもstrlen("abc")が定数になるのは難しくないか?
各標準関数毎のインライン展開時の最適化が仕組まれていないと。
不可能ではないだろうけどさ…


734 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:33
>>732
あまり知らなくても困らんしね。gcc なら -mmemcpy とか VC6 なら pragma の
intrinsic とか調べると書いてあるよ。

>>733
> 各標準関数毎のインライン展開時の最適化が仕組まれていないと。
C 標準関数のインライン展開は C++ の inline 関数と違って、たいていはコンパイラ
が直にアセンブルコードを出力するようになってるから、不可能ではないよ。ただ、
そこまでやってる処理系が存在するかどうかは知りません。


735 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:38
strlenの引数がポインタ変数か文字列リテラルかを判別した上でないと、
定数化はできないと思われ…


736 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:40
「sizeofはコンパイル時に定数として確定する」
だけで十分だろ。

コンパイラがリテラル定数を引数に取るstrlenをコンパイル時に解釈するかどうかは
環境依存な問題だ。



737 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:46
>>735
もちろんそうだが、インライン展開する場合にはコンパイラは必要な情報を
持ってる(構文解析した結果のツリー構造をメモリ中にもってる)から、定数
展開はできるよ。(っつか、俺が昔書いた処理系ではそうしてた)

ただ、それは重箱の隅だというのも最初から言ってる通り。

あと個人的にはワイド文字を使うときに死ぬ可能性が高いのと可読性が落
ちるから、文字列長を取得する目的で sizeof() を直にコードに埋め込むは
お勧めしないけど。LITERAL_LEN() みたいなマクロを一つ定義した方が良
い。



738 名前: デフォルトの名無しさん 投稿日: 02/03/02 14:58
fgetc(fp)って
ファイルfpからデータをどういう風に読み込むんでしょうか?
読み込んだら次はどこを読み込むんでしょう?


739 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:01
strlenがインライン展開された後まで、「文字列の長さ」っていう
意味を保持するのは、技術的に興味あるなぁ。

int i;
{char* ptr;for(i=0,ptr="abc";*ptr;++ptr,++i);}

i=3;
に最適化されるってのも、すごいけど。



740 名前: sage 投稿日: 02/03/02 15:05
fpはファイルではない。
ファイルを読み書きするための情報がつまった構造体へのポインタだ。

読み書きするための情報がつまった構造体の実体は標準ライブラリの中にある。

読み込んだら、「次」のデータを読み込む。
直前にungetcしてたら、ungetcしたデータを読み込む。




741 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:07
>>738
って言うか、どういう意図でそういう質問をしてるのかがわからん。


742 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:12
>>739
strlen をインライン展開する場合には

 strlen '(' expr exclude literal ')'
   OUTPUT "push addr_of(var)"
   OUTPUT "call strlen"

 strlen '(' literal ')'
   size_t n = strlen(value_of(literal))
   OUTPUT "mov reg <- %d", n

ってな感じで、コード生成ルーチンを分ければ簡単じゃないの? 引数が
文字列リテラルか変数かは構文解析の段階で分かってるわけで。


743 名前: 738 投稿日: 02/03/02 15:33
すみません。質問の意味がわかりにくかったみたいですね。
ファイル(0と1が並んだファイル)からデータを読み込んでbit処理する次のプログラムがあって、
どうなってるのかよく分からなかったので質問しました。

bit_index = 1;
do{
byte_data = (unsigned char)fgetc(fp);
work = (unsigned char)(byte_data << (bit_index-1));
work = (unsigned char)(work >> 7);
bit_index++;
}while(work = !0);

この場合最初読み込むデータが1のときは
work >> 7 で左に0が7入って00000001になるってことでいいんでしょうか?
後、次にfgetc(fp)でデータをお読み込んだとき
読み込んだ値は一番左の0に上書きされるんでしょうか?
それとも全体が一つ右にシフトしてデータが一番左に入るんでしょうか?


bit処理演算子を使ったことなくて本読んでもよく分かりません。
何でbit処理するのか



744 名前: 739 投稿日: 02/03/02 15:40
>>742
その、「リテラルだとコンパイル時に関数が返す値が決定できる」っていう
情報は、どーやって表現するのか、っていう問題だよ、興味があるのは。



745 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:45
>>728
って言うか、どういう意図でそういう質問をしてるのかがわからん。


746 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:45
>>739
「strlen は文字列の長さを返す関数だ」って情報をコンパイラが
持っておきゃいいだけでは? memcpy, memmove, strcpy, strlen 辺りを
組み込み関数として展開する場合だと、C++ の inline みたいに
関数のソースを呼び出し元にそのまま持ってくる…みたいな悠長な展開は
あまりやらない気がする。

VC++だとこんなん出た。
> xor eax, eax
> mov edi, 0040A250 ; "abc"
> or ecx, -01
> repne scasb
> not ecx


747 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:46
msnなどのブラウザチャットをmschat2.5 で繋げる方法はありますか?
そのたJAVAチャットをソフトで繋ぐ方法があれが教えて


748 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:47
>>747
WWWブラウザはソフトじゃないの?


749 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:49
>748
mschat2.5 などのチャットソフトのこと いってるんデス


750 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:49
>>728
って言うか、それはfgetcには関係無い質問だと思うが・・・


751 名前: デフォルトの名無しさん 投稿日: 02/03/02 15:50
>>749
板違い。


752 名前: 739==744 投稿日: 02/03/02 15:57
>>746
それは、コンパイラが情報を持ってるんじゃなくて、標準関数のインライン展開ルーチンを
関数ごとに持っているっていうだけで、「strlen は文字列の長さを返す関数だ」って情報を
コンパイラが持っているわけではないでしょ。

つか、激しくスレ違いなので、ええですよ、もう。
関数型言語によくある、パターンマッチングみたいな方へ話
がいっちゃうから。



753 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:01
>>752
> 標準関数のインライン展開ルーチン
> 「strlen は文字列の長さを返す関数だ」
どこが違うのか謎だが。


754 名前: 711 投稿日: 02/03/02 16:05
>>717 >>719
ああっ、すまん。
見えてなかったのだ…。
VB じゃなくって Haskell です。


755 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:05
strlenはsizeofで最適化するとして、
他の標準関数Aはそれ用の最適化パターン、
標準関数Bはまた別の最適化パターン…
といった、関数毎の情報をコンパイラが持つ必要がある、
って事でしょ。


756 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:09
>>753
752の言いたい事とは違うかもしれないけど。
strlenは標準ライブラリと言うだけで、C言語そのものの仕様には含まれない。
つまりコンパイラそのものは、strlenの存在は知らない。

故にstrlenを定数として返す事は無いんではなかろうか?
技術的に可能で有ったとしても。



757 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:15
>>756
> strlenは標準ライブラリと言うだけで、C言語そのものの仕様には含まれない。
ANSIでは含まれていなかったが、C89以降ではC言語そのものの仕様に含まれている



758 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:26
どーでもいい話なのが
ライブラリの提供者がインライン展開しやすいように
strlenをinline属性で提供していて、かつ、
コンパイラが、リテラルを走査する簡単なインライン関数を
コンパイル時に処理してくれる場合、返す可能性はあるな。

strlenが言語仕様として規格化されているかどうかは全く関係ない。
技術的には可能だ。

行きすぎた最適化のせいで意図しないコードが出されることよりは
ある程度、書き手の想像の範囲内でコードが出される方がヨイ場合も多い。

想像だけで考えてないで、コンパイラに関する理論をちょっとでいいから
かじっておきなさい。




759 名前: 752 投稿日: 02/03/02 16:30
たとえば、実装が
_strlen(char* ptr){
 int i;
 for(i=0;*ptr;++ptr,++i);
 return i;
}
のような場合、

strlen(char* ptr){
#if isLiteral(ptr)
 size_t n = _strlen(value_of(literal));//
 OUTPUT "mov reg <- %d", n
#else
 OUTPUT "push ptr"
 OUTPUT "call _strlen"
#endif
}
っていうのが、関数ごとにコード生成ルーチンを持っている例だとすると、

strlen(x[0]:x[1]: .. :x[n]){
 return n;
}
が、「コンパイラが文字列の長さをかえすことを知っている」ってところでしょか。
こんな感じのが、「実装ではなくて、宣言として」書ける(Cの構文でなくて、
コンパイラのコード生成情報として)っていうようなのを想像してます。

ほかにも、再帰を使って定義するとか・・・

(スレ違いのうえに、電波っぽくなってきたぞ…
 つか、電波だな、ゴメソ)


760 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:32
>>755
> 数毎の情報をコンパイラが持つ必要がある、
その通り。

逆に C++ の <algorithm> のように static inline 関数定義するのは、C 標準ライ
ブラリでは不可。

> 7. Library
> 7.1 Introduction
> 7.1.2 Standard headers
> 6 Any declaration of a library function shall have external linkage.

これに抵触してしまうから。


761 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:37
inline版とstatic版を両方提供してはいかんとは、書いてないな。



762 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:40
>>759
strlen("ABCD\0EFG")

を正しく展開できるのか?それで。



763 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:40
>>761
inline はそもそも static だと思うが。

あと、たしか同一の名前をもつ関数を external, static 両方で定義した場合の
動作にも規定があった気がするが、見つからんな。


764 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:42
>>762
後者
> strlen(x[0]:x[1]: .. :x[n]){
> return n;
>}
の方だと NG だな。>>742 のヤツなら大丈夫だけど。


765 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:44
やっぱここは男らしく
__builtin_strlen() の登場だろう。

はい、これで議論おわり。


766 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:49
随分盛り上がったな。

で、ここで回答してる人たちで、定数欲しいのにstrlen使う人居るの?


767 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:55
>>761
インライン版というと C++ のインライン関数展開を連想しそうなんで、組み込み版
とでも読んだほうが良いかも知れん。

インライン版
 ソースコードが、コンパイル対象のプログラムと同じ言語で書いてある。コンパ
 イル時にコンパイラがインライン展開し、後は普通にコンパイル。

組み込み版
 ソースコードはコンパイラ内部に(たいていはアセンブル直接埋め込みで)書い
 てある。コンパイル時にコンパイラの内部状態、とくにパーサーがもっている情
 報を使える。

まとめだが、
- C 標準ライブラリは「組み込み版」で提供することは認められている。ただし、
 同時に外部リンケージを持つライブラリ関数も提供することは必須。でないと
 size_t (*pf)(const char *) = &strlen; とかコンパイルできなくなってしまう。

- C 標準ライブラリを「インライン版」で提供するのは不可。C 言語の規格で、標
 準ライブラリ関数は外部リンケージを持つことが要請されているため。

でいいかな。


768 名前: デフォルトの名無しさん 投稿日: 02/03/02 16:55
リテラルに対してstrlenを多用してるどうしようもない糞コードを
手を入れずに高速化したいやつはいるだろうな。



769 名前: デフォルトの名無しさん 投稿日: 02/03/02 17:28
っていうかリテラルにstrlen()を使うような状況って珍しいだろ。


770 名前: デフォルトの名無しさん 投稿日: 02/03/02 17:30
個人的な意見としては、
strlen(リテラル)くらいコンパイラが最適化してしかるべきだと思う。
それくらいは。


771 名前: デフォルトの名無しさん 投稿日: 02/03/02 17:41
#define LITERAL "foo"

if (!strnmp(str, LITERAL, strlen(LITERAL))) {
}



772 名前: デフォルトの名無しさん 投稿日: 02/03/02 17:52
>>771
ああ、マクロなら文字列リテラルにstrlenをつかってもおかしくないか。。


773 名前: デフォルトの名無しさん 投稿日: 02/03/02 18:02
ところで、sizeof("ABC") って 3 なの?
sizeof(char[3]) と等価?
sizeof(char*) と思ってた。


774 名前: デフォルトの名無しさん 投稿日: 02/03/02 18:06
>>773
> ところで、sizeof("ABC") って 3 なの?
4だよ。


775 名前: 773 投稿日: 02/03/02 18:12
あぁ、3 じゃなくて 4 か。どうもです。


776 名前: デフォルトの名無しさん 投稿日: 02/03/02 18:36
#define LITERAL_LEN (sizeof(LITERAL)-1)



777 名前: デフォルトの名無しさん 投稿日: 02/03/02 18:49
>>773
http://www.catnet.ne.jp/kouno/c_faq/c1.html#32
>文字列リテラルには2種類の (略) その他の場所で使うときは、文字の名無し のstaticの配列となる。



778 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:06
void func( a)
unsigned char a[y][x];
{

とすると再定義されましたっていうエラーが出ます。
他の関数ではこのエラーが出ないのでなぜかと悩んでいます。
よろしくお願いします。



779 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:08
yとxはいったい何なんだ?


780 名前: 778 投稿日: 02/03/02 22:13
>>779

yとxはグローバル変数です。



781 名前: 778 投稿日: 02/03/02 22:14
変数というか定数です。すみません。


782 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:14
配列の宣言に、グローバル変数を添え字として使うことはできません。
配列の宣言に、グローバル変数を添え字として使うことはできません。
配列の宣言に、グローバル変数を添え字として使うことはできません。



783 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:14
>778
unsigned char a[y][x];
はコンパイル時にx,yが定まってないとコンパイル不可


784 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:16
funcを使用しているすべてのソースファイルの頭の方で

extern void func();

と書いたヘッダファイルをインクルートしる!



785 名前: 778 投稿日: 02/03/02 22:17
>>782,783
ちょっと行き違いがあったようですみません。
定数なら大丈夫なんですよね?


786 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:20
やってみな


787 名前: 778 投稿日: 02/03/02 22:20
>>784

extern宣言はしてるんですけど、ダメみたいです。
どうしてなんでしょう?



788 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:20
gccだと
int main(int argc, char** argv)
{
char a[argc];
}
こういうのありなんだけど・・・


789 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:21
784は嘘


790 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:22
>788
gccローカルな機能は使っちゃ駄目。
C99からは正式サポートだけど。


791 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:23
>>790
C99ってのがよく分からないんだけど、
いずれ89のやつに置き換わったりするのかな?


792 名前: 778 投稿日: 02/03/02 22:24
>>788
え〜っと、どういうことなんでしょう?理解不能です。



793 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:30
>>792
C90 だと配列の要素数は、コンパイル時に確定できる定数じゃないとダメなんだ
が、gcc だと拡張機能で変数のような「実行時に確定できる値」も OK になってる
という話。

C90 でこういう事をやりたい場合、ふつーは alloca() を使う。非標準の機能だが、
大抵の処理系でサポートされてる。


794 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:32
>>793
mallocと違うの?
関数を抜けるときに自動的にfreeされるとか?


795 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:33
引数の値は評価してスタックにpushするってだけじゃないの?>>794


796 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:35
>>795
なんだ・・・


797 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:49
そういえばApacheのソースにもalloca()があったな。


798 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:53
>>787
ヘッダと関数定義を両方とも↓の形式にしたらどうなる?

void func(unsigned char a[y][x])


これでもダメなら
へっだ
#ifdef __cplusplus
#extern "C" {
#endif
extern void func(unsigned char a[y][x]);
#ifdef __cplusplus
}
#endif

本体
#include "へっだ"

void func(unsigned char a[y][x])
{

でやってみれ!




799 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:55
gccジュニア


800 名前: デフォルトの名無しさん 投稿日: 02/03/02 22:58
はっぴゃくげとずざぁ


801 名前: ビル・ジョブス 投稿日: 02/03/02 23:43
sizeof(TEXT("ABC"))/sizeof(TCHAR) って書いて欲しい・・・




802 名前: デフォルトの名無しさん 投稿日: 02/03/02 23:46
_TCHARの方がよくないか?
どっちにしろVCのtchar.hに依存しとるが。



803 名前: ビル・ジョブス 投稿日: 02/03/02 23:52
構造体とかでも全体のサイズを型で割れば数を求められるぜ。

#define DIM(x) (sizeof(x)/sizeof((x)[0]))



804 名前: デフォルトの名無しさん 投稿日: 02/03/02 23:54
#define DIM(x) (sizeof(x)/sizeof(*(x)))

普通はこっち
今日のおまえは格段にしょぼいな


805 名前: デフォルトの名無しさん 投稿日: 02/03/02 23:56
どっちでもいいんじゃねーの?


806 名前: ビル・ジョブス 投稿日: 02/03/03 00:08
あー、そーかもな・・・
言い訳する気はないが、昔々のコンパイラでそれエラーになってさー・・・



807 名前: ビル・ジョブス 投稿日: 02/03/03 00:13
でも、しょぼいとか言うなよ・・・おまえイカか?



808 名前: イカ 投稿日: 02/03/03 00:26
よくわかったな、俺の正体。


809 名前: デフォルトの名無しさん 投稿日: 02/03/03 00:28
a book on c って本は面白いですか?
読んだことある人、感想聞かせてよ


810 名前: デフォルトの名無しさん 投稿日: 02/03/03 01:16
正直、読んだこと無い。

4版まででてるのか...



811 名前: デフォルトの名無しさん 投稿日: 02/03/03 01:59
関数で
f(int &x)
{
ってすると、&の前に)が必要だとか、{が必要だとかいう
エラーが出てしまいます。
どうしてなんでしょうか?






812 名前: デフォルトの名無しさん 投稿日: 02/03/03 02:00
f(int *x)
{


813 名前: デフォルトの名無しさん 投稿日: 02/03/03 02:04
>>812
*xじゃないといけないって意味だろうけど
&xだと逆参照演算子を使わなくてすむっていうメリットがあるぞ。


814 名前: デフォルトの名無しさん 投稿日: 02/03/03 02:04
kokohaCsure


815 名前: 811 投稿日: 02/03/03 02:07
>>812
&xでも定義はできるはずだと思うんですけど。



816 名前: デフォルトの名無しさん 投稿日: 02/03/03 02:11
>>806
X Window System のマクロ XtNumber が、まさに >>803 なのは
多分そういう理由。

>>811
まさか C じゃないよね?


817 名前: デフォルトの名無しさん 投稿日: 02/03/03 02:13
ここはCスレだ


818 名前: デフォルトの名無しさん 投稿日: 02/03/03 02:40
低レベルな煽りか


819 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:03
ポインタがある意味がいまいちわかんないんだけど、どーして?


820 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:06
>>819
そのうち分かる。気にするな。


821 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:07
貴様には想像もできない深遠な理由があるのだ。
アセンブラの勉強してから出直してこい


822 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:09
>820
そのうちが半年続いてるんですが・・・。
>821
いやいきなりキレなくてもいーじゃん。



823 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:13
ポインタはOSを書くのに必要なのです。


824 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:16
とりあえず、ポインタを使ったソートの実例とか
リンクリストとか、そういう簡単なやつを調べてみれ。



825 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:40
アドレスが指してるもん取り出せるんだぞ。
これほど便利なものはない。


826 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:47
>>825
アドレスが指してるもん書きかえられるんだぞ。
これほど危険なものはない。


827 名前: デフォルトの名無しさん 投稿日: 02/03/03 03:53
アドレスのビット演算が出来るんだぞ
これほど   なものはない。


828 名前: デフォルトの名無しさん 投稿日: 02/03/03 04:58
a[]="012";
として
i=2;
のしたときに

i[a]は'2'になるのはなんだか不思議だ。



829 名前: デフォルトの名無しさん 投稿日: 02/03/03 05:22
ある本を読んでいたらこんな関数がありました。

const char* makefname(char* uname, char* dstr)
{
char buf[1024];

strcpy(buf, uname);
strcat(buf, "-");
strcat(buf, dstr);
return buf;
}

sprintf 使えば関数にするまでもないような、、ていうのは置いておくとして、
ローカル変数のポインタを返しているんですが、これってありなんですか?も
しかしてこの本逝ってよしですか?


830 名前: デフォルトの名無しさん 投稿日: 02/03/03 05:23
class classA{
classB member;
};
class classB{
classA member;
};
こおゆう風にしたいんですけど・・・



831 名前: デフォルトの名無しさん 投稿日: 02/03/03 05:31
class classB;
以下同じ


832 名前: デフォルトの名無しさん 投稿日: 02/03/03 05:38
class classA{
struct classB member;
};
class classB{
classA member;
};



833 名前: デフォルトの名無しさん 投稿日: 02/03/03 05:45
>>829
それは書名をさらすべきでしょう。他にもないのか見てみたい。


834 名前: デフォルトの名無しさん 投稿日: 02/03/03 05:51
>>833
「もっと極めるLinuxのC言語」です。
http://www.ai-pub.co.jp/contents/book/prog/linux_c.html

こういう場合、呼出し側で char配列を用意して渡すか、呼ばれた関数側で
malloc でメモリ確保するか、ですよね。確か。


835 名前: デフォルトの名無しさん 投稿日: 02/03/03 06:03
>>829
すげえ(藁


836 名前: 833 投稿日: 02/03/03 06:43
>>834
さんくす。読者向けサンプルコードがあったのでもらったよ。
http://www.ai-pub.co.jp/contents/support/gcc_2/index.html

えいやっと最初に開けたファイルにこんなコードが..(ex13.c)
> strcpy(datestr, getdate());
> strcpy(timestr, gettime());
まあ、「この2つの呼び出しの間に日付が変わったらどうすんじゃあ」なんて
ツッコミは野暮なような気はするけどさ。
なんかこの本の著者って不思議なセンスしてそうだ。
本文も読んでみようかな。ある意味、ネタの本として
金を払う価値がありそうな予感。


837 名前: デフォルトの名無しさん 投稿日: 02/03/03 11:15
>>829
大昔なら、ローカル変数のポインタ返しても、スタック壊す前に呼び出し元が使うならおっげー
みたいな風潮あったから、その影響かも。


838 名前: デフォルトの名無しさん 投稿日: 02/03/03 11:24
>>828
漏れも不思議だった
「要は a[i] => *(a + i) => *(i + a) => i[a] だから」って聞いて
for(int i=0; i<28; putchar(i++["思わすイっちまったね、漏れは"]));


839 名前: デフォルトの名無しさん 投稿日: 02/03/03 11:38
思わす
思わす
思わす



840 名前: 838 投稿日: 02/03/03 11:41
思わす逝っちまった…


841 名前: もこ 投稿日: 02/03/03 14:03
ijk+kji=1333のi、j、kを求める(c言語で)
を教えて下さい。




842 名前: デフォルトの名無しさん 投稿日: 02/03/03 14:26
(i*100+j*10+k)+(k*100+j*10+i)==1333
が成立するi、j、kの値の求め方、かな?

どうでも良いが宿題なら
http://pc.2ch.net/test/read.cgi/tech/1011722640/l50
へ逝ってね。


843 名前: デフォルトの名無しさん 投稿日: 02/03/03 14:44
>>841
総当りでいいなら超簡単。
工夫して効率化するなら
・i+k=13
・j=1
という条件をつければループは6回で済むし。


844 名前: 843 投稿日: 02/03/03 14:47
>>843
条件をつければ、ってのはヘンな表現だった。
ijk+kji=1333なら、>>843の式は常に満たされると言いたかったのです。


845 名前: デフォルトの名無しさん 投稿日: 02/03/03 14:47
>>829
問題はローカル変数のアドレスを返している事じゃなくて、自動変数のアドレスを返していることだろ。
ローカル変数でも静的変数なら問題ない。


846 名前: 845 投稿日: 02/03/03 14:51
もしかして今時staticなんて使わないとか?


847 名前: デフォルトの名無しさん 投稿日: 02/03/03 15:02
ローカルなstaticとグローバルなstaticの違いは
コンパイラがチェックするだけで実態としては、
同じ領域に隣り合わせで確保されるわけですよね?


848 名前: デフォルトの名無しさん 投稿日: 02/03/03 16:10
ココで聞くようなことではないかもしれませんが
CGIとして実行されるPerlなどのプログラムはどうやって
ADDR_HOSTなどの情報を取得しているんでしょうか。


849 名前: デフォルトの名無しさん 投稿日: 02/03/03 16:11
わかってんなら他逝け


850 名前: デフォルトの名無しさん 投稿日: 02/03/03 16:15
>>849
じゃあ少し質問の内容を変えます。
C言語でどのようにすれば環境変数を取得することができるのでしょうか?


851 名前: デフォルトの名無しさん 投稿日: 02/03/03 16:23
getenv()


852 名前: デフォルトの名無しさん 投稿日: 02/03/03 16:37
>>851
ありがとうございます。
その気ワードで検索したら解決しました。


853 名前: デフォルトの名無しさん 投稿日: 02/03/03 16:39
>>847
実装依存だと思うがたいていはそうなるだろうな


854 名前: デフォルトの名無しさん 投稿日: 02/03/03 17:28
>>852
ANSI非準拠だけど、main関数の第三引数は環境変数のリストへのポインタであることが多いよ。
特定のものを取り出すならgetenv()だけど。


855 名前: デフォルトの名無しさん 投稿日: 02/03/03 23:31
>>830
無理なのでは?


856 名前: デフォルトの名無しさん 投稿日: 02/03/03 23:41
>831で解決したのでは……と思っていたが、
よくよく見たらマトリョーシカ作ろうとしてやがる。
確かに無理だな。


857 名前: デフォルトの名無しさん 投稿日: 02/03/04 00:19
日下部先生!
先生は


858 名前: デフォルトの名無しさん 投稿日: 02/03/04 05:33
マトリョーシカというより、クラインの壷ってかんじ。


859 名前: デフォルトの名無しさん 投稿日: 02/03/04 10:14
int ketasuu(int n){
return 「」;
}
n(10進)の桁数を返す関数です。「」を埋めてください。


860 名前: 投稿日: 02/03/04 10:16
int ketasuu(int n){
return (int) log10(n);
}


861 名前: 859 投稿日: 02/03/04 10:21
数学関数使うんですか、、
forで10で割りながら、ぐるぐるまわす方法しか思いつかないんで、
もっとスマートな方法を教えてもらおうと思ったんですが。


862 名前: デフォルトの名無しさん 投稿日: 02/03/04 10:32
if (n < 10) return 1;
if (n < 100) return 2;
if (n < 1000) return 3;
if (n < 10000) return 4;
if (n < 100000) return 5;
if (n < 1000000) return 6;
if (n < 10000000) return 7;
if (n < 100000000) return 8;



863 名前: デフォルトの名無しさん 投稿日: 02/03/04 10:39
n>=0の場合にしか使えないけど。

int ketasuu(int n)
{
return n < 10 ? 1 : ketasuu(n/10) + 1;
}


864 名前: デフォルトの名無しさん 投稿日: 02/03/04 10:43
リンクトリストと隣接リストってどう違いますか?
隣接リストのアルゴリズムってどなたかご存知ないでしょうか?
またその辺のことが書いてあるホームページとか。


865 名前: デフォルトの名無しさん 投稿日: 02/03/04 10:51
log10()呼ぶのが一番スマートで速いと思うけど。


866 名前: 859 投稿日: 02/03/04 11:10
そうっすか、、
他に数学関数1個も使ってないんですが、
こういう状況でlog10()呼んでも誰も怒らないですよね?
unix上のXで動くアプリだから、数学関数ライブラリねーよってこともないだろうし。



867 名前: デフォルトの名無しさん 投稿日: 02/03/04 11:29
>>861
>>860>>865に一票。
特別な理由が無い限り、既存のルーチンを活用したほうが賢いと思う。


868 名前: デフォルトの名無しさん 投稿日: 02/03/04 11:33
>>864
それって最短路問題の宿題?


869 名前: 864 投稿日: 02/03/04 11:47
>>868
そんなとこです。


870 名前: デフォルトの名無しさん 投稿日: 02/03/04 12:12
int でしょ?文字数=桁数じゃないの?俺ヴァカ?
解説プリーズ


871 名前: 868 投稿日: 02/03/04 12:16
>>869
リンクリスト(いわゆるリスト)と言った場合、それはデータ構造を指します。
で、リンクリストに隣接ノード(駅とか)の情報を詰め込むので、
問題製作者はそれを隣接リストと呼んでるんだと思う。

冗長に言えば、隣接ノード格納用リンクリストか。

疑問も解けたところで、リンクリストについては前スレ参照。
http://pc.2ch.net/test/read.cgi/tech/1012348974/


872 名前: デフォルトの名無しさん 投稿日: 02/03/04 12:18
>>870
いや、ある意味その通りなんだが、その「文字数」をどうやって得るかって話。


873 名前: 864 投稿日: 02/03/04 12:27
>>871
ありがとうございました


874 名前: デフォルトの名無しさん 投稿日: 02/03/04 12:27
>>872
そうか、int だから「文字数」なんてないですね。やっぱりヴァカだ。
おとなしく逝ってきます。


875 名前: 投稿日: 02/03/04 13:01
てことはこうか?

int ketasuu (int n)
{
char buf[16];
return sprintf (buf, "%d", n);
}


876 名前: デフォルトの名無しさん 投稿日: 02/03/04 13:10
マイナスだったら -1かける必要がありますね。


877 名前: デフォルトの名無しさん 投稿日: 02/03/04 13:14
>>860, >>862, >>863, >>875それぞれの算出結果。

n = 0, 860 : -2147483648, 862 : 1, 863 : 1, 875 : 1
n = 1, 860 : 0, 862 : 1, 863 : 1, 875 : 1
n = 9, 860 : 0, 862 : 1, 863 : 1, 875 : 1
n = 10, 860 : 1, 862 : 2, 863 : 2, 875 : 2
n = 100, 860 : 2, 862 : 3, 863 : 3, 875 : 3
n = -1, 860 : -2147483648, 862 : 1, 863 : 1, 875 : 2
n = -10, 860 : -2147483648, 862 : 1, 863 : 1, 875 : 3


878 名前: デフォルトの名無しさん 投稿日: 02/03/04 13:18
整数だけで計算したくて速度が必要ならバイナリ検索かな
if (n < 10000)
 {
  if (n < 100) if (n < 10)  return 1; else return 2
   else     if (n < 1000) return 3; else return 4;
 }else

書くのメンドクセ


879 名前: 877 投稿日: 02/03/04 13:19
負号を桁数に入れなくていいなら、
if (n < 0) n = -n;
をketasuu()の先頭に入れるだけでいいと思われ

桁数に入れるなら、>>875以外は修正の必要があるけど。


880 名前: デフォルトの名無しさん 投稿日: 02/03/04 13:27
正直、>>877>>878 の意味が分からない...


881 名前: 877 投稿日: 02/03/04 13:34
>>880
あ、ちょっとわかりにくかった。スマソ
↓のプログラムを、引数をいろいろかえて実行してみたということです。

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

int ketasuu_860(int n) {
return (int)log10(n);
}

int ketasuu_862(int n) {
if (n < 10) return 1;
if (n < 100) return 2;
if (n < 1000) return 3;
if (n < 10000) return 4;
if (n < 100000) return 5;
if (n < 1000000) return 6;
if (n < 10000000) return 7;
if (n < 100000000) return 8;
return 0; // dummy
}

int ketasuu_863(int n) {
return n < 10 ? 1 : ketasuu_863(n / 10) + 1;
}

int ketasuu_875(int n) {
char buf[16];
return sprintf (buf, "%d", n);
}

int main(int argc, char *argv[]) {
int n;
if (argc < 2) return 1;
n = atoi(argv[1]);
printf("n = %d, 860 : %d, 862 : %d, 863 : %d, 875 : %d\n",
n, ketasuu_860(n), ketasuu_862(n), ketasuu_863(n), ketasuu_875(n
));
return 0;
}


882 名前: デフォルトの名無しさん 投稿日: 02/03/04 13:55
int d[5];
int *p;
p = d;
とすると
p[0]、p[1]はd[0],d[1]の値を示すことができるって
本に書いてるんですけど、
d[5][5]
の各要素を操作したいときなんかは
どういう風にポインタを使えばいいんでしょうか?










883 名前: デフォルトの名無しさん 投稿日: 02/03/04 14:03
ポインタのポインタかな


884 名前: 882 投稿日: 02/03/04 14:24
>>883
どうやってやるうですか?





885 名前: デフォルトの名無しさん 投稿日: 02/03/04 14:36
int **pp;
int (*ap)[5];


886 名前: デフォルトの名無しさん 投稿日: 02/03/04 14:41
>>885
二重配列ならint (*ap)[5]だけじゃない?


887 名前: 887 投稿日: 02/03/04 17:11
DOSプログラムで指定ディレクトリの全ファイルを列挙するには
どうすればいいのでしょうか?
WIN32APIのFindFirstFileみたいな
MSDN&web検索したけどワカラン


888 名前: デフォルトの名無しさん 投稿日: 02/03/04 17:38
>>887
char *path=".\\";
system(path);


889 名前: デフォルトの名無しさん 投稿日: 02/03/04 17:39
>>887
そんなんコンパイラのドキュメント見ないとわからんよ。
DOSのコンパイラだったら、FindFirstみたいな名前の関数だと
思うけどな。


890 名前: 888 投稿日: 02/03/04 17:40
おっと間違った。
char *path="dir .\\";

他のディレクトリなら適当に変えて。


891 名前: デフォルトの名無しさん 投稿日: 02/03/04 17:52
>>887
MSDN(ローカル版)でfindfirstで検索したら、_findfirst()ってのでてきたよ。
ちなみに、アクティブサブセット(カテゴリ)はVisualC++ドキュメントね。


892 名前: デフォルトの名無しさん 投稿日: 02/03/04 22:59
>882
886が正しい。
配列int a[3][4]を操作するポインタはint (*ap)[4];
配列int b[3][4][5]を操作するポインタはint (*bp)[4][5];
一番左の数字以外は残さないとだめ。









893 名前: デフォルトの名無しさん 投稿日: 02/03/04 23:27
わかりやすいジサクジエソだこと。


894 名前: 882 投稿日: 02/03/04 23:39
>>892
この場合
ap[0] = a[0]にすると(ap[0])[0]がa[0][0]になるんでしょうか?
どうなるんでしょう?


895 名前: デフォルトの名無しさん 投稿日: 02/03/05 00:06
>>894
あんま意味無いけど、とりあえず例。
int i,j;
int a[5][5];
int **ap;

ap = (int **)malloc(sizeof(int *)*5);
for(i=0;i<5;i++) {
 ap[i] = a[i];
}
for(i=0;i<5;i++) {
 for(j=0;j<5;j++) {
  ap[i][j] = i*10+j; /* apのほうに代入 */
 }

for(i=0;i<5;i++) {
 for(j=0;j<5;j++) {
  printf("%d ",a[i][j]); /* aのほうを表示 */
 }
 puts("");
}



896 名前: デフォルトの名無しさん 投稿日: 02/03/05 00:31
こういうのも勉強しよう!

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

#define X 5
#define Y 7

int main(int argc, char *argv[])
{
  int i,j;
  int **a;

  /* ALLOC */
  a = malloc(sizeof(int **) * X);
  for (i=0; i<X; i++) {
    a[i] = malloc(sizeof(int *) * Y);
  }

  /* VALUE SET */
  for (i=0; i<X; i++) {
    for (j=0; j<Y; j++) {
      a[i][j] = i * 10 + j;
    }
  }

  /* VALUE PRINT */
  for (i=0; i<X; i++) {
    for (j=0; j<Y; j++) {
      printf("a[%d][%d] = %d\n", i, j, a[i][j]);
    }
  }

  /* FREE */
  for (i=0; i<X; i++) {
    free(a[i]);
  }
  free(a);

  return 0;
}


897 名前: デフォルトの名無しさん 投稿日: 02/03/05 00:38
>>895
malloc() はいらん。
ap = a;
でいい。


898 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:10
ap = (int **)malloc(sizeof(int *)*5);
ってどういう意味?


899 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:12
int型のポインタ5ヶ分の大きさのメモリブロックをヒープに確保し、
その先頭アドレスをint**にキャストしてる。


900 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:16
int*やint**って初めて見るんですけど、intとどう違うんでしょうか?


901 名前: 900! 投稿日: 02/03/05 01:17
今だ900げとーざー


902 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:17
>>900
intと同じ


903 名前: sage 投稿日: 02/03/05 01:18
>>900中身がアドレス


904 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:18
ポインタの指し示す型を表してるだけ


905 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:22
**はどこの何を指すんでしょうか?



906 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:27
本を読め。


907 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:47
**はダブルポインタなのです。
つまりポインタを指す、ポインタ。
精進せぇよ。


908 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:52
本読んだら int* 見たことないってことはないだろ。

ところで、

int* i;
int *i;

どっち派ですか?


909 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:54
int * i;
はだめですか


910 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:55
>908
int* i;
って書く奴はバカっぽい


911 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:55
int* i
だな。
int *iは余り良い使い方ではないと思ふ。


912 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:56
>>910
じゃあ、911はバカっぽいですね


913 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:58
意見が分かれますね。
int* i; 派の人は
int *i, *j; みたいに複数並べたりはしないのかな。


914 名前: デフォルトの名無しさん 投稿日: 02/03/05 01:58
統計的に
type *value;  は7割
type* value;  は3割
程度と見た。


915 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:00
昔からあるC言語の参考書はみんなint *i;だよ。
だから昔の人ほどint *i;派になると思うけど。


916 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:03
逆に、
int* i;と書く人って、どこから取ってきたの?
最近の本はこういう書き方するの?


917 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:03
前どっかのスレで
type *value; が古くて
type* value; は新しい書き方だって見た覚えがある。


918 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:04
私は恩師が
int* i
と書く人だったので自然にそうなった。


919 名前: 名無しさん@おひさまのよう。 投稿日: 02/03/05 02:05
type* a,b,c;
ってやるとどうなるの?



920 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:05
で、「*」はどういう意味?


921 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:06
>>919
type* a;
type b;
type c;
とおなじ。
バカっぽいね(w


922 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:08
>は新しい書き方
なんじゃそら。きもすぎるぞ
なんでいまさら変える必要がある?



923 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:08
>>920
だから本読め


924 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:08
>>920
ファンネル


925 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:10
いちおうマジレスすると、最近はC++とかの強い型指向のせいで、
int* a;と書いたほうが「int*」という型にはっきりと見えるので
そう書くようになってる。


926 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:13
>>925
最近て、、、
int* a,b,c;
が駄目なんだから、そんなの意味無いとおもうけど
LISPみたいに単一シンボルとみなすならともかく


927 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:13
int *p;
だろ、俺はこの書き方。


928 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:19
>>925
typedef int * int*;
とは書けないC/C++では混乱の元>925


929 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:23
int& a=x,b=y,c=z;
はどうなるの?


930 名前: 895 投稿日: 02/03/05 02:24
>>897
え?マジ?
コンパイル通るソースキボン。


931 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:24
aだけリファレンス多分


932 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:24
>>921
と同じだろ...


933 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:26
私はint *p;
プロトタイプやキャストではint *
int* p;は違和感がある。


934 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:28
じゃあ、
int* i
int& i
考えた奴って、真性のバカじゃん。
申し訳無いけど


935 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:28
そういえばプロトタイプ宣言をしている既存のプログラムってあまりみかけないね。


936 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:32
>>921,>>929みたいのは紛らわしいだろ
typedef int& int_r;
int_r a,b,c;
てすりゃ全部リファレンスだが
int& a,b,c;
これだと一瞬、同じかと思う。


937 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:37
>>936
>typedef int& int_r;
なんで
int& int_r;
みたいな書き方するのか理解できない。typedef使うのに。
&とint_rよりも、intと&の方が結合度高いと思ってるバカにしかみえん。



938 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:40
おもしろいな。この話題でしばらく引っ張れるか?(w


939 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:42
typedef 既存の型名 新しい名前;
だから。その方が読みやすいだろ。
書き方は人それぞれ。




940 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:44
>>938
引っ張ってどうするんだよ


941 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:46
この話題は'バカなコーティング規約'行きだろ
こっちいけ
http://pc.2ch.net/test/read.cgi/tech/1012715148/


942 名前: 895 投稿日: 02/03/05 02:46
>>897
あ、意味判った。すまん。わざわざmalloc()しないで、
int *ap[5]; /* もしくは明示的に int *(ap[5]) */
ってしろってことね。確かに。


943 名前: 895 投稿日: 02/03/05 02:50
>>942
あ、まだ判ってなかった。
>>892のようにしろってことか。
ハズカスィ・・・


944 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:52
>>939
typedefは変数宣言とシンタクス的に変わらんのだが・・


945 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:53
昔は int * p;
みたいに書いていたけど今は int *p; にもどした。
解釈規則からみて、やはりこのほうが良さそう。


946 名前: 897 投稿日: 02/03/05 02:54
>>930(895)
すまそ。嘘でした。あなたが正しい。


947 名前: デフォルトの名無しさん 投稿日: 02/03/05 02:57
C は int *p;
C++ は int* p;
が「自分の理想」。
でもいつもC風。


948 名前: 939 投稿日: 02/03/05 02:59
だーから今回は新しく付ける名前が1つだったからだっつーの。
やり方は趣味の問題だろ、しつこいなぁ。



949 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:00
>int* a,b,c;
これができないから型名に*つけるのはやめろって意見があるみたいだけど、
その記法使わなきゃいいだけじゃん。
int* a;
int* b;
int* c;
みたいにして。
このほうが型名らしくてカコイイ。


950 名前: 945 投稿日: 02/03/05 03:02
C++ でも
int* pa, pb; で pb が怪しいすね。
理想よりケアレスミス撲滅のほうをとりました。


951 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:02
typedef int& inta,intb,intc;
はどうなるの?



952 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:04
int* i;
とするやつと一緒に仕事したくねーな


953 名前: 945 投稿日: 02/03/05 03:04
んーまぁ
趣味の問題すね。


954 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:04
>951
なんじゃそら?


955 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:07
939にはぜひC/C++の文法を調べてホシイ
できれば一度Cの宣言部のパーサー作ってもらいタイ


956 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:07
>>951
intaはintへの参照
intb,intcはint


957 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:12
>>951
Cでは構造体のtypedefとかで良く使う
typedef struct {...} *ptype_t, type;


958 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:13
そういやint* i派はstructの場合はどうすんのやろ?


959 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:14
>>958
struct hoge* h;


960 名前: 939 投稿日: 02/03/05 03:15
>>955
あなたが作れば?
どうせ暇なんでしょ。


961 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:16
struct {...}* h;
やっぱ気持ち悪い


962 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:17
int* i;
とするやつと一緒に仕事したくねーな


963 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:20
>>960
自分で作ると面白い事実に気付くかも・・


964 名前: デフォルトの名無しさん 投稿日: 02/03/05 03:52
>>875
その手で行くならこう?
int ketasuu(int n)
{
 char buf[16];
 sprintf(buf, "%d", abs(n));
 return strlen(buf);
}


965 名前: デフォルトの名無しさん 投稿日: 02/03/05 08:53
C++な連中はそもそも列挙しないのかも?
 int* a = NULL;
 int* b = NULL;
 int* c = NULL;
みたいな


966 名前: デフォルトの名無しさん 投稿日: 02/03/05 08:59
新スレ立てるよ


967 名前: デフォルトの名無しさん 投稿日: 02/03/05 09:09
つーか関数へのポインタを宣言するときはどうするんだよ!
typedef無しでな。



968 名前: デフォルトの名無しさん 投稿日: 02/03/05 10:28
>>967
void (* func)(void);
じゃない?


969 名前: デフォルトの名無しさん 投稿日: 02/03/05 10:32
2ch に貼られてるコード見ると結構
int* i; タイプの人を見る気がするけど少数派なのかな。


970 名前: デフォルトの名無しさん 投稿日: 02/03/05 10:43
>>969
それはきっと、int と * の間のスペースの幅が短くて見にくくなってて、
int* i; に見えているという罠。


971 名前: デフォルトの名無しさん 投稿日: 02/03/05 13:36
>>964
なんでstrlenを使うの?
sprintfの戻り値だけで十分じゃない。


972 名前: デフォルトの名無しさん 投稿日: 02/03/05 13:40
>>971
よいツッコミです。


973 名前: デフォルトの名無しさん 投稿日: 02/03/05 13:42
fputs("新スレは?\n",2ch_progtech);


974 名前: 誘導 投稿日: 02/03/05 13:45
>>973
次スレです

C言語なら、俺に聞け! <14>
http://pc.2ch.net/test/read.cgi/tech/1015286974/



975 名前: デフォルトの名無しさん 投稿日: 02/03/05 13:54
こんなことを聞いて申し訳ないのですが、時間差を求める方法を
教えてください。例えば足し算を10問解いて、それにかかった
時間を教えてください。


976 名前: デフォルトの名無しさん 投稿日: 02/03/05 13:56
>>975
time.hをインクルードして
解く前と解いた後にclock()を使う。
あとは引いて差を求めるだけ。
CLOCK_PER_SECで割れば秒に。


977 名前: 976 投稿日: 02/03/05 13:59
適当に書いたので間違っているかも。


978 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:01
>>975
足し算の開始前に時刻を表示します。
足し算の終了後に時刻を表示します。
おわり。

足し算の訓練と同じに時刻計算の訓練もできるので
ソフトウェアの評価はうなぎのぼり。


979 名前: 975 投稿日: 02/03/05 14:02
>>978
時刻の表示の仕方を教えてください。


980 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:03
>>978
それスゲー
かなり画期的だ。

ビジネスモデル特許を申請しなきゃ。


981 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:05
system("time");


982 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:05
>>981
そう来ると思った(笑)


983 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:06
>>981
サービスとして毎回時刻調整できるようになっています。
便利です。


984 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:06
10 cls
20 print time$
30 goto 20


985 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:07
ところで、>>976の方法で実行速度を測るのって好ましい方法?


986 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:07
>>975です
>>976>>978さん
ありがとうございました。



987 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:09
printf("ストップウヲッチをようゐしてくださひ\n");
getchar();
printf("それでは、ようゐどん!\n");



988 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:10
ソフトウェアにサポート要因として
ストップウォッチおじさんを一人ずつつけて配る。


989 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:10
puts("すとっぷ!!");


990 名前: イカ 投稿日: 02/03/05 14:12
測りたい時間にもよるがストップウォッチ的なのがほしいなら、いいんでないかい?

厳密な実行速度は測れないよ。



991 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:12
いまだ990げとずざぁ     


992 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:12
つまんねぇネタばっかだな


993 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:14
>>990
printf("%s\n",
"コテハン?"
"この板にコテハンなんていたんだね。あ、voidは除いて");


994 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:19
FILEって構造体?


995 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:23
いまだ995げとずさー
ってはやく新スレいけよ


996 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:24
>>994
そうだ。stdio.hを見ろ。


997 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:25
>>996
あ、やっぱり。
stdio.h見てもなんだかよく分からなくて。


998 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:27
998


999 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:27
おまえらもうすぐ1000だっていうのにマターリしてんなぁ


1000 名前: デフォルトの名無しさん 投稿日: 02/03/05 14:27
1000


1001 名前: 1001 投稿日: Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。



2ちゃんねるは、ここのサーバを使ってるです。。。