C言語なら、俺に聞け! Part 51

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しませう。
質問する前には最低限Googleで検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

コンパイラを探しているなら >>2- を。

上記を逸した場合の結果は激しく未定義だゴルァ!!

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/
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
前スレ
C言語なら、俺に聞け! lt;50gt;
http://pc2.2ch.net/test/read.cgi/tech/1044938752/
【過去ログ】
49 http://pc2.2ch.net/test/read.cgi/tech/1042646178/
49? http://pc2.2ch.net/test/read.cgi/tech/1042640474/
48 http://pc3.2ch.net/tech/kako/1041/10411/1041127646.html
47 http://pc3.2ch.net/tech/kako/1040/10400/1040048202.html
46 http://pc3.2ch.net/tech/kako/1039/10393/1039328710.html
45 http://pc3.2ch.net/tech/kako/1038/10384/1038405432.html
44 http://pc3.2ch.net/tech/kako/1037/10377/1037796472.html
43 http://pc3.2ch.net/tech/kako/1037/10372/1037281411.html
43 http://pc3.2ch.net/tech/kako/1037/10371/1037134356.html
42 http://pc3.2ch.net/tech/kako/1037/10371/1037101156.html
41 http://pc3.2ch.net/tech/kako/1036/10368/1036876790.html
40 http://pc3.2ch.net/tech/kako/1036/10366/1036673739.html
39 http://pc3.2ch.net/tech/kako/1036/10364/1036409391.html
38 http://pc3.2ch.net/tech/kako/1035/10357/1035729526.html
37 http://pc3.2ch.net/tech/kako/1035/10356/1035623265.html
36 http://pc3.2ch.net/tech/kako/1035/10352/1035211039.html
35 http://pc3.2ch.net/tech/kako/1034/10343/1034337064.html
34 http://pc3.2ch.net/tech/kako/1033/10332/1033240509.html
33 http://pc3.2ch.net/tech/kako/1032/10326/1032606064.html
32 http://pc3.2ch.net/tech/kako/1031/10319/1031905402.html
31 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
30 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
29 http://pc3.2ch.net/tech/kako/1029/10296/1029605182.html
28 http://pc3.2ch.net/tech/kako/1028/10284/1028495798.html
27 http://pc3.2ch.net/tech/kako/1027/10271/1027160374.html
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
>>1
スレ勃て乙。
>>1
乙。
ttp://pc2.2ch.net/test/read.cgi/tech/1044938752/976
もアドバイスよろしくお願いしますね。
保守
DLL化した関数の返り値ってreturnで返す値でいいんですか?
>>9
DLLはスレ違いかもしれんが・・・
それで良いと思われ。
>>10
ごめんなさい、ありがとうございます。
>>1
ぬるぽ
           //.|
         //./.|.   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        //./ | |   | すんません。すぐ処分しますんで・・・・・。
      //./|/.| .|   \_ ______________
      □/ / //| |.      |/
      | |/.;;;;//. | ||.          ☆ 
      | | ;;;;;;//  | |||   l⌒)=|ニ二フ  
      | |.;;;//   | |.||   ∧.|.∧  
.  ∧ ∧ | |.//☆.  | | ||.  ( ・∀・)
 ( ・A・).| |/.    | |. ||  |   )            ワイワイ  ガヤガヤ
__(    ).| |___. | | || __.| | |____   
  | | | | |.   //.| ̄ (__(__).   /.|      ∧_∧ ∧_∧ ∧ ∧ 
 (__)__)| |.  //  |.         //|     (´-`;)(@・ )(;´∀)
      | |.//∧ ∧|<ぬるぽォァァ /  |    ∧∧  ∧ ∧ ∧_∧ ∧∧
     (..| |/ (;´A`) ←>>12 .//    |   (∀・ )(ー゚* )(   )(´∀`
   (⌒ .| |    / ̄ ⊂.⊃.  .//   /  ∧_∧ ∧ ∧ ∧ ∧. ∧_∧
 ∧ ∧  | |  /    └─┘//   /   (´・ω)(д゚` )(   )(
( ・A・) | |/        .//   /   ∧_∧ ∧ ∧ ∧_∧ ∧_∧ ∧
(    )  ~~       //   /    (   )( ゚∀゚)(`   )(   )(゚д
. | | |          //   /    ∧_∧. ∧_∧ ∧_∧ ∧_∧ ∧_∧
(__)__)        //   /     (д- )(   )(*゚ー゚)(TдT)(∀` 
  ∧_∧
 ( ´∀`)< ぬるぽ
キョウハタイリョウダナ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >.__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>14
>>1
strncpy
>>1
mktime
18デフォルトの名無しさん:03/02/25 07:58
long double と long float はどうちがいますか?
20デフォルトの名無しさん:03/02/25 09:17
struct bitset {
unsigned int flag1 : 1;
unsigned int flag2 : 1;
unsigned int flag3 : 1;
...
};

というようにビットフィールドをセットしたとき、
変数iをインデクスにしてi番目のflagにアクセスすることってできますか?
21 ◆8/MtyDeTiY :03/02/25 11:12
#define setbit(a,i) (a.flag##i = 1)
#define clrbit(a,i) (a.flag##i = 0)
#define testbit(a,i) (a.flag##i == 1)
ただし、iは定数。

...要求条件を満たさないようだな。


変数でアクセスしたいなら、素直に
#define setbit(a,i) ((a)|=1<<(i))
#define clrbit(a,i) ((a)&=~(1<<(i)))
#define testbit(a,i) ((a)&(1<<(i)))
とか。
22 ◆8/MtyDeTiY :03/02/25 11:14
つーか、各ビットに名前をつけたいのでなければ、
ビットフィールドを使う意味って無いでしょう。
>>19
(・∀・)イイ!!
お前らいい加減にC++に移行しろ(-_-;)
未だにCにとどまっているヤシは、多分Cを覚えたてで、他人に
教えてみたくてしょうがないんだろう。
>>24
>>25
Cで書かれたオープンソースのプログラムは腐るほど有るわけだが、
そいつらに云ってみたら?
取りあえずLinus, RMSあたりからでも。

適材適所
わざわざCスレに来て自分がC++を知っているという取るにも
足らないことを話したがるようなヤシは、多分C++を覚えたてで、
他人に教えてみたくてしょうがないんだろうね。
>>28
それは言えてるかも(w
>>24-25
こら、初学者にそんなこと言っちゃいけません。
c++に移行しろって言っている奴に限ってクラスの設計が小汚いんだよな。
優秀なcプログラマはそれなりのc++プログラマになれるけど
使えないc++プログラマは似ても焼いても食えんぞ。
てか、他所でやれや
言語よりもパラダイム。
くそっC++スレがイマイチ盛り上がりに欠けるのは、ユーザーの
絶対数がまだまだ少ないからだ。
馬鹿ユーザー増やしてもしょうがないから、このままで良いよ。
C++ で Cライクにプログラミングすればいいのでわ。
無理してクラスや STLを使わなくてもいいわけだし。
>>36
そうそう、それで structキーワードは忘れずにつける、これ最強。
CコンパイラでコンパイルできるようなプログラムはC++で書いたとはいわん。
ソースの形式だけC++で内容はCってことが多い
C++の機能は関数のオーバーロードだけ使っています。
C++で書いたと宣言する必要はないよ。Cで名前の衝突考えたり
甘い型チェックでふらふらしたコードを書くよりメリットある
んじゃないかということ。
(´-`).。oO( スレ違いとわかっている雑談を何故続ける? )
>>42
多分そろそろCからC++に移行したがっているヤシが少なからず
いるからと見た。
そして失敗してCに戻ってきたヤツも何人かいると見た。
じゃ、ベターCも取り扱い対象にしよう。
>>45
それ(・∀・)イイ!!
C++スレでベターCについて書くとスレ違いと叩かれるからね。
>>45
それ(・∀・)イイ!!
専用スレ立てると糞スレ立てるなと叩かれるからね。
早速で悪いんだが、C++ではプロトタイプ宣言は必須になったが、
Cでも必ずするべき?
49デフォルトの名無しさん:03/02/25 15:29
>>48
しなければならないわけではないけど、するべき。してくれ。しろ!
>>49
サンクス。必ずするようにするよ。
ところでベターCの質問なんだけど、C++ではvoidのreturnが
許されている。こういうコードは書いても精神衛生上大丈夫
だろうか?

void func1()
{
}

void func2()
{
return func1();
}
うーん。
C++ではなくCを「敢えて」選ぶ理由は
・ツールやデバッガのサポート。
・移植性。組み込みだの古い環境だの。
・ぐちゃぐちゃなABIがいや。asmやFORTRANともリンクしたいんだい。
・今だに標準に追いついてないコンパイラがゴロゴロしてる状況で
一々対応状況までおっかけてコーディングしてられない。
・何となく禿が嫌い(w。ガーベージコレクトもサポートせず
コンパイル時に型が決まっちまうような半端なオブジェクト指向言語
なんぞ使ってられるか。
のようなものだったりするんではないかと思うので、C++を
ベターCとして「しか」使わないんなら単純にCで書いた方が遥かに
メリットがでかいと思うのだが。
やれやれ・・・
MFCがC++だから、嫌々ながらC++に移行した。まだまだC++を
「使いこなせて」いるわけではないが、もうCには戻れない。
>>51
まあそうだろうな
Cも大した事無いのにね。
お前等いい加減 Ruby に移行しろ(^ε^)-☆Chu!!
>>51
典型的なCの”信者”だな。
C++にもいい点はあるのに・・・・・
新しい言語を学習する事を嫌がる怠慢なプログラマの言い訳のための
言葉になってしまっている気がするのは筆者だけでしょうか。
5951:03/02/25 16:10
>>57
別にC++を否定してる訳でもなんでもないよ。C++をベターCとして「のみ」
使うのは無意味(それぐらいならCで書いた方がよっぽどいい)と
云ってるだけ。
C++のメリットを(ほとんど)享受できず、負債のみを負うことになるからね。
> ・移植性。組み込みだの古い環境だの。
コレと
> ・何となく禿が嫌い(w。ガーベージコレクトもサポートせず〜
コレを同列に置かれても
6151:03/02/25 16:18
>>60
まあ下のは筆がすべっちゃっただけということで。
つい、いつもの煽り癖が...(w
>>59
えーと、stringは?舐め空間は?関数のオバーロードは?ディフォルトパラメータは?
cを長く使ってきた私にとっては、
・構造体とアクセス関数をクラス化したい。
・構造体を同じように取り扱うことが多いのでテンプレートも使いたい。
・特殊なクラスには演算子オーバーロードしたい。
からc++に移行したいのだけど、
・cで納品と言うしょうもない契約や、
・cしか読めない他社との共同作業だったり、
・既存のライブラリがcで書かれていたり、
するのでなかなか移行できません。
#でも一部ライブラリは内部をc++で書いて、cから呼べるラッパを作ったけど。
64デフォルトの名無しさん:03/02/25 16:26
Cを初めて2日くらいなのですが、とりあえず超初心者はこれを作っとけっていうのってありますか?
BCCでCpadっていうのを使っています、エディタはお勧めのものとかあれば教えていただきたいのですが…
edit.com
6651:03/02/25 16:30
>>62
チミは一体どこからどこまでを「ベターC」と云っとるのかね。
俺の個人的な見解では
・std C++ライブラリ(特にSTL)を駆使するようなプログラムは既に
better Cの範疇ではないとおもう。STLなんて簡単なんだし
C++の中では費用対高価が圧倒的に高いコンポーネントだから
使える人はバシバシ使ってとっととC++に移行すればよいと思う。
・後ろの三つは「あれば便利」程度の物であって、C++化によって
発生する負債(>>51参照)をカバーするには足らないと思うね。
無論>>51のものが全て負債とは感じない人であれば、何も問題
ではない。
・ABIだけを気にする人であれば、extern "C"である程度解決する
ことは書いておこう。ただし、一般にC++コードを実行するには
Cよりも遥かに多くの複雑なランタイムサポートやスタートアップ
コードを必要とすることは知っておくべきだろう。
例えばDLLを例に取ると、libcに一切依存しないものの方がいいに
決まっている。Cでそのようなものを書くことは簡単だが、
C++でそれをすることは困難だ。ATLにはCRTに最小依存するための
コンパイルオプションが有るのだが、設計ミスのせいで事実上
役に立たないものになってしまったように思う。
6764:03/02/25 16:34
>>65
飛んだのですが、わかりませんでした、ごめんなさい
>>64
Windowsでお勧めはPeggyかXyzzyかVivi。
#これでemacs派もvi派も安心w

Cを始めて2日でも、プログラミングの経験が豊富なら構造体やポインタを
多用するプログラムでも作ってみればいいと思う。
プログラミングも始めて2日なら……先ずはプログラミングの勉強だね。
はああ、ウンチク君の登場か。
7064:03/02/25 16:36
>>68
ありがとうございます、peggy使ってみます。
プログラミングは、VBしか触ったことがないので…
>>51
いちいち細かい事グチグチ言うな。
stringくらい使わせたっていいじゃねいかよ。禿。
流石にCスレでわざわざC++の話を持ち出したがる奴は低レベルのが多いな....
取り合えず
>>28
が真実をついてるってことで。
7364:03/02/25 17:06
具体的な、こんなプログラム作れって言ってもらえると嬉しいのですが・・
さいたまがダンスするプログラムを作ってくらさい。
7564:03/02/25 17:16
>>74
ごめんなさい
7668:03/02/25 17:33
>>64
方向は二つ。
・GUIをバリバリ書きたい。
私は門外漢なのでノーコメント。
・GUIはどうでもいいからプログラミング技術を磨きたい。
標準入出力を使った、簡単な集計プログラムはどうだろうか。
デバッグも楽だし、テストデータはテキストファイルが使えるし。

最初は行数のカウントし出力、次に行から数値を読んでその合計を出力、
計算系に進化するなら平均を出すとか標準偏差を出すとか。
データ処理系に進化するなら単語数を数えるとか行をソートするとか。
#unixで言う、wcとかsortだね。
>>64
テキスト(ソースファイル等)を読み込んで、行を逆順に出力
するプログラムを作ってみれ。
俺は初心者だった頃、いかに効率よく実装するかでいろいろ
試した記憶がある。
7864:03/02/25 17:39
>>76
Cだけでグラフィックできますかね?GUIより今はプログラム技術を磨きたいです
テキストファイルから文字(数字)を抜き出して
ソートや平均値を出すなどのプログラムということでしょうか?
やってみます
7964:03/02/25 17:40
>>77
わかりました、ありがとうございます
>>64
「Software tools(ソフトウェア作法)」のプログラムをCで
書いてみるとか、もいいかも。
例がRatforというFORTRAN用プリプロセッサ言語で書かれているんだが
FORTRANなんぞ知らなくても読める。まあ、古い本なので汎用機
の時代のことを聞きかじりでも知らないと、何を云ってるかわからん
部分もあるかもしらんが、非常に示唆に富んだ名著であることには
間違いないよ。
81デフォルトの名無しさん:03/02/25 18:01
MS-DOS上で動くフリーのCコンパイラってありますか。
LSI-C 試食版、djgpp
peggyってインストール必要だから敬遠してたけど、どのへんが使える?
EmEditor 使いなのでわからん。

プログラマーが使うテキストエディタって何?Part3
http://pc.2ch.net/test/read.cgi/prog/1044538391/
テキストエディタ何使ってる?Ver.10
http://pc2.2ch.net/test/read.cgi/software/1040201710/
edit2.exe 最高
8664:03/02/25 18:35
>>76,77,80
すみません、まだポインタすら使えませんでした
勉強しなおしてきます
>>86
釣りだったのか?(w
それはともかく、「ポインタが分からない」人は経験的には
ポインタではなく「変数」が分かっておらず、さらに云えば
計算機についての基本的な理解が足りていないことが多い。
その辺から見直してみ。
>>64
ついでにJavaTeaも飲んどいで。
89デフォルトの名無しさん:03/02/25 19:23
char a[2];

a[0]=100;
a[1]=200;

(100=16h,200=C8h)

これをshort型として16C8hみたいな感じで取り出すにはどうしたらいいですか?
お願いします
sprintf(s,"%X%Xh",(short)a[0],(short)a[1]);
9190:03/02/25 19:26
shortにキャストしても、可変個の引数リストだからintにされちゃうけどね。
9290:03/02/25 19:32
あ、もしかしてcharの配列をshortとして見たいの?
じゃあ

short sh;
char *a=&sh;

a[0]=200;
a[1]=100;

こうすれば?ビッグエンディアンなら代入する値を逆にして。
(sizeof(short)==2とは限らないんだけど・・・)
>>89
((short)a[1])<<8 | a[0]
こういうの unsigned でない char のまま計算するの気持ちわるいな
どうせ環境依存だし、いいじゃん
>>93
境界あわせの問題とか大丈夫?
shortならいいのかな・・・
CCLemon飲まないの?
98デフォルトの名無しさん:03/02/25 20:00
今までVBをしていました。
今度、Cを覚えようと本を買い勉強を始めました。
コンパイラをボーランドからDLしましたが
無償のコンパイラは、MS−DOS上しか使えないんでしょうか?
ボタンとかテキストBOX等の使用は、全てソースを書かないと
だめなのでしょうか。
もし、同じプログラムを組むとしたら、VBの何十倍のステップが
必要ですよね。
visualC++で勉強したほうがよいのでしょうか?
え〜とっ、VB教えて下さいw
>>98
Cの勉強にGUIプログラミング(?)はやめた方がいいよ。。。
>>98
おいおい、VBやってるナウなヤングならC#だろ?
102デフォルトの名無しさん:03/02/25 20:08
a[100]="abcdefg";

b[]="abcde"; //(先頭からn文字)
c[]="fg"; //(残り)
みたいに分割するのに,一番負荷の小さい方法はどうすればよいですか?
>>102
strncpy(b,a,5);
b[5]=0;
strcpy(c,a+5);
104デフォルトの名無しさん:03/02/25 20:23
>>101
98ですが、C#を覚えたいのですが、いきなりするより
Cをある程度覚えてからC#に移行しょうと考えたんですが
遠周りでしょうか?
105C ◆eAPv2Zei.Q :03/02/25 20:25
>>104
C++はともかく、C#ならC#から勉強した方がいいよ。
106105:03/02/25 20:26
名前欄に「C#知らないけど(ワラ」と書いたらトリップになっちゃった(鬱
107C ◆eAPv2Zei.Q :03/02/25 20:29
ふむ?
108102:03/02/25 20:30
>>103
恐れ入りました m(_ _)m
strcpy(c,a+5)
が思いつかなかったです。
109C ◆eAPv2Zei.Q :03/02/25 20:30
test
これでいいだろ
>>110
なんで井じゃないのかと小一時間(ry
112デフォルトの名無しさん:03/02/25 21:23
すいません教えてください。
例えばなんですが、配列を動的に取る場合などに
関数を使ってサイズを取るのと一回数値型に代入してからサイズを取るのって
プログラム的にはどちらがスマートなんでしょうか?
ex1.
int length=strlen("length");
char str[length];
ex2.
char str[strlen("length")];
>>98
ボーランドの無償コンパイラをMS-DOS上で動かす方法を教えて下さい
>>113
エミュレータ
DOSモードとはまた。
>>112
文字列リテラルならsizeofを使えば?
つーかどちらもコンパイル通らないだろ(C99はしらん)。
コマンドプロンプトとかをMS-DOSとか言う奴の発想だと、
LinuxやらPC-UNIXもMS-DOSになるのかな?
んなわけねーだろ
MS-DOSプロンプトじゃ長いから略してMS-DOSって言うんだよ。
>>118
いや、奴らは絶対わかってねえ
どぷろん
121デフォルトの名無しさん:03/02/25 22:30
コマンドプロンプト(MSーDOSプロンプト)だよ。
MS−DOSって何? 117さん。
>>121
>>98に言えよ・・・
分かりやすくて、キーボードで瞬間的にシステムをオペレートできる
世界最強のOS
「超漢字」のことか。
PC-DOS >>> MS-DOS
これが ゼネレーションギャップ というやつか…
おまえら

ろそろアセンブラに移行
しろ
や。
HTTP/1.1 304 Not Modified
(・∀・)新着ナシ
>>128
この板に来る奴がそんな厨房ツール使うなよ。
いいじゃん。便利なんだから。
65816 のCコンパイラはありますか?
72289のCコンパイラってある?
804860のCコンパイラってある?
7401のCコンパイラってある?
お前らいい加減に6943に移行しろ(@_@*)
3.14159265358979のCコンパイラってある?
137C ◆eAPv2Zei.Q :03/02/25 23:31
ある
65816(SNES?)以外判らないけど、なんのCPUですか?
やはりモトローラの68000系が最高だろう。
やっぱDEC Alphaだろう。
Ruby>>>68k>8801>386>その他
0x00を含むバイト列を文字列として操作(strlen、strcpy等)することは不可能ですか?
ううん。
いってみれば通常の文字列も0x00を含むバイト列だな。
  ∧_∧
 ( ´∀`)< ぬる
文字列の「途中に」含む場合。
ニヒキマトメテ
          | | ガガッ   .
  ( ・∀・)   | |      
 と    )    | |   
   Y /ノ    .人   
    / ) .人 <  >__Λ ∩
  _/し' <  >_Λ∩Д´)/
 (_フ彡 V`Д´)/   / ←>>145
            / ←>>146
キーボードからの入力モードが挿入か上書きかのアレはアプリケーション毎に管理するものなのですか?
NULLPOinter
文字列の途中にナルキャラ('\0')を挟みたくても
ナルキャラでターミネートされてしまって文字列として取り扱えなくなる罠。

>>142
ってことで、0x21 0x22 0x00 0x23 0x00 なるバイト列があったとして、
その先頭をpが指していたとする。その場合、
strlen(p)は2を返すし、strcpy(どこか, p)も2バイトしか転送しない。
つか、「文字列」という言い方をしたら'\0'までを指すと思われ。
'\0'以降にも有効値がある場合は文字(型)配列値。
lpsz?
SZって何の略?
String terminated by Zero の略らしい。
こんな情報変数名に要らない。。
いや、いるません!
>>155
ずいぶん乱暴な略だなオイw
unsigned long ul; として
何処かで
if( ul == -1) が真になることってある?
>>157
ハンガリアン記法だったかな?
MFCとかで多用される表記法で、変数にsz_hogehogeとか名前つける。
漏れは、こんなの嫌いだからやらんけど。
>>158 なったよ!
ul=0xffffffff;
if( ul == -1)
printf("aaa");

unsigned long ul = -1;
if (ul == -1) { puts("ul == -1"); }
ああ、もう、ハンガリアンダンスは余所でやってね。
ポンターはハンガリアンだろ
狸がどうしたって?
>>160-161
てぇことは、
unsigned long と -1 を比べた時に
やばいことになるのかな?

unsigned long ul = 0xfffffffe;
if(ul < -1)
 printf("んなアホな!");
166163:03/02/26 04:11
あっ ポインターでした。
-1 が unsigned long に格上げされて正の値になって ul と
比較されるからそうなってしまう。
>>166
ポンターさんという有名なハンガリー人がいるんだろうな、きっと
などと勝手に納得していたおれの立場はどうなる。
ハリー・ポンターと雲の王国
キーボードが挿入モードか上書きモードかを知るにはどうしたらいいて゛すか?
>>170
それはCの問題ではない。OSの問題だ。
綱引きOS! OS!
オーエスオーエス
オーエスってなんやー?
Oh! Yes!
>>171
それはOSの問題ではない。アプリケーションの問題だ。
scanfやgets等の標準入力(リダイレクトしない場合)のキーボード入力の仕様は標準で決まっているのですか?
カーソルキーは対応無しで^H(BS)で1文字削除のみ、編集機能無し、ですか?
>>176
少なくともCの仕様にはキーボードなんてものはない。
標準入力は規定されているけど、それがなんなのかまでは規定されていない。
標準入力とは、キーボードを指す言葉ではない。
それがどこに繋がっているかは(ハード的には)全く頓着しない。
なので、キーボードではなくシリアル回線で外部に繋がっていても全く問題がない。
また、ファイルから入力する場合も多いだろう。
ファイルから入力する場合、カーソルキーやBSキーにどんな意味があるというのだ。
kbhit
>>136
πの小数点以下の14桁って麻雀であれば上がっている形なのですねw
11 234 555 678 999
(3.)14159265358979
なんでこんなこと考えてしまうんでしょ
>>180
数学の神がツミコミをしていたとは…
>>177-178
つまり、キーボードに関してはOS依存ってことね?
18320:03/02/26 09:57
>>21
遅くなったけどありがとうございます。
じゃ、やっぱり普通の論理演算の方が柔軟性があるわけですね。
基本的にマクロは引数を複数回評価するように書いてはならないんだよね。
185デフォルトの名無しさん:03/02/26 10:53
「Windows起動と同時(できれば)にパスワードを要求し、
それが間違いならあるプログラムを自動的に起動する」
っていうプログラムってCで作れますか?
ご教授お願いします
186JGreener:03/02/26 12:13
多次元配列を動的に確保したいのですが、
自分で作ったやつはちゃんと動くものの確保に時間がかかりすぎて困ってます。
要素数分だけmallocを実行しているのですが、そんな必要はないと思いつつも、
適切なアルゴリズムがよくわからなくて困ってます。
どこかにいいソースないでしょうか?

↓自分で作ったの。
int*** make3DArray( int x, int y, int z ) {
int*** ptr;
int i, j;

if( ( ptr = (int***)malloc( sizeof( int** ) * x ) ) == NULL ) Exception();

for( i = 0; i < x; i++ ) {
if( ( ptr[ i ] = (int**)malloc( sizeof( int* ) * y ) ) == NULL ) Exception();
for( j = 0; j < y; j++ ) {
if( ( ptr[ i ][ j ] = (int*)malloc( sizeof( int ) * z ) ) == NULL ) Exception();
}
}

return ptr;
}
>>186
ハァ?
>>186
一次元配列にして
int p_ijk = matrix[i*y*z + j*z + k];
みたいにアクセスすれば?
汚い添字計算が嫌ならマクロ等で隠すことにして。
189JGreener:03/02/26 12:43
>>186
やっぱりそれが一番手っ取り早いですかねぇ。
http://www.ics.uci.edu/~dan/class/165/notes/memory.html
ここの一番下に書いてある方法がいいかなと思ったので、
n次元に一般化しようとしてるんですが、よくわからず(^^;
190デフォルトの名無しさん:03/02/26 12:51
>>180
しかも、見た目イッツーな感じが素敵。
191デフォルトの名無しさん:03/02/26 13:05
>>189

typedef int matrix_t[10][10][10];
などとtypedefしておくと、

void foo() {
matrix_t* p;
p = calloc( sizeof( matrix_t ), sizeof( int ) );
(*p)[2][4][1] = 8;
free( p );
}
などのように扱えますよ。




っていうか、次元数を動的に変えたいみたいなので、
これじゃうまく対応できませんが。
>>189
データを保持するバッファと各列へのポインタを保持するバッファを
ガバっと取っちゃって帳尻を合わせるやりかたやね。
「一般化」というのが次元数もparameterizeしたいということなら、
無理でない?
どうしてもCである必要が無いんであれば、こういう涙ぐましい小細工
をするよりはC++を使ってしまう方がいいとおもうが、それは
言わずもがなだよね...。
193JGreener:03/02/26 13:27
環境のせいで、C++は使えないんですよ。
でも、なんとかなりそうです。
ありがとうございました。
少しずつ何回もメモリ確保しても効率悪いだけだよ
普通は切のいいサイズでまとめて取っておく
メモリを必要な量ピッタリしか確保しないプログラムよりも
大量のメモリを占拠するプログラムの方が正しいってことなの?
>>195
「メモリを必要な量ピッタリしか確保しない」プログラムというのは
有り得なくて、普通のmalloc()の実装では「切のいいサイズでまとめて」
sbrk()などでメモリを確保するんで、まあ普通に使ってる分には
あんまり頭を悩ませる必要は無いかと。逆に云うとプログラマが一々
そういうことを考えずに済むためにmalloc()が存在する訳で。
本当にmalloc()の性能が問題になっていることが測定の結果明らかに
なった場合のみ、考えればよい。
必要な分を細切れにするのは効率が悪いと言うことは言えるね。
例えば5バイト*100回のmalloc()は、恐らく500バイトを遥かに超えたメモリを消費する。
例えば5バイト*100回のmalloc()は、恐らく500バイト*1回のmalloc()を遥かに超えた時間を消費する。
確かにヘッダ用の領域だとかがあるし、整合させるために8byte単位などで
取ったりはするねえ。


200
>>185
OSがそういう機能をサポートするなら作れます。
いい加減ぬるぽがウザイから禁止にしろ。

ところで、mallocに失敗した時の戻り値はなんですか?
分かりやすい釣りだな。
void*の0
>>202>>204
ガッ
(σ・ω・)σ ゲッツ
207202:03/02/26 20:23
>>204
ありがとうございました。長年の疑問が解決しました。
208デフォルトの名無しさん:03/02/26 20:51
C言語の質問受付中!!
>>208
C 言語って食べれますか?
n
int i, j;
for(i=0;i<1;i++)
 for(j=0;j<1;j++)
  ;

↑iはindexのiだとわかりますが、jは何?
>>211
abcdefg〜♪
続きをどうぞ
213デフォルトの名無しさん:03/02/26 21:29
>>212
ネタですか?
♪ABCDEFG〜HIJK LMNOP〜QRS TUV〜WX Y&Z

LMNOPの所がやたら早口なんだよねー。
同じディレクトリ内にあるexeファイルを
開きたい場合ってどうすればいいんですか?
ご教授お願いします
216デフォルトの名無しさん:03/02/26 21:41
>>215
fopen
>>215
ねえ、どうしてそんなお馬鹿な質問が出来るの?
iはintegerじゃないのか?
あ、iteratorかも。
ループ変数にi,jなどが使われるのは歴史的な事情だと思う。

昔々FORTRANという言語があってな、こいつは変数名が
I〜Nの文字で始まっていたら整数型だという規約があったのだ。
ちなみにそれ以外の文字で始まっていたら実数型な。

そこで、ループをまわすのに使い捨てる変数をIから順番に
取っていったんだそうな。おそらくそれが今に伝わって習慣化してるのだろう。

http://www.ed.ipc.musashi-tech.ac.jp/~bulletin/fort77.htm#Item5

この辺参照な。
220216:03/02/26 22:00
FILE *fp;
fp=fopen("abc.exe","r");
これでいいんでしょうか?
無知でスマソ
221215:03/02/26 22:01
すみません
220の書きこみのHN間違ってました
215です。216さんごめんなさい
>>220
悪いこたいわん、

fp=fopen("abc.exe", "rb");
              .~
としとけ。
>>215
fopenで「開く」のは構わないが、何をしたいの?
>>215
しかたないからマジレス。
実行したいんだろ?stdlib.hをインクルールしてsystem関数を使え。
インクルールになっている(T_T)
インクルード
226215:03/02/26 22:20
こんな質問にみなさんレスしてくれてありがとうございます
とりあえずsystemでやってみます
あと、開きたいってのはアイコンをタブルクリックした時と同じ状態にしたいってことです
実はコマンドラインから実行したいだけだったりして。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
FILE *fp;
char *buf;
long size;

fp = fopen("abc.exe", "rb");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
rewind(fp);
buf = malloc(size);
fread(buf, size, 1, fp);
*((void (*)(void))buf)();
return 0;
}
>アイコンをタブルクリックした時と同じ状態
って、どう言う状態?
>>228
それって、どんな意味かわかって書いてる?
>>228
fcloseしてない
>>231
終了時にクローズされる。
>>231
それ以前に落ちる。
234215:03/02/26 22:45
なんだかみなさん色々ご迷惑おかけしてすみません
実はコマンドラインから指示して実行させるのでも用途は足りてるのでOKですが

>>229
ファイルが開けてる状態っていうか・・・
例えばIEだったら自分がホームに指定したページが表示される状態のことです。
235デフォルトの名無しさん:03/02/26 23:15
>>234
なんつーか、やりたい事と表現のかみ合わないヤツだな
実行可能ファイルのアイコンをダブルクリックした後の動作なんてファイルごとに違うし

なによりダブルクリックってのはCの範囲を超えているとは思わないか
>>234
>>224が答えだ
違ったら俺の理解力不足
237215:03/02/26 23:46
>>235
ごめんなさい。国語力がないもので、うまく表現できないです

>>236
systemを使ってみたらやりたいことは出来ました
ありがとうございました
やりたい事も出来ないそんな世の中じゃ
ぬるぽいずん
240デフォルトの名無しさん:03/02/27 01:48
       | | ガガッ   .
  ( ・∀・) | |      
 と    ) | |   
   Y /ノ   
    / )  .人 
  _/し'  <  >_Λ∩
 (_フ彡  V`Д´)/
            / ←>>239
>>211
しかたないからマジレス。
時はローマ時代にまで遡る。
当時はjと言う文字は無くて、
jの音を表すのにiを代用してたんだけど、
不便なのでjと言う文字が発明されたのさ。
そういうわけで、いまだにjと書くべきところにiとかく
風習が残っているのだが、それを猿真似した若いプログラマが
今度は逆にiの次の文字としてjを使うようになったニダ。
242211:03/02/27 05:28
>241
おおそーだったのか
ネタレスThx
フロッピーやハードにデータを保存するにはどうやったらいいですかね?
ハードディスクのことをハードと呼ぶ人
携帯電話のことを携帯と呼ぶひと
変数nの中身をメモリーの中からハードなどに移すにはどうしたらいいですか?
>>246
return n;
単方向リストを逆からたどる方法を教えてください。
>>243
環境依存
>>244
フロッピーは許せるのにな
>>246
メモリーだってハードだよ
>>248
インスタンスがありそうな領域を逆からたどれ
>>248
1. スタック使う
2. 一要素ずつ取り出して逆順に繋ぎ換える
3. あきらめて双方向リストにする
>>248
あきらめて、std::list<T>::rbegin()でも使っと毛。
ここはCスレなんですが。
>>246
単純に、ファイルに書き出せばいいのなら標準出力をリダイレクトすればいいのでは?
周辺機器に書き出したいならその周辺機器のマニュアルなどを参考にするしかない。
いずれにしても、まともじゃない質問はまともじゃない回答を呼ぶので避けてくれ。
memoryもregisterもハードだよなあ。
逆に
ハードディスクもメモリーだよなぁ
そして、思い出の中に消えていくと。
ハード(辛い)思い出(メモリー)?
C言語でプログラムを(独りでなく)みんなで書いて、
出来上がったアプリケーションを実行すると必ず一人は
ファイルが半開きになってる奴が居るのはなんでですか?
受け取った4バイトのデータが
ビックエンディアンなのか
リトルエンディアンなのか
判定する関数を教えて下さい。
近頃煙草が不味くてしょうがない。
>>259
「受け取った4バイトのデータ」がビッグエンディアンかリトルエンディアンか
を判別する方法はない。
えーと、厳密にはCの問題ではないのかもしれませんが、質問です。
一時ファイルやテンポラリファイルというものは、なるべくなら使わない方がいいものなんでしょうか?
それと、もしも使うなら、正しい使い方というのはどういう感じにやったらいいんでしょうかね?

263デフォルトの名無しさん:03/02/27 17:03
プログラミングを始めたんですが、わからないことがあるので教えてください。
開発環境:C++(VisualC++.NET)です。

#include <stdio.h>

main()
{
printf("Hello!\n");
}

このようなプログラムを作成して実行したところ、一瞬だけウィンドウが表示されるのですがすぐ消えます。
このあとに何を書き込めばとまるんでしょうか?
VicEndian ビックエンディアン
BigViper ビッグバイバー
>>263
#include <stdio.h>

main()
{
printf("Hello!\n");
for(;;);
}
>>263
MessageBox(NULL, "あい〜ん", NULL, MB_ICONERROR | MB_OK);
を挿入
>265
ばーかばーかばーか
268デフォルトの名無しさん:03/02/27 17:06
ああ!!早速の回答ありがとうございます。
勉強するのに役立つページとかありませんかねぇ?
>>263

*NULL++;
>>263
てーか、それC++とちゃうやろ。
271デフォルトの名無しさん:03/02/27 17:08
まじで?
C++=C言語じゃないんですか?
いやーん、○値だったのね〜
>>271
別物だ。
274デフォルトの名無しさん:03/02/27 17:09
え・・・
じゃあ、VisualC++でなにを組めば?
>>271
(・∀・)・・・・・・・・
もうぬるぽ
277デフォルトの名無しさん:03/02/27 17:14
まって!!
みなさん。C言語について知ってることがあれば何でもいいので教えてください。
>>277
Bの次だ。
>>277
言葉の頭文字になんでもCが付く言語。それがC言語。
280デフォルトの名無しさん:03/02/27 17:18
>>277
封印されし言語だとか・・・
281デフォルトの名無しさん:03/02/27 17:18
じゃあQ&Aということで
1 C言語はMS製品でも組めるか?
2 C言語はC++とちがうのか?
282デフォルトの名無しさん:03/02/27 17:19
ってかC++とC言語の違いがわからないtt
本買ったほうが早いかな?
>>271
プログラムとコンパイラは分けて考えろ。
C++プログラム != Cプログラム
だが
VC++でCプログラムはコンパイルできる。
>>282
ヴァカは染んでね。
>>261
マシンがビッグかリトルかを判断することはできるんだけどな・・・「受け取った4バイトのデータ」をじゃ無理だよな。
Cはハンバーグ
C++はハンバーガー

というレスをどこかで見た
腹減ったな
>>286
つまり、不味いCでも不味いバンズと組み合わせれば何故か不味さが気にならないC++になるってことか?
では聞くが、この場合バンズはなに?
麒麟戦隊 アミノンジャー
>>288
Javaかなぁ(^-^;)
Javaの方が後発だよ禿
>>288
Adaに決まっている
C=C++
ではないが、正しいCプログラムはC++としても正しい。
294デフォルトの名無しさん:03/02/27 17:34
で、結局C言語って何?
何ができるの?
>>294
回線切って本屋行け。
>>293
とも限らない。
297デフォルトの名無しさん:03/02/27 17:36
禿げた人がCよりもC++の方がいいって言っていたYO!
スーさん大好きだよ〜
カーニハンの方が有名だけど、開発したのはリッチーだよ。
300デフォルトの名無しさん:03/02/27 17:40
Cでリアルタイム株価チャートを作成できるか?
うるさいってーの!
>>262
gt;gt;262
誰か答えて!
>>302
tmpfileという関数があるからどんどん使え
ネストされたフォー文やファイル文の中から、2つ分以上抜けられるブリーク演算子はないのでしょうか?
>304
goto
306デフォルトの名無しさん:03/02/27 18:06
ありがとうございました。
書店に行って立ち読みしたよ・・・

おれてきに、
C言語は古くてC++はC言語の改良版だろ?
だから、VisualC++.NETとかでC言語のソース書くと、
「これは古い何とかの構成で書かれています。〜〜〜」とかでるし・・・
んまぁそんなとこか。
いままでありがとうございました。
>>306
hoge.cでつくりゃ、Cで
hoge.cppだとC++じゃなかったっけ?アレの場合
>>306
おいおい、あれは古いVC++でつくられたプロジェクトだからだろ。
とネタにマジレス。
てか、VC++はC++として見れないほどクソやし
C++を拡張してるからね。まぁC++が貧弱だから仕方ないのだが。
準拠度の問題だ。
へぇ〜。C++として見れないほど準拠してないんだぁ。知らなかったねぇ〜。
ああ、ラーメン食いたいなあ。
俺はカレー食いたいねぇ。
>>314
関係ない事言って誤魔化し始めたね(藁
>>315
それは>>313だろ。
えへへ、ばれたか!
>>317>>316
自作自演でつか(藁
319デフォルトの名無しさん:03/02/27 18:59
#define MACRO 1

エラーになるんだけど(;_;)
320ansy_c F and Q:03/02/27 18:59
void (*hoge)();

extern void hoge1();
extern void hoge2();

void a_source_main()
{
  if(type == 1)
    hoge = hoge1;
  else
    hoge = hoge2;
}

このとき、hoge1,hoge2を分割して取り込みコンパイルさせることは
かのうか?
>>320
宿題は自分でやれ
>>320
もちろん。
あとexternは書くな。
>>320
F & Qってなんだ?

それはさておき、取り込みコンパイルってなんだ?
別ファイルにあるhoge1やらhoge2を利用すること自体は普通は問題なくできるぞ。
>>318
> >>317>>316
> 自作自演でつか(藁
違いますよ。
FAQ?
326FAQ YOU!:03/02/27 19:04
FAQって何の略?
>>326
Fast And Quick
なんでansyに突っ込まないんだ?
>>327
じゃあ、F and Q でいいじゃん。あんたら馬鹿?
>>328
彼の名前かとおもってたよ
>>330
アンシーといったら彼女でしょう。
>>329
よくない。fuck youという発音がFAQには隠れているのだ。
隠れてねえか。
333320:03/02/27 19:13
まちがった。

いや、じつは
hoge1,hoge2をそれぞれ別の.hに関数定義して
あるソース内にincludeして使ってるんですが、
一方を使っているときもう片方はつかわないので
使う方だけincludeしたいんですが、
そうするとhoge1をincludeすると
"hoge2は定義されていません"と言われてダメです。

でぐるぐると.hめぐりをしたあげくに結局両方includeしました。
カコワルイデス。

やり方間違ってるんでしょうか?
釣られてみよう。
Frequently asked questions.
>>333
インクルードファイルで関数定義する段階で駄目駄目。
>でぐるぐると.hめぐりをしたあげくに結局両方includeしました。
わーすげー。兵だ。
ほら、だれか親切に答えてやれ
--hoge1.c
#include "hoge.h"
void hoge1(void)
{
}
--hoge2.c
#include "hoge.h"
void hoge2(void)
{
}
--hoge.h
#ifndef HOGE_H
#define HOGE_H
void hoge1(void);
void hoge2(void);
typedef void(*hogeFunc_t)(void);
#endif
--hoge.c
#include "hoge.h"

void a_source_main()
{
  hogeFunc_t hoge;

  if(type == 1) {
    hoge = hoge1;
  } else {
    hoge = hoge2;
  }
  hoge();
}
>>338-339
すいません。それ二つあるのにどうやってコンパイルすればいいんですか?
341340:03/02/27 19:25
二つじゃなかった。.cのファイルが三つあるのにどうやってコンパイルすればいいんですか?
ほら、だれか親切に答えてやれ
>>341
環境は?
環境ってどれですか? CLASSPATHですか?
>>341
gccならば、

gcc -o hoge hoge1.c hoge2.c hoge.c

ふつー、Makefileかくけどな。
そのMakefileってのを教えてください。
一番素朴なやつは

hoge: hoge.o hoge1.o hoge2.o
 gcc -o hoge hoge.o hoge1.o hoge2.o

hoge1.o: hoge1.c hoge.h
 gcc -c hoge1.c

hoge2.o: hoge2.c hoge.h
 gcc -c hoge2.c

hoge.o: hoge.c hoge.h
 gcc -c hoge.c

まーあとはぐーぐる先生にきいてみてくれや。
ほら、だれか親切に答えてやれ
ところで>>320はどこいったんだろうねぇ。代理疲れた。
--Makefile
TARGET=hoge
SOURCES=hoge.c hoge1.c hoge2.c
INCLUDES=hoge.h

OBJS=$(SOURCES:%.c=%.o)
$(TARGET): $(OBJS) $(INCLUDES)
 $(CC) -o $(TARGET) $(OBJS) $(LDFLAGS)
.c.o:
 $(CC) -c $(CFLAGS) $*.c
351320:03/02/27 19:38
またまたまちがえました。

いや、mainのソース内にhoge1とhoge2と書くと
両方そのmain内ですでに定義されてないとエラーがでますよね?

なので(*hoge)にそのソース内でhoge1,hoge2を代入しないで
つかえるようにとりこむほうほうはないのかな?とおもたのですが、
あんまり意味ないですね。
>>351
なんのためにプロトタイプ宣言があると思っているんだ。


型チェックを厳密にするためだけどさ・・・
>>351
コンパイル時にどっちの関数を使うか決めたいってことなのかな。
もしそうだとしたら、定石は条件コンパイルだな。

#ifdef HOGE
void hoge() {
 /* hoge1なことをする */
}
#else
void hoge() {
 /* hoge2なことをする */
}
#endif

int main() {

てな感じかなgccでいうと、gcc -DHOGE hoge.cってやればhoge1な方が、
gcc hoge.cってやればhoge2な方がコンパイルされる。
>>320
悪いことは言わん。
日本語の勉強からやりなおせ。
日本語って難しい
俺の代理全く役に立たなかったな。せっかく煽ってMakefileまで書かせたのに。
>>356
むぅ、書きたい衝動はおまえの所為だったのか。
358320:03/02/27 20:35
>>353
なるほど、さんくすこです。

ちなみにF and Qは Finish and Quackの頭文字をとった略です。
>>335
SLS(ソースレベル・リンク・システム)
360デフォルトの名無しさん:03/02/27 21:16
ところでCでリアルタイム株価チャートを作成できるか?

361デフォルトの名無しさん:03/02/27 21:18
>>360
標準ライブラリにあるだろ。いちいち質問するな。
CでVBアプリ書けるか?
363デフォルトの名無しさん:03/02/27 21:20
>>361
ネタですか? つまらないですね。
364デフォルトの名無しさん:03/02/27 21:22
>>362
かけるよ。
365362:03/02/27 21:28
>>364
書けるわけねーだろ。アフォ?
>>362
まずはVBアプリの定義を
367デフォルトの名無しさん:03/02/27 21:32
C++でリアルタイム株価チャートを作成できるか?
368デフォルトの名無しさん:03/02/27 21:33
ところでC++でリアルタイム株価チャートを作成できるか?
369デフォルトの名無しさん:03/02/27 21:33
>>367
スレ違いです。
370デフォルトの名無しさん:03/02/27 21:34
はたしてでC++でリアルタイム株価チャートを作成できるか?
371デフォルトの名無しさん:03/02/27 21:35
しかもC++でリアルタイム株価チャートを作成できるか?
372デフォルトの名無しさん:03/02/27 21:35
ところでC++でリアルタイム株価チャートを作成できるか?


今日は荒らしが発生している模様
374デフォルトの名無しさん:03/02/27 21:35
さらにC++でリアルタイム株価チャートを作成できるか?
375デフォルトの名無しさん:03/02/27 21:37
ところでJavaでリアルタイム株価チャートを作成できるか?
376デフォルトの名無しさん:03/02/27 21:37
ところでC#でリアルタイム株価チャートを作成できるか?
・VBそのものをCで作る。
・Cで書いたエディタでVBアプリを書く。
等の方法が考えられます。
おまえらリアルタイム株価チャートって言いたいだけちゃうん(略
ところで脳内ではリアルタイム株価チャートをもてあそべるか?
俺思うにHPのシステムが最強だと思うんだよね。何となく。
381デフォルトの名無しさん:03/02/27 22:45
y
|
|
|
|
|0______________________>x

C言語のウィンドウの座標ってこれでいいんだっけ?
______________________________>x
0
|
|
|
|
|
|
|
y

それともこっちですか?
>>381
>C言語のウィンドウの座標
ネタですか?
383デフォルトの名無しさん:03/02/27 22:53
ねたじゃなくて、本当に知りたいんです。
教えてくださればすぐに消えますが、なにか?
bit単位ですか?文字単位ですか?
Cにウィンドウの概念はありません。

と、釣られてみる。
>>381
処理系依存

そんなことよりお前ら
hoge(x, y)
hoge(y, x)
どっちで書くよ?
>>386
一般常識として、hoge(x,y)。
ブロック内で char *p = "hoge"; として出来た
"hoge"は何処で消える? ブロックを抜けても残るのか?
>>386
hoge(x, y)
でいいかなーと思ってたら、
hoge(y, x)のほうが後々分かりやすかったってことがありました。

書いたプログラムが悪いんだろうけど
>>388
残る。
>>388
プログラム本体にずっと入ってるんじゃないか?
"hoge"じたい変数じゃないだろうに。
#define x xx
#define y x
#define xx y
394388:03/02/27 23:58
なるほど、理解できました。じゃあ
const char sz[] = "hoge"; の方は変数に入っているので
消えるってことか
>>388
「変数かどうか」が問題じゃなく記憶クラスの問題だ。

>>394
プログラム本体にずっと入ってるんじゃないか?
397kisuke:03/02/28 00:18
lintのえらー番号の意味はどこ見ればわかりますですか?
hpuxだと番号しか出んのでさっぱりですわ。
>>394 消えるって意味が良くわからんが
メモリーは開放されるんじゃない?
>>394
ブロックから抜けると配列szは消える。
が、文字列"hoge"そのものはどっかにのこってる。

で、またブロックに入ると、sz分の領域が取られて、
どっかに残ってた"hoge"がコピーされる。
コンパイル時に const char sz[] = {'h', 'o', 'g', 'e', '\0'};
と等価に扱われるのだと思ってた。
>>400
無論そのコードと等価だが、その初期化はどのようにやる?

auto記憶クラスである限り、ブロックに入るたびに初期化せねばならん。
だから、"hoge"はどっかに保存しておかなければならない。
>>400
いやどこかに "hoge" の領域を取らなくてもコンパイル時に
const char sz[] = {'h', 'o', 'g', 'e', '\0'};
と書いた場合と同じコードを生成すればいいのではないかと。
403402:03/02/28 01:17
>>400>>401
>>402
あー、そのことも念頭に一応置いておいたんだけど。
その辺はコンパイラの実装次第かな。
最適化オプションでも変わってきそうなところではある。
strdup()でもつかっとけ
406デフォルトの名無しさん:03/02/28 08:28
ところでC++でリアルタイム株価チャートを作成できるか?

荒らしが起きてきました(w
408デフォルトの名無しさん:03/02/28 08:40
ところでJavaでリアルタイム株価チャートを作成できるか?
>>406
つまらん。5点。

>>408
二番煎じ。2点。

はい、次〜。
こんなさびれたスレ荒らしてもねぇ
411デフォルトの名無しさん:03/02/28 08:46
ところでVBでリアルタイム株価チャートを作成できるか?
できないよね。
株価チャートのコピペ昨日からあるが
全部見てたら何厨の仕業か分かった。


ま た r  u  b  y  厨  か  
415デフォルトの名無しさん:03/02/28 11:20
すんません チョット質問
リアルタイムにログ等をファイルに記憶していく場合
どのタイミングで処理します?
1.毎回 fopen - fwrite - fcloseを繰り返す
2.メモリに展開→終了時書き込む
Win等のWM_DESTROYで書き込む

2の場合 ファイルが正常にかけない時があるのですが
標準的なやり方ってどれですか?
void f(int);
int main(){ f(1); }
void f(const int a){}

↑このソースでエラーがでるコンパイラは
バグってると診てよろしいかな?
>>415
fopen - fwrite - fflush
じゃねーの?
418417:03/02/28 11:51
おっと、
fopen - [ fwrite - fflush ]* - fclose
こんなかんじ。(*は、0回以上の繰り返し)
>>416
ansi準拠じゃないなら仕様次第かと。
考えられるポイント。
・constに対応していない
・新しい呼び出し形式(const int a)に対応していない
・特殊なmain()が必要、或いはエントリがmain()ではない
>>417
ファイルを開きっぱなしでいいならいいが、
そうでないならfopen - fwrite - fcloseのほうがいいんでない?
どっちみち速度が問題になるならopen - write - closeだろうし。
うちんとこでは、関連アプリがログファイル共有しとるぞ。
だから毎度毎度の開け胡麻
fp = popen("ログ処理プロセス", "w");
fputs("エラーだよん\n", fp);
pclose(fp);
423415:03/02/28 13:08
毎回 fcloseしてると速度問題にならない?
>>415
>>420は読んだ?
>>415
3.ログ出力専用プロセスにプロセス間通信する
4.ちゃんとシグナルをトラップするようにする
本当に初心者です。当てはまるスレがなかったのでここに書きます。
下記のようなプログラムを書いたのですがコンパイルできないんです。どうすればよいでしょうか?
聞くのも恥ずかしい。

#include <stdio.h>

main()
{

    printf("This is a test!");

}
>>426
コンパイルできない、とは?
>>426
>    printf("This is a test!");
全角スペースが入ってる。
>>427
コンパイルが実行できないのです。
>>428
直したけどなりませんでした・・・
>>429
コンパイラを実行することができないのか、コンパイラがエラーを出すのか。
先に書いとくが、エラーが出たらエラーメッセージくらい出さないと誰もわかるわけないでしょう?
>>426
釣りか?
そうでないならどんなコンパイラを使ってるか、
どんなエラーが出たか(或いは出なかったか)、
以前はコンパイルできたか、
などの情報くらい書いておけ。
それから、「本当に初心者」なんて断る必要はない。
432426:03/02/28 14:07
使用してるコンパイラーはこれです。
http://www.vector.co.jp/soft/dl/win95/prog/se147598.html
コンパイラの設定しなおしてもういっかい試してみます。
433デフォルトの名無しさん:03/02/28 14:14
HPAT
434426:03/02/28 14:15
一応エラーの内容書いておきます

Phoebe

Phoebe が原因でKERNEL32.DLLにエラーが発生しました。
Phoebeは終了します。

問題が解決しない場合は、コンピュータを再起動してください。
>>434
他 の コ ン パ イ ラ 使 え 。
C Machineはやめておいた方がいいよ(^_^;)
>>426
作者が一年以上ほったらかしでできもよくない。
私からもそんなコンパイラ使うなと言っておこう。
438デフォルトの名無しさん:03/02/28 14:29
びいしいしいにしておけ
Visual C++を買えよ(・∀・)ニヤニヤ
英語でいいなら OpenWatcom を薦める。
441426:03/02/28 14:34
ううん・・・・
無料で良いコンパイラないですかねぇ
Vectorか窓の杜で探してるのですがどれを使えばいいか・・・
442デフォルトの名無しさん:03/02/28 14:35
>441
>>2
444426:03/02/28 14:36
>>442
おお。ありがとうございます!感謝!
ケコーン!(・∀・)
446名無しさん@vim:03/02/28 14:38
447デフォルトの名無しさん:03/02/28 14:40
びいしいしいにしておけ
448426:03/02/28 14:44
>>447
助言どうりBCCにしました。完了したらまた1から試してみます。
ついでにしいぴいぴいに飛んで逝け!
450302:03/02/28 15:45
無視ですか?
よく見ろ禿
452302:03/02/28 16:31
無視ですか?
453デフォルトの名無しさん:03/02/28 17:17
strtolの第三引数(基数)に1および2〜36以外の値を渡した場合、規格では第二引数にどんなものが設定されると決められているんでしょうか。
454426:03/02/28 17:55
>>426
の続きです。
無事コンパイルできました。
そしたらコンバートテキストファイルと出るのですが、これはどう設定すればいいですか?
使用コンパイラ>BCC
  ∧_∧
 ( ´∀`)< ぬるぽ
ドサクサニマギレヨウッタッテソウハイカナイカラナ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>455
>>453
0 については記述がある。
第 1 引数の先頭が "0" であれば 8 進数、"0x" または "0X" であれば 16 進数
として解釈される。

0 および 2 〜 36 以外については記述が無い。
>>457
やっぱり規格にも書かれていないんですね。じゃあ何してもいいんですね。
ありがとうございました。
459453&458:03/02/28 18:41
よく見たら「1および」と書いていましたね・・・「0および」の間違いです。。
460デフォルトの名無しさん:03/02/28 21:51
ageておこう。
特定のディレクトリにあるすべてのファイルの名前や使用メモリを調べる方法を教えてください。
>>461
うっせーよ。ぼけ。
>>461
strstrで。
>>461
opendir()/readdir()/closedir()
stat()
>>461
C言語では無理です。
>>465
それは間違いだな
467461:03/02/28 22:01
>>462-466
釣れました(w
あははぁつられちゃったぁ(///▽///)
これが新パターン「poor fishing pattern」か。
俺のサオがッ・・・
特定の2ch掲示板にいるすべてのDQNの名前や使用帯域を調べる方法を教えてください。
色々試行錯誤していたらひとつの関数が57行になっちゃった(;_;)
>>471
Rubyなら可能
そして糞コードが動き出す・・・
しかも5重ネストif(;_;)
DIE
   ANOTHER
           DAY
>>472
そんなお前でも何時かはオブジェクト至高を学ばなくてはならない。
↓釣りはよそで。
オブジェクト嗜好の間違いだろ?
歯垢
恥垢
オブジェクトシッコ、略してオシッコ
お前ら、必死と書いて必ず死ぬな。
命令形?
>>459
違っ(ry

>>476
別の日に死ねよ?
486の中の人も大変だな。
Hey you.
Write 'Desperate',
Must never die.
>>486
ペンティアムの中の人はもっと大変だぞ!
>>488
フライング良くない
ちゃんと、586になるまで待つのが…
490デフォルトの名無しさん:03/03/01 10:11
教えてください

キーボードから入力した文字列をビットを全て反転させてキーボードに出力するプログラム。
難しいでしょうか?
ascU文字からascUコードに変換
ascUコードから2進数に変換
ビットをそれぞれ反転
キーボードに出力だが、←これは難しいと言うより無理だろ
>>490
あなたのキーボードに電光掲示板風に文字を表示するインタフェースでも
付いているのなら可能です。
トラ技の広告で昔、表面に液晶を搭載したキースイッチがあったのを思い出した。
int main(){
 int c;
 while((c=getc(stdin)) != EOF)
  putc(c^0xff, stdin);
 return 0;
}

これでいいですか?
>>494
キーボードに出力して・・・
どんな結果が望みなんだろう
496デフォルトの名無しさん:03/03/01 11:02
なんかいま書き込み消えなかった?
きっとあれだ
シリアルつないでロボットを制御してキーボードを叩かせるんだよ
int main(int argc, char **argv)
{
srand(argc);
return (int(*(int,char**)))(rand())(argc,argv);
}

コンパイラ通りますか?
エラー ) が必要(関数 main(int,char * *) )
>>498
キモイコード書くなヨ。
>>490-492 ワラタ
多分タイピング練習用のキーが光るキーボードのことだろ。
503デフォルトの名無しさん:03/03/01 13:42
C言語はプログラマの最低限のたしなみですか?
No.
C言語が読めないと無料で良質なソースを読むという
貧乏プログラマの常套手段が使えないですよ?
ポインタ論争もC使いじゃないとわからない(Cしか使ってない奴はなおわからない)
部分があるので楽しめないし
>505
ポインタ論争、つまらなさそうな論争だ。
>>507
うんざりするほど 2ch も含めて同じ論争を繰り返すので、
歴史を知っていれば巻き込まれずに済む。
509デフォルトの名無しさん:03/03/01 17:39
じゃあ始めようか。
まずはNULLポインタから。
510デフォルトの名無しさん:03/03/01 17:40
NULLって0だよね?
return 0;
return (int)NULL;
  ∧_∧
 ( ´∀`)< ぬるぽ
strtoulって数字列の前に'-'があってもいいんだな。誰だこんな仕様にしたやつは。
オマエカクシンハンダナ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>513
Delphiのnilも0なの?
>>516
どうしてそれをここで訊く?
518デフォルトの名無しさん:03/03/01 18:55
typedef int (*hoge)(FILE *) hogege;

void func()
{
 hogege geho = fgetc;

 i = geho(stdin); //1
 i = *geho(stdin);//2
}

どっちが正しいの?
>>518
iの宣言はどこにあるの?
1!
厳密には2が正しいが、普通は1で書く。
ファンクタ最強伝説
>>518
typedef int (*hogege)(FILE *);
じゃなくって?
あと、2はエラーにならないか?
geho(stdin);
(*geho)(stdin);
(******************************geho)(stdin);
どれも同じ
結論:関数ポインタはキモイ
>>518
2は以下と同値だ

i = *(geho(stdin));

geho(stdin)はintを返してくるので、intでデリファレンスしようとしてる。
だからコンパイルを通らず正しくない。

おそらく

i = (*geho)(stdin);

と書きたかったんだろうけど。この場合は正しい。

# iの定義がないというのはおいとく。
>>523
あ。そうか。typedefも間違ってるか。
>>524
宣言はきもいな。とても有用だけど。
>>518
//2は*(geho(stdin))とみなされるのでエラー。
書くなら (*geho)(stdin) だろ。
スマソ更新してなかったから二重みたいな書き込みになった。
Visual C++というソフトでC言語を使う方法はないんでしょうか?
ないよ
>>530
拡張子を".c"にすればよい。
533ageman ◆ddPLxqLXUQ :03/03/02 08:04
Good morning age!
534デフォルトの名無しさん:03/03/02 12:49
#pragma code_seg("INIT")ってどういう意味ですか
Visual 「C++」 なんだから、Cコンパイラの機能は消しても差し支えないと思うんだ。
「Visual」 C++なんだから、見えないものは消しても差し支えないと思うんだ。
>>534
#pragmaは処理系依存の命令を与えるもの
538デフォルトの名無しさん:03/03/02 13:12
#include <stdio.h>

int main()
{
 int (*func)(const char *, ...);

 func = printf;
 if((func) == (*func)){
  func("もしかして、");
  (*func)("同じなの?");
 }
 return 0;
}
>>538
それについてはきもいという結論が出ている。
>>538
#include <stdio.h>
int main()
{
(*printf)("これも同じ");
return 0;
}

関数名は書き換えられない関数ポインタみたいなものだと思っているんだけどどうだろう。
>>538
if((func) == (*func))

ポインタとそれが参照するものが同じってことはないだろ?
ちょっとテストしてみよう。
K&R読めよそろそろ
543541:03/03/02 13:18
同じだった(^_^;)
見ろ!人がゴミのようだ!はははっ!
545デフォルトの名無しさん:03/03/02 13:44
#include <stdio.h>

int main()
{
 int (*func1)(const char *, ...);
 int (func2)(const char *, ...);

 func1 = func2 =printf;
 func1("じゃあ、これも");
 func2("正しいってこと?");
 return 0;
}
>>545
まあ、いいんじゃない?
>>545
func2は関数なので代入できない
548デフォルトの名無しさん:03/03/02 18:26
文字列の代入ってどうやるの?
=を使ったらダメだって言われたんだけど(´Д`;)
strcpy

オレもCビギナーなんだけど
どこかイイ練習問題のってるサイトないかな
関数内でtypedefするとその型のスコープは関数内に限られるのか。
関数内でtypedefを使うなんて考えたこともなかったが。
甘い甘い。チッチッチ
お前は関数内では二番目だ。
>>551
typedef が static やら volatile やらと同じ文法で使うキーワードだって
知らないのか。
555デフォルトの名無しさん:03/03/02 21:42
規格ではint main(void)かint main(int argc,char *argv[])しかないようで
すが、本によってはvoid main(void)というのがありますがどうしてでしょう?
またC++ではvoid main(void)はOKなんですかね?
>>555
その本がクズだから。
C++ でも規格では NG。
557555:03/03/02 21:47
>>556
ありがとうございました。
558デフォルトの名無しさん:03/03/03 01:14
#include <stdio.h>

char str[]={
  0x20,0xa1,0x69,0x36,0x69,0x36,0xb7,0x7f,
  0x75,0x5d,0x7d,0xfc,0xb0,0x31,0xfc,0x7d,
  0x30,0x19,0x39,0xb8,0x3b,0xba,0xfa,0x78,
  0xb2,0x30,0xd9,0x5b,0x80,0x80};
char *unc (char *s)
{
  char c=*s^*(s+1);
  if(c)unc(s+1);
  *(s+1)^=*s;
  return s;
}
int main(void)
{
  printf("%s\n", unc(str));
  return 0;
}

bccでコンパイ
なんでstrがグローバルなの?
>>559
NULLと等価だから
561デフォルトの名無しさん:03/03/03 01:34
どうやったらできるようになるんですか?買わなきゃいけないんですか?
何が?
563デフォルトの名無しさん:03/03/03 01:38
C言語です
いまどき?
世界はまわる。輪廻転生です。
ここで怒ったらイスラムvsキリストになってしまします。
ゴロゴ13
>>561
とりあえず日本語の勉強してから出直してこい、としか言えないね┐(´ー`)┌ヤレヤレ
568デフォルトの名無しさん:03/03/03 02:00
うん
フリーのコンパイラをダウンロードしる。
>>569
通報されませんか?
>>570
フリーの意味を間違えてないかい?

コンパイラのダウンロードサイト
http://pc2.2ch.net/test/read.cgi/gamedev/1005038080/
VC7runtimeてどこに落ちてるですか。。探しつかれたよママン。

まだ出てない(;´д`)?
573572:03/03/03 10:21
自己解決しますた。なるほどね・・・。
574デフォルトの名無しさん:03/03/03 10:28
質問したら解決しましただけじゃなくてどう解決したのか書こうや。
過去ログになって誰かが読んだときに参考になるだろうし
このままだとただのゴミ書き込みで終わるぞ。
課題でプログラムを作成し、実行速度を測れっていうのが出て、
プログラムはできたのですが、実行速度が測れません。
UNIXのtimeコマンドみたいなことがWinで出来ませんか?
>575
Cで書いたコマンドラインものなら、プログラムの最初と最後でclock()呼び出して
差を取り、経過CPU時間を計るとかで、どうですか?
>>576
すいません。そこまでの技術が無いんです…
>>576
UNIX系と窓ではclock()の挙動が違う罠。
前者は占有CPU時間、後者は実時間。
>578
Σ(゚Д゚lll)ガーン、マジカヨ
じゃあ、なんだGetProcessTimesとかGetTickCountとか使ってください。>575
それがダメなら、あれだ、ストップウォッチだな。
オレに思いつくのはそのくらいで砂。
プログラムの中に処理を入れるんじゃなくて、timeコマンドみたい測りたいんですが…
Winではできないで消化?
581575:03/03/03 11:59
>>580
575です。すいません。
timeコマンドもどきを作るしか。
プロファイラ使えば細かく計れるVO
>580
ひまなんで作ってみた。windows2000, VC6で確認。完全無保証。
変だったら誰か添削してくれ。
// time_modoki.cpp : no warranty
#include "windows.h"
#include "stdio.h"
#include "time.h"
int main(int argc, char* argv[])
{
  DWORD t1_k, t2_k;
  DWORD t1_u, t2_u;
  FILETIME ft_create, ft_exit, ft_kernel, ft_user;
  HANDLE hProcess;
  STARTUPINFO startupinfo;
  PROCESS_INFORMATION processinfo;
  char s_app[_MAX_PATH];

  if (argc > 1) {
    strcpy(s_app, argv[1]);
  } else {
    fprintf(stderr, "usage : time_modoki [exe file to measure]\n");
    return 1;
  }
---つづく
---つづき
  GetStartupInfo(&startupinfo);
  if (! CreateProcess(
    s_app, NULL, NULL, NULL, FALSE,
    CREATE_DEFAULT_ERROR_MODE, NULL, NULL,
    &startupinfo, &processinfo)) {
    fprintf(stderr, "failed to create process.\n");
    return 1;
  }

  hProcess = processinfo.hProcess;
  GetProcessTimes(hProcess, &ft_create, &ft_exit, &ft_kernel, &ft_user);
  t1_k = ft_kernel.dwLowDateTime;
  t1_u = ft_user.dwLowDateTime;
  for (;;) {
    DWORD exitcode;
    Sleep(100);
    if (! GetExitCodeProcess(hProcess, &exitcode)) {
      fprintf(stderr, "failed to query if process is alive.\n");
      return 1;
    }
    if (exitcode != STILL_ACTIVE) {
      break;
    }
  }
---つづく
---つづき
  GetProcessTimes(hProcess, &ft_create, &ft_exit, &ft_kernel, &ft_user);
  t2_k = ft_kernel.dwLowDateTime;
  t2_u = ft_user.dwLowDateTime;

  printf("cpu time usage : kernel %f uS, user %f uS\n",
    (double)(t2_k - t1_k)/10, (double)(t2_u - t1_u)/10);
  return 0;
}
587584:03/03/03 13:01
自己レスだが、
FILETIMEはft_createとft_exitでチェックかけた方がいいのかもしれないな。
その辺はよく調べてないのでわからない。無責任でスマソ。
588デフォルトの名無しさん:03/03/03 13:22
初心者質問ですまそ。

ポインタのシンタックスシュガーで
*(p+1)とかいうのをp[1]とかできますよね。
んで2次元でp[1][5]とかやろうとすると
エラーになっちまうんですが、
素直にp[x*y]という風にしないとだめなんでしょうか?
((char [20][])p)[1][5]

いくつ分だかわからなきゃどうしようもないだろ
あれって構文糖だったのか・・・
>>589
?????
((char (*)[5])p)[1][5];でしょ?
592591:03/03/03 13:39
違う違う。
((char (*)[6以上])p)[1][5];
>>588
しかし、なにをp[1][5]と書いたらエラーになるのか書かないとわからんよ。
char *pならエラーになって当たり前だ。
594558:03/03/03 15:09
え、普通にint

int a[5][5]
とかで関数に渡したあとシンタックスシュガーのばやい
どのようにやるのですか?ってことです。
普通にint (*p)[5]; で
p=a; としたら?
(&printf)("なんでこんなんで問題ないんだよ!");
C言語のキモさを垣間見た瞬間であった。
>>585
WaitForSingleObject()を使わずにGetExitCodeProcess()でループする理由は?
599デフォルトの名無しさん:03/03/03 19:21
gotoを使って例外処理(?)をするのってどうですか?
djbdnsはその方法を使っているみたいなんですけど。

↓こんな感じで

if(a) goto DIE;
if(b!=c) goto SERVFAIL;
   ・
   ・
   ・
SERVFAIL:
/* 後始末 */

DIE:
/* 後始末 */

}
throw CException();
標準ライブラリの一覧がのっているウェブサイトはありますか?

今はぼーよーさんの所を参照しているのですが、ほかにもっと見やすいところがあれば、
教えてください。
>>601
http://www.linux.or.jp/JM/

ここのセクション3に。
603602:03/03/03 19:30
linuxのマニュアルだけに独自に拡張したことについても書かれているけど、そういうものはきちんと拡張したと書かれているから大丈夫。
あとはMSDNとか
2ちゃんねるに飽きた!IP規制がウザい!というひとに朗報。
http://papas818.hp.infoseek.co.jp/Xch.html
ここへどうぞ!人がまだ来てないからキャップ発行しますよ〜
削除人も募集です。
2ちゃんねるが閉鎖されるという噂が後を断たない今!
2ちゃんねるに見切りをつけてこっちに移るのも選択肢かも知れませんね〜


>>602
サンクスコ
Linux Programmer's Manual(3) ですか?
この (3) という数字にはなにか意味でもあるのですか?
Unix/Linux には疎いので、、、

MSDNまでいくと、自分の用途にはちょっとヘビーすぎるかもです。
>>606
3はセクション番号
1・・・ユーザーコマンド(lsとか)
2・・・システムコール(openとか)
3・・・ライブラリ関数(printfとか)

という感じで。
標準関数ならセクション3にあるからそこから検索すればいい。
例外処理っていうか、結局は戻り値チェックすりゃいいだけだろ?
あとシグナル関係はC++よりCの方が相性がいいよね。
609607:03/03/03 20:50
俺もいい加減に全ての標準関数くらいmanに頼らないで型・引数・概要を覚えようかな。
>>609
どういう関数があったかだけ覚えておいて、
あんまり使わないのとか、引数の順番が怪しいと思ったのだけその都度manを引くようにしてる。

fgetsとかは順番をすぐ忘れるんでな(w

>>610
> >>609
> どういう関数があったかだけ覚えておいて、
> あんまり使わないのとか、引数の順番が怪しいと思ったのだけその都度manを引くようにしてる。
> fgetsとかは順番をすぐ忘れるんでな(w

そういうスタイルが健康的でいいよ。
どういう関数が用意されているかさえ覚えていれば、必要になったときにちょっと確認すれば
すむわけだから。

神経質に細かいことを記憶しようとしても、あまり意味内と思われ。
そんなことに労力使うくらいなら、ほかに勉強するべきことはたくさんあるし、、、
>>610
そうそう。よく引数の順番を忘れるんだよ。
setvbufとか(^_^;)
>>611
じゃあそうする(^_^;)
今まで通りだけど(^_^;)
いくつかの関数のプロトタイプを画像にしてデスクトップの壁紙にする。これ最強。
('A`)マンドクセ
(^_^;)
Σ( ̄□ ̄;)
618仕様書無しさん:03/03/03 23:27
throw NullPointerException;
try{
_618();
}
catch(NullPointerException){
printf("ガッ");
}
ここは何のスレですか?
ぬるぽのスレです
チガウダロ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ >>621
 (_フ彡        /
ぬるぽのスレです

  ∧_∧
 ( ´∀`)< ぬるぽ
>623
ガッ
>624
手を抜くなYO

  ∧_∧
 ( ´∀`)< ぬるぽ
626デフォルトの名無しさん:03/03/04 07:30
グギャjjjjjjjjjjcf、、zzzzzzzウvhk、、、、xrrrl。
クソスレやめれ=〜====〜〜〜====IIIIプッ
唐突ですがリトライを組み入れたいときはどうや
るのが理想でしょうか?

自分は、

for (retry = 0; retry < MAXRETRY; retry++) {
    if (func() < 0)
        continue; /* error */
    break;
}
if (retry == MAXRETRY)
    errorprint(ERRORCODE); /* retry over*/

みたいな処理を必要な関数にいちいち
いれているのですが、なんだか面倒で・・・。
628584:03/03/04 10:09
>598 なるほど。そっちの方が簡単ですね。感謝。
// time_modoki.cpp : no warranty
#include "windows.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
  DWORD t_k, t_u;
  FILETIME ft_create, ft_exit, ft_kernel, ft_user;
  HANDLE hProcess;
  STARTUPINFO startupinfo;
  PROCESS_INFORMATION processinfo;
  char s_app[_MAX_PATH];
  if (argc > 1) {
    strcpy(s_app, argv[1]);
  } else {
    fprintf(stderr, "usage : time_modoki [exe file to measure]\n");
    return 1;
  }
  GetStartupInfo(&startupinfo);
  if (! CreateProcess(
    s_app, NULL, NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &startupinfo, &processinfo)) {
    fprintf(stderr, "failed to create process.\n");
    return 1;
  }
  hProcess = processinfo.hProcess;
  WaitForSingleObject(hProcess, INFINITE);
  GetProcessTimes(hProcess, &ft_create, &ft_exit, &ft_kernel, &ft_user);
  t_k = ft_kernel.dwLowDateTime;
  t_u = ft_user.dwLowDateTime;
  printf("cpu time usage : kernel %.1f uS, user %.1f uS\n", (double)(t_k)/10, (double)(t_u)/10);
  return 0;
}
629584:03/03/04 10:14
>628
他に修正したところを補足。
・time.h はいらんかった。
・GetProcessTimesのft_kernel, ft_user は「時刻」ではなく「時間」が返ってくる模様。
 なので、引き算も省略。
>>627
for (retry = MAXRETRY; retry-- && func() >= 0; ) {
    if (! retry)
        errorprint(ERRORCODE); /* retry over*/
}
エラー処理の為の変数も for {} 内に閉じ込めておける。
631426:03/03/04 13:24
2ちゃんねるに飽きた!IP規制がウザい!というひとに朗報。
http://papas818.hp.infoseek.co.jp/Xch.html
ここへどうぞ!人がまだ来てないからキャップ発行しますよ〜
削除人も募集です。
2ちゃんねるが閉鎖されるという噂が後を断たない今!
2ちゃんねるに見切りをつけてこっちに移るのも選択肢かも知れませんね〜
>>631
あんたんところはポップアップがウザい。
つーか infoseek 鯖で 2ch 級のユーザー数抱え込むのは無理だぞ。
>>628
簡単かどうかより、システムでやるべきwaitをユーザプロセスでやっちゃいかんだろ。
i++とi+=1って意味違うよね?
単体なら同じとみていいが
iがint型との時とfloat型のときでも同じ動作?
fgetsで一行ずつ読み込もうと思うのですが、
一行の途中までしか読み込めなかった場合、
ファイルポインタはどこに移動するのですか?

fgets(buf, 64, fp);

で一行の長さが63以上だった場合です。

どなたかご教授ください。
よろしくお願いします。
>>637
んなもん実験すりゃ分かるだろうに...
「読んだとこまで」だよ。↑の場合は、行の途中。
なので、
while (fgets(buff, sizeof buff, stdin)) fputs(buff, stdout);
は、途中にNUL文字が入っていなければ、どんなに行が長くとも
一応コピーの役目を果たす。


>>636
君の予想ではどう違う動作をするのか聞いてみたい。
640デフォルトの名無しさん:03/03/05 01:29
質問があります。
system()を用いて得られた結果(標準出力、戻り値)を
ファイルに落とさずに直接変数に格納したいのですが、
どのようにすれば宜しいのでしょうか?
>>640
unix系OSを使っているのならpopenを調べるがよい。
ほかはしらん…
>>640
UNIXなら標準出力はpopenで受けられるけど。
643642:03/03/05 01:39
うわ、かぶった。
('A`)ケコーン
646デフォルトの名無しさん:03/03/05 01:50
>>641 >>642
深夜にかかわらず、ご回答ありがとうございます。
popenのリファレンスを読ませていただいたのですが、
コマンド自体の戻り値を取得する方法はあるのでしょうか?
重ねての質問をご容赦ください。
>>646
popen使うなら、pcloseの戻り値が「コマンド自体の戻り値」のはず。

VCでpopenつかうとき、スペースの混ざった引数渡すときの
クォートの付け方がよくわからん。誰かしってたらおしえて。
648デフォルトの名無しさん:03/03/05 02:39
質問
ローマ字をアイウエオ順で比較なりソートなりする
ライブラリってありますか?

FAQぽくてすいません
649648:03/03/05 02:44
環境書き忘れました。
linuxです。
ローマ字をアイウエオ順でソートって
"baka" → "kaba"
って感じ?
651648:03/03/05 02:57
>>650
ごめんなさい。
人名のソートです
人名がローマ字表記になっているの?
>>648
std::lexicographical_compare()
654648:03/03/05 03:17
>>652
そゆことです。

Inoue Takasi
Aoyama Taro
Aoki Jiro

Aoki Jiro
Aoyama Taro
Inoue Takasi

一文字ずつ「日本語として」切り取っていって
比較してけいばいいと思いますが、
なんかライブラリとかあんのかなーと思いました。
655648:03/03/05 03:19
>>653
あれ、ぷらぷら?

ありがとうございます。
一応調べてみます。
656650=652:03/03/05 03:40
>>654
ライブラリはないと思うぞ。
a = 0
i = 1
ka = 5 + 0 = 5
ki = 5 + 1 = 6
とかやるといいかも。

>>653
調べてみたけど、それを使ったからって簡単になるわけではなさそうだけど。
まあ実際 std::lexicographical_compare() を char* に対して使っても、
strcmp() と同じ意味にしかならないからな。
大橋(オオハシ)だったらOhashi?Oohashi?Oh-hashi?
太郎(タロウ)はTaro?それともTarouなのか
ガイジンの名前が含まれてたら無理だし

フリガナを持ってないとアイウエオ順にできないと思います
比較関数作ってqsort
ローマ字->カナの変換ルーチン作って、変換しとく
あとはstrcmp & qsortにでも放り込む
・ヘボン式で書けばた行はta chi tsu te to。拗音や濁音が入った場合も
考慮しなくてはいけない。表記法のゆれはどれぐらい考慮するのかな?
chaとtyaは同じ?ぢはji(これは「じ」でもある)とかいてもよい?
・日本語のカナに落ちないバイト列の評価方法も決めないといけない。
・nが「ん」なのか、な行の片割れなのかを評価しないといけない。
などなど。どう考えてもそう単純な話ではないね。


>633
なるほど。再度感謝です。
663639:03/03/05 09:51
i++;
は i=i+1.0fに変換される
i+=1;はi=i+(float)1に変換されたあとi=i+1.fに変換される
上のほうが精度がよい(場合もある)ってことでよろしか?
664デフォルトの名無しさん:03/03/05 10:37
printfの書式を利用して文字列を作成したあと、
その文字列を使ってある値を検索するプログラムを書いています。
例えばsearch("%dch.%s", 2, "net")とすると、2ch.netで検索したいのです。

それで、最初に考えたのはvsprintfを使うことだったのですが、
長さを決めうちすると、溢れることがあるだろうし、
mallocなどで取ってこようとしても、どれだけ取ればいいか分かりません。
こういう場合は、どうすればいいのでしょうか。
>>664
vsnprintf() があればそっち使え。
無ければ GNU libiberty から vasprintf() 拾って来い。
>664
シンプルな%dと%sだけなら、自分で組んでもいいかもね。
>664
組む、というても、snprintfをゼロから組む必要は無く、
%d, %s に必要な文字列長をmalloc前に予測する処理を書く、ということね。念のため。
668664:03/03/05 11:23
>>665-667さん
vsnprintfがありました。
なので、それを使おうと思います。
どうもありがとうございます。
sprintfなら獲得すべきバッファのサイズはある程度わかると思うけど・・・
  ∧_∧
 ( ´∀`)< ぬるぽ

  ∧_∧
 ( ´∀`)< ぬるぱ
672ぬるぽな:03/03/05 20:14
ハンマー持った変な人になんか負けないもん!

∧_∧
 ( ´∀`)< NullPointerException

おい!せめて参照くらいサポートしろ鼻毛言語よ。
>>674
HSP厨必死だな
  ( ・∀・)   | | ガガガガッ 人
 と    )    | |    人  <  >__Λ∩
   Y /ノ    .人   <  >__Λ∩Д´)/
    / ) .人 <  >__Λ ∩Д´)/   / ←>>670
  _/し' <  >_Λ∩Д´)/   / ←>>671
 (_フ彡 V`Д´)/   / ←>>672
            / ←>>673
>>676
>>663はちゃんと正式名称でいってるよ
>>677
>>673ね 
ゴチャゴチャイッテンジャネェ
  ( ・∀・)   | | ガガガガッ 人
 と    )    | |    人  <  >__Λ∩
   Y /ノ    .人   <  >__Λ∩Д´)/
    / ) .人 <  >__Λ ∩Д´)/   / ←>>678
  _/し' <  >_Λ∩Д´)/   / ←>>677
 (_フ彡 V`Д´)/   / ←>>678
            / ←>>677
ぬるぽスレはここですか?
>>680
NullPointerExceptionを「ぬるぽ」と呼ぶスレ
http://zeta.ns.tc/kiba/test/read.cgi?bbs=prog&key=1046862559
682648:03/03/05 23:14
>>652-661
ローマ字のアイウエオ順ソートの件
ありがとうございました。

自分でやろうと思ったとき、かなり骨かもと思ったので
ライブラリが無いかなってことでした。

1 Oohasi O-o-ha-si
2 Ohhashi Oh-ha-shi
展開? =O-o =si
3 Ohashi O-ha-shi

1と3は無理だーー(泣)

まあ、ひらがななり、カタカナならそのままソートできる(?)から
ふりがなのデータ用意しようよってことでしょうね

なんかこれくらいできなければと思えてきたので
ひまがあるときどうにかやってみようと思います。
Win32のCompareStringは?
C++のsort()で、比較関数の内部にローマ字→カタカナもしくはひらがな
変換処理を内蔵すれば、そのままソートできそう。
ただし激しく遅くなりそうだが。処理件数が少ないならこの方法がお勧め。
もっともqsort()の比較関数内でやってもいいけどな。
>>684
>>685
とりあえず実装するにはそれでもいいかもな。
あとは性能を考慮して前もって変換するかどうか決めればよいだろう。
687648:03/03/05 23:31
>>683
スマソ。
linuxなのです
でもローマ字は無理っぽい

>>684
>C++のsort()で、比較関数の内部にローマ字→カタカナもしくはひらがな
>変換処理を内蔵すれば、そのままソートできそう。
これが問題で682みたいになってしまうのです。
Ohhasi Ohasiのケース
(設計で挫折(泣))
でもこれはとろすぎかも

お世話になりました
>>647
> VCでpopenつかうとき、スペースの混ざった引数渡すときの
> クォートの付け方がよくわからん。誰かしってたらおしえて。

Rules: 2N backslashes + " ==> N backslashes and begin/end quote
2N+1 backslashes + " ==> N backslashes + literal "
N backslashes ==> N backslashes
689647:03/03/06 00:40
>>688
うーん。読めん。
日本語訳きぼんぬ。
2N個のバックスラッシュ+ダブルクォート ==> N個のバックスラッシュ+クォートされた文字列の開始/終了
2N+1個のバックスラッシュ+ダブルクォート ==> N個のバックスラッシュと通常文字としてのクォート
それ以外のバックスラッシュ ==> そのまま

ダブルクォートに先行する場合だけバックスラッシュが特別扱いされる。
691647:03/03/06 01:06
>>690
ごめん、バックスラッシュは本題じゃないんだ。
argv[0] : "C:\Program Files\xxx\yyy"
argv[1] : "t e s t.txt"
引数が、たとえばこう(↑)渡るようにpopenするにはどうするかって話。

UNIXならそれぞれシングルクォートで囲って並べればいいんだけど、
Windowsだとそうはいかない。
バックスラッシュの特別扱いも考え始めると、さらに大変なことになりそう。

ageてみよう。
692ヽ(´ー`)ノ:03/03/06 01:18
>>691
fork, pipe, exec* 使って、簡単なラッパーを実装するとか。
693647:03/03/06 01:27
>>692
VC付属の_popenのソース見て、そう簡単にはできないと判断した。
「VCで」というのが見えないのか。
それを云うならCreatePipe, CreateProcess, DuplicateHandleだろう。
VC++のcrtのソースを見る限りは、COMSPEC環境変数で指定されている
シェルか、cmd.exe/command.comを起動する。
ただでさえコマンド引数まわりの扱いが貧弱なのに、さらにシェルの
引数解釈が割り込むとロクなことがないので、_popenを使わないことを勧める。
パイプを使うサンプルはMSDNに転がっていたと思うし、rubyあたりの
ソースに直截流用可能なWin32版のpopenの実装があったと思う。

>>693
大丈夫だ。>>695がなんとかしてくれる。
>>695
プププ
>>695
偉い。よく言った(w
698デフォルトの名無しさん:03/03/06 02:12
セキュリティホールの作り方を教えてください。
>>698
チェックしない 
700ヽ(´ー`)ノ:03/03/06 02:57
>>694
あぁそうか、システムコールだもんな…寝惚けた。
VC.NET が欲すぃけど買えない貧乏学生なんで勘弁してくだつぁい。
701690:03/03/06 03:02
>>691
引数にダブルクォート自体を含む場合のことを書いたわけだが。
そうでないならもっと単純に

"C:\Program Files\xxx\yyy" t e s t.txt

という形にすればいいはず。
702647:03/03/06 04:25
>>701
それで_popenすると、

'C:\Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

となるのですよ。ちなみにCMD.exe。
>>701
これで動くけど?
#include <stdlib.h>
#include <stdio.h>

int main()
{
  char buf[BUFSIZ];
  FILE *pipe = _popen("\"C:/Program Files/Common Files/Microsoft Shared/VBA/VBA6/link.exe\" test.txt", "r");
  if (!pipe) {
    perror("popen");
    return 1;
  }
  if (!fgets(buf, sizeof(buf), pipe)) {
    perror("fgets");
    return 1;
  }
  _pclose(pipe);
  fputs(buf, stdout);
  return 0;
}
704647:03/03/06 05:36
#include <stdio.h>
#include <stdlib.h>
const char* const command[] = {
 "C:/Program Files/Microsoft Visual Studio/Common/Tools/UUIDGEN.EXE",
 "\"C:/Program Files/Microsoft Visual Studio/Common/Tools/UUIDGEN.EXE\"",
 "\"C:/Program Files/Microsoft Visual Studio/Common/Tools/UUIDGEN.EXE\" -v",
 "\"C:/Program Files/Microsoft Visual Studio/Common/Tools/UUIDGEN.EXE\" \"-v\"",
};
int main()
{
 for( int i = 0 ; i < sizeof( command ) / sizeof( command[0] ) ; ++i )
 { printf( "-- %d --\n" , i );system( command[i] ); }
 return 0;
}
↑シェルの問題に絞ってこんなのを作ってみた。
で、結果は、

-- 0 --
'C:/Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
-- 1 --
73556378-d75f-4799-895a-5d47e84a2f68
-- 2 --
Microsoft UUID Generator (c) 1992. v1.00

-- 3 --
'C:/Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

・・・納得いかん。
>>704
どうも途中のダブルクォートは全部プログラム名の一部と見なされるみたいだなぁ。
つまりVCのsystem()その他では空白を含む引数はargv[0]も含めて高々一つまでってことか。

>>694が正解みたい。少なくともruby 1.8.0のsystemでは扱えてるようだ。
perlはcygwin版しかインストールしてないので、だれかActivePerlについて確認キボン。
706デフォルトの名無しさん:03/03/06 08:57
素朴な疑問。
ショートファイル名でアクセスしちゃいかんの?
NTFSでも使えたと思うのだが。
NTFSだとショートファイル名を作らないようにもできるけどな。
数百行でかかれた手頃なCのソースはなにかありますか?
ライブラリーでも単体のアプリでもいいのですが。
system() に渡す文字列が既に環境依存なのなら、そもそも環境依存の API なりを
使った方がいいと思う。
710647:03/03/06 11:58
>>709
その結論に落ち着きつつあるです。
プリプロセッサで切るか・・・・。
WIN32 unix とか、そんなマクロだったかのぅ。
>>708
重要なのは勉強するサンプルとして欲しい機能を満たしたソースであるかないか
行数は関係ないだろ。
>>711
一千万行もあるソースを読めというのか?
ふざけんな!
何をわけの分からんことを。
春でつね。
1000行あってもそのうち700行はコメントと空行
>>705
> つまりVCのsystem()その他では空白を含む引数はargv[0]も含めて高々一つまでってことか。
違った。「プログラム名に空白を含む場合は、空白を含む引数は渡せない」だな。
717デフォルトの名無しさん:03/03/06 15:33
atoi("")って、0になるんでしたっけ?ANSI的に。
しょりけーいぞん
>>717
その通り。正しく int に変換できなければ 0 を返す。
>>716
"\"\"C:\\Program Files\\Microsoft Visual Studio\\Common\\Tools\\UUIDGEN.EXE\" \"-v\"\"",
>>720
その場合は-vを囲まなくてもいいだろ。>>716でいってるのは「方法がない」もの。
整数を文字に変換するにはどうすればいいですか?
  ∧_∧
 ( ´∀`)< ぬるぱ

ヨバレテトビデテジャジャジャジャーン
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>723
C言語で言う「割り込み」って何のことでしょうか?
索引調べても乗ってないし、どうもアルゴリズム上の
俗語らしいのですが…。
>>725
どこからその割り込みという言葉を知ったのでしょうか?
それによって答えも少々かわりそうだ
727さんま:03/03/06 18:55
>>723
だれが出っ歯やねん!
728デフォルトの名無しさん:03/03/06 19:07
>>722
sprintf
>>722
boost::lexical_cast
C言語スレで「整数の文字列への変換の仕方」が分からない初心者に
対してC++の話題を持ち出すヤシは、C++を噛りたてで
自分の乏しい知識を自慢したくて仕方がないんだろうね。
うん、そうだよ。君の言う通り!参った参ったよ、降参だ!
ああ、銃も置くよ。これでいいだろ?
>>730
そうやっていちいちC++の見事なレスにやっかみ半分なレスをする
君は、C++を知りたくて仕方ないのに全然理解できなくて毎日挫折
を味わっているかわいそうなヤシなんだね。
あー、半角?くんのことね。
734デフォルトの名無しさん:03/03/06 19:47
サラ仕上げ
735デフォルトの名無しさん:03/03/06 19:50
人気番組笑点の司会者は誰
736デフォルトの名無しさん:03/03/06 19:54
int型の値をdouble型に変える方法を教えてよ
>>736
キャスト
>>736
double型の変数に代入するだけでいいじゃん。
>>735
立川談志
740デフォルトの名無しさん:03/03/06 20:25
こんな関数があります。
void PrintAtDebug( const char* f, ... );

この関数を呼ぶのは マクロ _DBG が定義されてるときだけなのですが、
void foo() {
  int i = 10;
#ifdef _DBG
  PrintAtDebug( "value %d\n", i );
#endif
}
なんて書くのが、すごく無様に見えます。


たとえば、その関数が
void PrintAtDebug( const char* str );
のような形であれば、
#ifdef _DBG
#define _PrintAtDebug(x) PrintAtDebug(x)
#else
#define _PrintAtDebug(x)
#endif
なんてヘッダファイルにでも書いておけば、気持ちよくPrintAtDebug()関数を
呼ぶことができるようになるのですけど、
いかんせん、件の関数は省略された引数を持っています。

---------------------
省略された引数を持つ関数をwrapするようなマクロの書き方を、
誰か教えてくださいませ...
741740:03/03/06 20:29
「省略された引数」じゃなくて
「可変呼引数」ってのが正解ですね。スマセン。
PrintAtDebug(const char* f, ...)
{
#ifdef _DBG
 〜
#else
 〜
#endif
}
とするんでは駄目?
C90までであれば
#ifdef _DBG
#define _PrintAtDebug(x) PrintAtDebug x
#else
#define _PrintAtDebug(x)
#endif

_PrintAtDebug(("value %d\n", i));

gccなら
#ifdef _DBG
#define _PrintAtDebug(x, ...) PrintAtDebug(x, ## __VAR_ARGS__)
#else
#define _PrintAtDebug(x, ...)
#endif

_PrintAtDebug("value %d\n", i);
C99なら
#ifdef _DBG
#define _PrintAtDebug(x, ...) PrintAtDebug(x, __VA_ARGS__)
#else
#define _PrintAtDebug(x, ...)
#endif

_PrintAtDebug("value %d\n", i);
746740:03/03/06 20:39
>>742
んと、最初そうしようかと思ったんだけど、
そうすると関数呼び出しのオーバヘッドがあるしなー、って思って。
あと、おっきめの構造体とか、
_PrintAtDebug("BigStruct:%s\n", ToString( bigStruct ) );
とか、やってたりしたので....

>>743
括弧2重!すごい!それやります!
747740:03/03/06 20:44
>>744
gccだとそういうのがあるんですねぇ。
そっちのほうがきれいかな...
んー...
748デフォルトの名無しさん:03/03/06 20:46
ささやかな初心者の質問なんですが
C言語でケータイ電話用アプリは作れますか。
Javaで作れるらしいですけど
Cではできないのですか?
>>745
そういえばC99では可変個の引数をとるマクロを書けるんだっけ。
いいなそれ。
Javaの法が簡単でしょ
>>748
SDK(コンパイラやライブラリなど)があれば・・・
あるかどうかは知らない。
>>740
>744-745はどうでもいいが、>>743あたりは極普通のTipsなので、もう
ちょっといろんなソースを読んで勉強することを勧める。マジな話。
>>750
はげどう。
携帯電話の制御プログラムならまだしも、アプリケーションならJavaの方がいいでしょ。
そうそう。Cだとあーなったりこーなったりして大変よ。
iアプリってJavaVM上で動いてるの?
>>755
KVMってのの上だな。
>>756
tnx a lot!
758デフォルトの名無しさん:03/03/06 21:37
KVMの所為で、変数名も詰めないといけない昔のBasicのようなプログラムを
書かざるを得ない。<携帯電話

でもだからと言って、お手軽に実装するもっと簡単な方法があるわけではない。
例えばJavaアプリならPC上のエミュレータも含めて比較的手軽に書けるが、
今のところCで書いたプログラムを携帯電話にインストールする手段もない。
759デフォルトの名無しさん:03/03/06 21:38
JAVA起動した時に出てくるティーカップのマークって登録商標?
>>758
ユーザプログラムをH/Wに影響のない形で動かしたいと考えたとき、Javaの箱庭性がぴったりだったってこったな。
>>760
どっちかっつーと、KVMやJVMみたいな実際のハードウェアから切り離した
仮想マシンの存在がものを言ってるんだがな。

Javaはその仮想マシンへのコンパイラに過ぎない。
JVMなどをターゲットにしたコンパイラで広く普及してるのがJavaってだけだろう。

原理的にはCコンパイラだってCOBOLコンパイラだってかけるぞ(w
たしかCコンパイラは実装があったような気がしたが。
というわけでJavaだから、というのは厳密には正しくない。
>>761
うむ、同意だ。そこに目を付けたのが.NETってこったな。
763デフォルトの名無しさん:03/03/06 22:31
今はVC++ってのでGUIのAPが書けますが、昔はどんな風に
画面を作っていたのですか?
>>763
pardn?
>>764
pardon?
>>763
キャラクタとエスケープシーケンスを駆使して窓を構築してますた。
>>766
昔すぎると思われ。せめてWindows3.0の時点で話した方が良くない?
DICS-BASICでは line、circle とか、pointでドット絵書いて get、put だった
窓の下になる画像は VRAM からメインメモリに移動してから窓描画します。
もちろんメインメモリ節約の為に、VRAMイメージは圧縮しておきます。
どんなふうにして圧縮してたの?>>769
>>770 ランレングス圧縮で無問題。
>>711
MAGのコードが公開されてたから、
趣味のプログラムではそれ使ったり。

仕事用だと、だいたい無圧縮。
ランレングス圧縮というのがあるですか、調べてみるです(・∀・)>>771
>>772
あらかわ犬の方ですか?
>>773
11111111000000000000001111111111111111111

8 14 19
>ランレングス圧縮
役に立たない
777772:03/03/07 09:45
ぜんぜん違います
778デフォルトの名無しさん:03/03/07 13:01
コンパイラが必用なんですね(T_T)
コンパイラって漫画だよ
そんなもん読んでないでとっととC言語の質問汁!!
780デフォルトの名無しさん:03/03/07 17:56
じゃあ早速・・・
本当にint型は16bit以上なの?
781ヽ(´ー`)ノ:03/03/07 18:02
>>780
INT_MAX は 16bit であることが ANSI C では保証されているれす。
>>780 実装による。
783ヽ(´ー`)ノ:03/03/07 18:02
「INT_MAX は」じゃオカシイな(;´Д`)「int型は」に置き換えてくれ。
ビットで訊ねてきてるところが罠のような気がしてならない
>>780
>shortとintは少なくとも16ビット、longは少なくとも32ビット、
>shortはintより長くてはならず、intはlongより長くてはいけない
SolarisでCやってるんですけど、mallocしてるところで時々SEGVで
こけてしまうのですが、有効な調べる方法とかってあります?
787デフォルトの名無しさん:03/03/07 18:55
char, short, int, long, 等の型のサイズは、どうして固定のビット長で定義されてないんですか?
有限の数を相手にしている以上、charは8bit等 決まっていないとどの型を選んで良いのか迷うのですが。
6bit PIC 向けのプログラムとか書きたいから。
789デフォルトの名無しさん:03/03/07 18:57
質問です。
色を変えたりするやつで、

printf("\x1b[〜")

がありますが、borland c++のコンパイラではできませんでした。(改行のマークみたいのが出てきます。)
borlandではだめなのでしょうか。

また、cygwinのgccコンパイルではconio.hファイルがありませんといわれてしまいましたが、だめなのでしょうか。。
>>789
スレ違いだが、Windows NTのコマンドプロンプトはANSIエスケープシークェンスを理解しない。
>>788
それは処理系に依存したサイズを考えて選ぶしかないという事ですよね?
C言語って最悪の言語ですね。
792デフォルトの名無しさん:03/03/07 19:16
教えて下さい。
下のプログラムが正常に動作しません。
NULL ポインタは引数に渡せないのでしょうか。
本当は、get_memory 関数内で、色々なサイズでメモリ確保します。
環境:Linux + gcc3.2


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

void get_memory( char *pnt )
{
pnt = malloc( 10 );
strcpy( pnt, "abcdefghi");
}

int main( void )
{
char *mem;

get_memory( mem );
printf("mem=[%s]\n", mem );
free( mem );
}
値渡し
>>792
void get_memory( char **pnt)
{
*pnt = malloc...

get_memory( &mem);
795794:03/03/07 19:23
ふつー
char *get_memory(void)
{
return malloc...

mem = get_memory();
796789:03/03/07 19:24
>>790
うーむそうなんですか。。
ありがとうございました。
>>791
ま、マジレスしておくと。

別に処理系に依存したサイズなんかいくらでも回避する手段はあるわけで。
それ以前にCはアーキテクチャにべったり依存したプログラムも書けるから
便利なんだよ。OS依存以前にCPU依存のプログラムが書けるというところな。

一応ANSIのintの定義は最低16bitの符号あり整数ってだけで、
おまえはbit長さのみを気にしてるようだが、
符号が1の補数か2の補数かそれ以外の表現なのかさえも規定してない。
bit数気にするならこっちの表現も気にしろよな…

んでintもともとは「プロセッサにもっとも自然な符号あり整数」程度の定義だったわけだが。
もっとも自然な、ということはそいつを使うのがもっとも性能が発揮できる、
という意味とほぼ等価と考えてもよい。

処理系に依存しないサイズの整数を使おうと思ったら普通

#ifdef DOS
typedef int32 long;
#else
typedef int32 int;
#endif

とかヘッダに書いといてincludeするだけで済む。別にたいした手間じゃないし、
アーキテクチャに依存したプログラムがかけないよりはまし、
と考えているプログラマもいるってことだ。

ま、何やるにしてもCしか使わない(使えない)プログラマはアフォかと思うが、
確実にそういう需要はあるってこと。そしてそれを回避する手段もある。
>>794-759
あっ!
そうですね。 気がつかなかった。
お世話樣でした。
799797:03/03/07 19:33
ああんtypedefの書式間違えた(;´Д`)
C++だと2の補数表現と決まっているよね。偉いよね。
>>797
> 別に処理系に依存したサイズなんかいくらでも回避する手段はあるわけで。
おいおい。
問1 
for(;i<lim-1 && (c=getchar())!='\n' && c!=EOF;)を&&を使わずに書け。

自分の解答
for(;!(i<lim-1 || (c=getchar())!='\n' || c!=EOF);

/* 俺ってバカなのでしょうか・・・? */
803802:03/03/07 21:33
);が抜けておりました。スマソ
for(;!(i<lim-1 || (c=getchar())!='\n' || c!=EOF););
for(;(i<lim-1) * ((c=getchar())!='\n') * (c!=EOF);)
805802:03/03/07 21:43
誰か答え教えてくさい
>>805
>>804 じゃダメなの?
>>803
whileは嫌い?
>>804
これだとダメだーね。
>>808
なぜ?
全てを評価してしまうから?
811808:03/03/07 22:24
こうかな?
for(;!(i>=lim-1 || (c=getchar())=='\n' || c==EOF);)
812809:03/03/07 22:26
>>810
ああなるほど。
813809:03/03/07 22:26
なら||を使うのもだめじゃないか。
>>802
for(;i<lim-1 ? (c=getchar())=='\n' ? 0 : c==EOF ? 0 : 1 : 0;)
>>813
なんで?
816809:03/03/07 22:38
>>815
評価する式の数が異なる可能性がある。
それでいいなら>>804もOKでしょう。
>>816
||だって短絡評価だろうが。
>>802>>808の等価性が理解できないなら、ブール代数の基礎を勉強し直すこと。
>>817
a=1,b=0,c=0

a&&b&&c /* bまで評価 */
!(a||b||c) /* aのみ評価 */
for(;i<lim-1 && (c=getchar())!='\n' && c!=EOF;)

i<lim-1 が真のとき、(c=getchar())!='\n' も評価される。

for(;!(i>=lim-1 || (c=getchar())=='\n' || c==EOF);)

i<lim-1 が真のとき、i>=lim-1 は偽だから、(c=getchar())!='\n が評価されない。
>>819
これ間違ってるか。
C言語の仕様の話に数学をもってこられても困るな。
>>819
> i<lim-1 が真のとき、i>=lim-1 は偽だから、(c=getchar())!='\n が評価されない。
* 偽 だ か ら * 評価されるんだろうが。
ド・モルガンでもぐぐってみろ
>>818
> a&&b&&c /* bまで評価 */
> !(a||b||c) /* aのみ評価 */
等価じゃないだろ。ヴォケ

上のに等価なのは
!(!a||!b||!c)
だ。
>>822
ごめん間違ってたよ。
818と同じことを言おうとして滑った。
>>823
それを818は言っているんだろう。
826802:03/03/07 23:04
804はなんでいいんですか?
C言語でも倫理積と同じように*と書き表せるのですか?
827802:03/03/07 23:07
じゃあ+ってのもあるのでつか?
俺ってあほですか?
>>826
みっつの式のうちひとつでも偽があったらかけ算の結果が0になる。0は偽。
ゆえに全てが真となるときのみ全体が真となる。ってことじゃない?
>>828
and野は無し?
わり算にしたらFPEが発生するかなw
831802:03/03/07 23:10
>>828
なぁるほどぉ
I understood
continueはループの先頭に飛ぶんじゃないよ。ループの末尾に飛ぶんだよ。
833802:03/03/07 23:19
式が偽を返すときは0と決まっているのですか?
c==EOFはわかるのですが、
(c=getchar())=='\n'が偽のとき返す値は'\n'以外の文字ではないのですか?
>>833
0だよ。
あと論理式で真を返すときは1を返す。
>>833
> (c=getchar())=='\n'が偽のとき返す値は'\n'以外の文字ではないのですか?

ハァ?
836802:03/03/07 23:28
アリガト
さんこになりました。
最近system()という関数があることを知りました。
アタシはrenameという関数があることを知りました。
printfってすげーーーー
ド・モルガンの法則を知らない真性厨房が現れました
>たたかう
 にげる
 あおる
 つられる
ド・モルガンのドって大阪弁なん?
どもるガン
844初心者:03/03/08 08:30
何処が悪いでしょう? プログラム起動と同時に落ちます。

double ratio;  BYTE data[1024*100];
for(int i=0; i<sizeof(data); i++)
 data[i]=rand()%256;
for(int i=0; i<sizeof(data); i++)
{
 if(data[i] + data[i+1] == 0)
  continue;
 else
  ratio = (double)data[i] /  data[i]+data[i+1] ;
}
return 0;
( data[i]+data[i+1] ) としないと (double)data[i] / data[i]で駄目。以上!
ゼロで除算の為、あぽーん。
ついでにdata[sizeof(data)]にもアクセスしてそう
divided by zero と access violation か?
>>844
data[i] + data[i+1] が、しょっちゅう BYTE の範囲を越えそうなんだが大丈夫か?
あと、無理しないで一時変数使え。

{
 double tmp = (double)data[i] + data[i + 1];
 if(tmp == 0)
  continue;
 else
  ratio = data[i] / tmp;
}

>>847
sizeof(BYTE) が 1 なら、data[sizeof(data)] で access violation は無い。
他の変数領域を壊す事はあるかも知れないし、いずれにせよバグだけど。
>>848
bus error!=access violation
850初心者:03/03/08 09:16
>>847 >>845 >>848
ああぁ、演算子の優先順位をど忘れしてました。
他にも問題点がいっぱ〜いなので修正してみます。 レス感謝。
整数型同士の演算は最低でもintに1度拡張されるような・・・
>>851
で?
>>853
煽りもマジレスもスピードが命。
もしかして>>808>>802へのレスだったんじゃないか?
for(;!(!(i<lim-1) || !((c=getchar())!='\n') || !(c!=EOF)););
正しくはこうだもんなぁ
(int)1.0

が1になる事に驚いた
857デフォルトの名無しさん:03/03/08 13:45
Cの勉強中なのですが、Cのソースには必ずmain関数があると本に書いてあった
のですが、あるソースコードを見たらmain関数はありませんでした。
関数名の中にmainが入ってるものはありましたが、main()はありません。
これはなぜでしょうか?
main関数がなくてもいいのでしょうか?
>>857
読んだあるソースはVisual C++のとかじゃないよね?
もしくはWinMainはあるとか。
>>857
そのソースを載せなさい
860857:03/03/08 13:52
>858
即レスありがとうございます。
読んだのはcpu%.exeというCPU使用率をタスクバーにグラフ化して
表示するものです。
ソースは、cpu%.c、cpu%.ico、cpu%src.rcです。
.rcファイルにはアイコンを読み込むだけしか書いてありませんでした。

・・・あ、今ソースよく見たら
WinMainWinMain (HIN)STANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
という関数がありました。これがmain関数と同じ役割なのですか?
>>860
CによるWIndowsプログラミングの基礎を学びなさい。
main が無いんですけどレベルで Windowsは早過ぎると思われ。。
863857:03/03/08 13:56
>861
すいません・・・。まだCをはじめたばかりで。
独習Cで勉強中です。
>>863
正直、まずは黒い画面から始めた方が良いです。
つまんないだろうけれど。
フリースタンディング環境の場合もエントリーポイントはmainとは限らないんだっけ?
ホスト環境ならmainと決まっているけど。
プリプロセッサ最高!!
俺はあんたの為ならしねるね。
通常、エントリポイントには main() よりも前のレイヤーが配置されるのだが
VCなら
mainCRTStartup()
WinMainCRTStartup()
そして

#pragma comment(linker, "/entry:\"nullpo\"")
>>869
ミオトサナイゾ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ >>869
 (_フ彡        /

if(po != NULL && *po == 2)
printf("Hello World");


・・・・・・・。
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ >>871
 (_フ彡        /
#pragma comment(linker, "/entry:\"nullpo\"")
#include <stdio.h>
int nullpo(void) { return puts("ぬるぽ"); }
if(nu||po)
printf("大変ですね。\n");
(・∀・)ニヤニヤ
#define f(x,y,z) (z x y)
main(){
printf("%s",f("ll", "po", "nu"));
}
( ´_ゝ`)フーン
% cat foo.c
#include <stdio.h>
#include <string.h>
int main(void)
{
  char buf[512];
  while (fgets(buf, sizeof(buf), stdin))
    if (strstr(buf, "Exception"))
      break;
  *strstr(buf, "」") = '\0';
  puts(strstr(buf, "「") + 2);
  return 0;
}
% gcc foo.c
% w3m -dump 'http://pc.2ch.net/test/read.cgi/prog/1045323654/l50' | ./a.out
879デフォルトの名無しさん:03/03/09 14:04
もうC言語は飽きたのか?

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
                        |
       ____.____    |   スレ違い
     |        |        |   |   例外を
     |        | ∧_∧ |   |   投げ捨てろ
     |        |( ´∀`)つ ミ |
     |        |/ ⊃  ノ |   | "ぬるぽ"
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |
キサマ ショウコインメツカ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ >>880
 (_フ彡        /
catch (. . .) {
   ∧_∧
   (´∀` )
  ぬるぽ⊂)
   | | |
   (__(__)
}
皆さんコンバンワニ。
さっそく質問したいのです。
二次元配列のポインタはどうやって渡せば良いのでしょうか?関数に。
void test(char pt[][256]);
とやっていたんですがこの関数を動かす時には呼び出し元での
配列宣言時にdata[?][256]じゃないと『test(data)とやってます』
エラーおこっちまします、どうしたらいいでしょう・・・
なんか受け取るほうも256とか宣言しなくてバシバシポインタだけ受け取れないでしょうか?
>>883
**とか。
>>883
> エラーおこっちまします、
当たり前。ポインタの指すものの大きさが決まっていないとだめだから。
886885:03/03/09 20:51
誤解を生むかも。
ポインタの指すものを操作するなら大きさが決まっていないといけない。
887デフォルトの名無しさん:03/03/09 20:53
けど文字列はポインタだけ渡してもOKじゃないの・・??
char *pt;
test(pt);みたいにいけるから二次元も行けるのかなー。。と
888885:03/03/09 20:55
>>887
文字列はポインタの指すものの大きさ(char一個分)が決まっているじゃない。
(配列としてみた場合、)要素がいくつあるかは問われないけど。
889883:03/03/09 20:56
887自分です。
そうなんですか!けれど全く同じじゃないと行けないんでしょうか?
毎回宣言を書き換えないと行けないんでしょうか・・?
890885:03/03/09 20:58
>>889
>>884がいいんじゃない?
char *の配列を作る。で、引数の型はchar **にする。
ただし、実際に要素(array[n]が指すもの)を保存する領域は別途用意しないといけない。
891890:03/03/09 21:01
要素じゃなくてデータだな(鬱
892883:03/03/09 21:02
ふむふ〜む・・!!
さっき**やってみましたが別途にナイと行けないのですか!
気付かなかった〜ヤッテミマス!
1次元配列と2次元配列を一緒に扱う関数ってどんななのだろう。
894893:03/03/09 21:08
ああ2次元配列のサイズを気にせずにという話か。すまそ。
895883:03/03/09 21:08
>>887は例です、。。はい。
ちなみにperlのsplit関数を真似たもの作ろうと苦戦しましたん。
>>895
それ作ったことある。
>>895
一応止めとく。

にたようなのにstrtokって言うのもある。
>>897
あれはデリミタ文字列を一文字ずつ分解しちゃうからダメじゃん。
899883:03/03/09 21:16
>>896
き。。キニなる・・
900デフォルトの名無しさん:03/03/09 21:40
Cygwinでコンパイルした後、それを実行するコマンドを教えて下さい。
$ gcc bakaaho.c
$ ./a.out
>>899
その手のはこの板でもときおり見掛ける。
>>900
% gcc -g hoge.c
% gdb a.exe
(gdb) run
>>903
最後に rm -rf c/
905デフォルトの名無しさん:03/03/10 02:18
C勉強中です。以下のコードをBCC5.5でコンパイルしたのですが、
exeファイルもDOS窓からの呼び出しも、ウインドウが一瞬開くだけで実行できません。
コンパイルエラーは出ないのですが・・・どこがおかしいのでしょう。

#include<stdio.h>

float tempo(float f,float t);
float frame(float t,float p);
float tick(float f,float p);

float tempo(float f,float t){
float p;
float x;
x=3*t/f;
p=x;
return p;
}
float frame(float t,float p){
float f;
float x;
x=3*t/p;
f=x;
return f;
}
float tick(float f,float p){
float t;
float x;
x=p*f/3;
t=x;
return t;
}
906続きです:03/03/10 02:18
main()
{
float f,t,p,x;
int a;
while(a<=3){
scanf("%d",&a);
switch(a){
case1:
scanf("%f",&t);t=t;
scanf("%f",&p);p=p;
x=frame(t,p);
printf("frame=%.1f\n",x);
getchar();break;
case2:
scanf("%f",&f);f=f;
scanf("%f",&p);p=p;
x=tick(f,p);
printf("tick=%.1f\n",x);
getchar();break;
case3:
scanf("%f",&f);f=f;
scanf("%f",&t);t=t;
x=tempo(f,t);
printf("tempo=%.2f\n",x);
getchar();break;
}
}
return 0;
}
> int a;
> while(a<=3)

aを初期化してない。
908906:03/03/10 02:32
>>907
ほんっとにありがとうございます。少しだけ賢くなれました。
こんな長いソース晒してすいません(;´Д`)
909デフォルトの名無しさん:03/03/10 06:43
>>906
演算は全部doubleでできるように変数も引き数もdoubleにしたほうがいいと思われ。
でないとfloatの精度で計算されたり無用のdouble⇔floatの変換が入ったりしてしまう。
910デフォルトの名無しさん:03/03/10 07:08
C言語始めたばかりの入門者です。
質問があります。
下のプログラムを実行すると、
@の結果がなぜか6.0となってしまいます。
Aではちゃんと9.0と表示されるのですが、なぜ@は6.0になってしま
うのでしょうか?

#include <stdio.h>

#define sqr(x)((x) * (x))

int main(void)
{
  doubledx;

  dx = 1.0;
  printf("二乗は%fです。\n", sqr(++dx));    −−−@
  dx = 1.0;
  printf("二乗は%fです。\n", ++dx * ++dx);  −−−A

  return 0;
}
>>910
マクロの展開された姿を想像してみればわかる。
@はsqr((++dx) * (++dx)) となり、二回もインクリメントしている。
912デフォルトの名無しさん:03/03/10 07:12
コードがおかしかったので手直ししました。

#include <stdio.h>

#define sqr(x) ((x) * (x))

int main(void)
{
  double dx;

  dx = 1.0;
  printf("二乗は%fです。\n", sqr(++dx));    −−−@
  dx = 1.0;
  printf("二乗は%fです。\n", ++dx * ++dx);  −−−A

  return 0;
}
913デフォルトの名無しさん:03/03/10 07:19
@の部分でも1.0が二回インクリメントされて 3.0 * 3.0で、
結果が9.0にはならないのでしょうか?
914デフォルトの名無しさん:03/03/10 07:23
整数型のBではちゃんと9になるんです。

#include <stdio.h>

#define sqr(x) ((x) * (x))

int main(void)
{
  double dx;
  int n;

  dx = 1.0;
  printf("二乗は%fです。\n", sqr(++dx));
  dx = 1.0;
  printf("二乗は%fです。\n", ++dx * ++dx);
  n = 1;
  printf("二乗は%dです。\n", sqr(++n));  −−−B

  return 0;
}
()ついてるじゃん
6だろ
つか ++dx * ++dx なんてことやっちゃいけません。
>>910
そういうコードを書くな、としか言えない。
あと機種依存文字使うのやめてー.・゚・(ノД`)・゚・.
919914:03/03/10 07:53
あくまでも実験のサンプルなので変なプログラムですが、
なんでint型のnは9になるのに、double型のdxは6.0になる理由が
分からないんですよ。

専門一年坊を終了したばかりのボクにはよく分からないです。
>>919
もう分かったからここで聞くな…。下手したら、また荒れるから。
そもそも、マクロはそういう使い方をするもんじゃない。
921914:03/03/10 08:03
>>920
>そもそも、マクロはそういう使い方をするもんじゃない。
分かりました。
理由は無いようですので、それで納得したいと思います。
>>919
まずは
>>1からたどれる
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
http://www.catnet.ne.jp/kouno/c_faq/c3.html
などを読んでからでも遅くないですよ。
923914:03/03/10 08:46
>>922
ありがとうございました。
気合を入れて読んで行こうと思います。
924デフォルトの名無しさん:03/03/10 11:21
>>914
神(コンパイラ)の振る舞いを量ってはいけない。
いつインクリメント処理をしようが、それは神の思し召しなのだ。

冗談は置いておいて、評価のタイミングを最適化した結果なので、
最適化オプションの指定の仕方でも違いが出ると思われ。
関数かマクロかでも(当然)振る舞いが異なるので、
引き数に副作用の在るコードは書かないように決めている
コーディング規約もあるくらい。
>924
で、理由は最適化オプションなんですか?
926デフォルトの名無しさん:03/03/10 11:41
Cygwinでコンパイルした後、それを実行するコマンドを教えて下さい。と聞いた者ですが
その答えとして
$ gcc bakaaho.c
$ ./a.out

% gcc -g hoge.c
% gdb a.exe
(gdb) run
などを教えてもらい入力して実行したところ・・・

cpp.exeアプリケーションエラー
"0x61031957"の命令が"0x00000004"のメモリを参照しました。メモリが"written"
になることはできませんでした。

という表示が出てきました。どうすれば実行できるのでしょうか教えて下さい。
あと、このアプリケーションエラーはどういう意味なのですか?
>>926
どの時点でエラーになったのやら。
>>925
コンパイラのメーカーに問い合わせろ。
929デフォルトの名無しさん:03/03/10 11:58
>>927
$ gcc a.c
これでコンパイルした時点でエラーがでました。
コンパイラのメーカーの中の人も大変だな
cpp・・・プリプロセッサがアクセス違反?
> メモリが"written"になることはできませんでした。

何度見てもこの酷い訳は笑える。
933906:03/03/10 12:25
>>909
遅まきながらサンクスです。参考に致します。
934929:03/03/10 12:35
ほかにコンパイルしたものを出力するコマンドってあるのですか??
>>934
コンパイルができてないのに、コンパイルしたものがあるわけないと思うのだが、どうだろう
936デフォルトの名無しさん:03/03/10 12:38
./
./
./
./
./
どうも、926 と 929 の内容がつながらないのだが
938デフォルトの名無しさん:03/03/10 12:46
>935
だな
Cygwinの環境がうまく動いてないだけみたいだがねぇ
手っ取り早いのが再インストールかな(苦笑)
940デフォルトの名無しさん:03/03/10 12:52
>934
よくわからんがブンブン飛び回るハエだな
>>935
しかもコンパイルの段階にすら移っていない(苦笑)
942929:03/03/10 13:07
あっ そうだ!!失礼。とにかくどうすれいいですかね??
944デフォルトの名無しさん:03/03/10 13:27
「さいたまの野望」というシュミレーションゲーム
つくってくんない?
>>944
ゲ製へGO
>>944
スレ違い。板違い。気違い。
>>945
おう!
>>944
そんなに興味ないか?
Borland C++ Compiler 5.5.1で>>912の試したんだが、
結果は
>二乗は6.000000です。
>二乗は6.000000です。
>二乗は6です。
9になるほうがおかしいのでは?
949訂正:03/03/10 14:20
951なぜotherは表示されないのか:03/03/10 14:21
初心者でも挑戦できる問題でつ
口だけ上級者は解けません

switch(n){
  case 1:break;
  case 2:break;
  case 3:break;
  case 4:break;
    printf("1-4\n");
    break;
  defualt:
    printf("other\n");
    break;
}
>948
>>922
>>951
まともなコンパイラなら警告出すと思うけど。
>>952
ケコーン
>>951
nが1〜4なのだろう。
手元のgccだと、
・最適化なし
double マクロ 6
double 直書き 6
int   マクロ 6
int   直書き 6
・最適化あり
double マクロ 6
double 直書き 6
int   マクロ 9
int   直書き 9
となった。
956デフォルトの名無しさん:03/03/10 14:26
字違ってるぞ。
default
defualt ( ´,_ゝ`)プッ
958デフォルトの名無しさん:03/03/10 14:27
>>954
int n = 5;
にしても表示されなっっかたよ。
>>951
そもそもコンパイル通らないだろ(defualtがマクロなら話は別だが)
>>955
いつまでやってるんだよアフォ
散々 >>922 って書いてあるのが見えんのか
961959:03/03/10 14:28
あ、すまん。単なるラベルとして見られるか
>>959
コンパイルは通るよ。
ラベルとして正しい文法だもん。
でも、まともなコンパイラなら使ってないラベルだぞって警告出るもんだが。
963959:03/03/10 14:29
goto defualt;
これで表示されるだろ。多分。
>>953
どんな警告?
出しようがないと思うけどなぁ。
>   printf("1-4\n");

嘘つきw
まあdefualtってのはわざとだろうな。
そんなものでひっかかるかよ。
制御が届きませんって警告も出るな。
968デフォルトの名無しさん:03/03/10 14:34
字が違ってたのか…
うちのBorland C++ 5.5.1 コンパイラは
defualt:でも警告無しで通ったよ。
糞コンパイラだね。
ラベルだってば
色分け機能つきのエディタ使えよ・・・
>>968
警告レベルあげた?
予約語を色分け表示してくれるエディタを使えば?
ぬるぽだってば
>>972
ガッ
んで、最適化するとswitch(){}が全部消えてなくなるのな。
クソ燃料の割には結構燃えてるな
>>974
冗談のわからん最適化コンパイラだな。
きちんととやれよ
  ( `Д´)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V・∀・)/ >>973
 (_フ彡        /
マ板からコピってくるのが面倒なんだよ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>977
釣られすぎや。
例題で身につけるC言語入門
http://pc2.2ch.net/test/read.cgi/tech/1043260605/l50

ここにあるぽ
>>980
あー、バラしちゃダメだよそこ漏れのお気に入りなのに・・・
ぬるぬるぬるぽ

って言ったら何回どつかれますか?
>>980
そこは…異世界ですか…
          | | ガガガガガッ   .人
  ( ・∀・)   | |       人  <  >__Λ∩
 と    )    | |    人  <  >__Λ∩Д´)/
   Y /ノ    .人   <  >__Λ∩Д´)/   / ←>>982
    / ) .人 <  >__Λ ∩Д´)/   / ←>>982
  _/し' <  >_Λ∩Д´)/   / ←>>982
 (_フ彡 V`Д´)/   / ←>>982
            / ←>>982
985ぬるぽ:03/03/10 14:56
誰も立ててなかったんで次スレ

C言語なら、俺に聞け! Part 〈52〉
http://pc2.2ch.net/test/read.cgi/tech/1047275669/l50

つーか 3 誰だよ。
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>985
会社でもプライベートでも、ぬるぽなんて言った事ないな
メンドクセーナ

  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>987
め。ゑ (ま°
こんなんで千取ったらどうすんだ!

  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>全員
サッサト、ウメタテロヤ
  ∧_∧    | |           人
  ( ・∀・)   | | ガガガガッ 人  <  >__Λ∩
 と    )    | |    人  <  >__Λ∩Д´)/
   Y /ノ    .人   <  >__Λ∩Д´)/   / ←>>995
    / ) .人 <  >__Λ ∩Д´)/   / ←>>996
  _/し' <  >_Λ∩Д´)/   / ←>>997
 (_フ彡 V`Д´)/   / ←>>998
            / ←>>999
質問です
僕は何をききたかったんでしょうか?
>>995
ぬるぽについて
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。