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

C言語なら、俺に聞け! <19>

■ このスレッドは過去ログ倉庫に格納されています
0001ともっちNGNG
C言語質問すれ

・comp.lang.c FAQ
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

・前スレ
<18> http://pc.2ch.net/test/read.cgi/tech/1020260813/l50
リンクは>>2-3
0002ともっちNGNG
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのは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/

推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/

C言語なら、俺に聞け!
<17> http://pc.2ch.net/test/read.cgi/tech/1019372139/l50
<18> http://pc.2ch.net/test/read.cgi/tech/1020260813/l50
0003ともっちNGNG
コンパイラ

タダで使えるBorland C++!
http://pc.2ch.net/test/read.cgi/tech/1002377328/l50

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

その他
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html
0004デフォルトの名無しさんNGNG
>>1
ともっちかよ!
0005デフォルトの名無しさんNGNG
>>2
ともっち 38 かよ!
0006_NGNG
JAVAとC言語ってどんな違いがあるんですか?
0007デフォルトの名無しさんNGNG
>>6
ほとんど一緒。
天と地ほどの差しかない。
0008デフォルトの名無しさんNGNG
>>6
生ハムと生肉くらいの違いです
0009_NGNG
金融系のITでは、どちらが主流なんですか?
なんかコボルというのは前時代のプログラムで
こんなの学んでも食えんと言われてしまいました。
0010デフォルトの名無しさんNGNG
>>9
いやコボルだろ〜
CはUNIX記述用言語として生まれただけあってUNIXと制御系でよく使われる。
0011_NGNG
制御系っていうのはウイルスからPCを守ったりする
ソフトを開発する仕事のことですか?

あと、10氏レスを見ると、UNIXを学ぶなら、先にC言語を学んだほうがいいみたいな
感じですね
0012デフォルトの名無しさんNGNG
>>11
一緒でいーんじゃねーの
0013デフォルトの名無しさんNGNG
制御系ってOSとかじゃないの?
0014デフォルトの名無しさんNGNG
Cが使われる制御系ってプロセス(工程)制御とか
エンジン制御とか埋め込み系じゃなか?
0015デフォルトの名無しさんNGNG
C をやる前に Lisp か scheme をやったほうがいいYO
0016デフォルトの名無しさんNGNG
>>15
まじかよ!
Emacs Lispとか?
0017デフォルトの名無しさんNGNG
>制御系っていうのはウイルスからPCを守ったりする
>ソフトを開発する仕事のことですか?
違う。

>制御系ってOSとかじゃないの?
それも違う。

厳密な定義がある訳じゃないけどある特定の機械を動かすためのプログラムをさして
制御系とか組み込みなどという。いま身の回りにある電化製品はほとんどICが入っていて
これを「制御」しているのもやはりプログラムなわけです。
Cはこの制御系でよく使われるのですがそれは言語仕様が小さくてプログラム全体が
小さくできるからです。
0018デフォルトの名無しさんNGNG
>>17
> 小さくてプログラム全体が小さくできるからです。

比較的低水準だからだとオモテタ
0019デフォルトの名無しさんNGNG
制御系と組み込みは同じものだったのか・・・
逝こう・・・
0020デフォルトの名無しさんNGNG
>>17
前橋さんの本でちょこっとかいてあったんですけど、「テレビのリモコンに使う組み込みチップ」
などは実務における、Cのよくある使い方の1つなのですか?
初心者丸出しの質問で申し訳ないですが。
0021デフォルトの名無しさんNGNG
>>18
だからプログラムを小さくできるということでは。
0022デフォルトの名無しさんNGNG
言語仕様が巨大で、処理系も巨大でも、サイズの最適化が強力ならプログラムのサイズ小さくできるんでないの?
0023デフォルトの名無しさんNGNG
>>22
巨大も部分による。
予約後が莫大=巨大というとらえ方もあるし
0024デフォルトの名無しさんNGNG
プログラムサイズがどうのこうのっていうのは、処理系側の話では?
0025デフォルトの名無しさんNGNG
Smalltalkは予約語は無いし文法は最小限だけど、おせじにも言語仕様が小さいとは言えない、とか。

で、Cは出力されるコードが予想やすい言語仕様だから、小さく作りやすい、って事でないのかな?
あとライブラリが切り離せるとかもあるかな。
0026デフォルトの名無しさんNGNG
void (*MainLoop)()=StartInit;

while(1){
 if(PeekMessage(&msg,(HWND)NULL,0,0,PM_REMOVE)){
  if(msg.message == WM_QUIT) break;
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }else{
  MainLoop();
 }
}

というふうにループ構造を作って,

void StartInit()
{
   printf("はじめ\n");
   MainLoop=SecandInit;
}

というふうにしているのですが、危険でしょうか?
0027デフォルトの名無しさんNGNG
>>26
ぜんぜん平気。
0028デフォルトの名無しさんNGNG
でもダサイ
0029デフォルトの名無しさんNGNG
>>28
ガ━━Σ(゚д゚lll)━━ン
0030デフォルトの名無しさんNGNG
>>26
そう言う風にする危険性より、MainLoop と言うへんてこな変数名や
SecandInit とか言う Manoy に匹敵するスペルミスが、あなたの
プログラムを糞なものにする危険性のほうが高いでしょう。
0031デフォルトの名無しさんNGNG
>>30
ガ━━Σ(゚д゚lll)━━ン

    ∧ ∧        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄ ̄( ゚Д゚) ̄ ̄|   < もう寝るよ。おやすみ。
|\⌒⌒⌒⌒⌒⌒\   \
|  \           \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\  |⌒⌒⌒⌒⌒⌒|
  \ |_______|
0032デフォルトの名無しさんNGNG
>>29 >>31
リアクションに ワラタ
0033デフォルトの名無しさんNGNG
>言語仕様が巨大で、処理系も巨大でも、サイズの最適化が強力ならプログラムのサイズ小さくできるんでないの?

スレの流れを読んでよ。制御系の話でしょ。
制御系と言うことはOS上で走らせるプログラムじゃないんだから汎用的なコンパイラの
最適化は無意味じゃん。

22にわかりやすく言えばOS(組み込みにOSも何も無いんだけど)に当たる部分も書かなきゃ
いけないということ。
003422NGNG
>>33
ハァ?
チミ、クロス開発って知ってる?
0035デフォルトの名無しさんNGNG
>>33
> 制御系と言うことはOS上で走らせるプログラムじゃないんだから汎用的な
> コンパイラの最適化は無意味じゃん。

ハァ ?

> 組み込みにOSも何も無いんだけど

ハァ ? (まあ、ない奴もあるけどさ...。)
0036デフォルトの名無しさんNGNG
ハァハァいうな。うみびらきならもうすぐだ。
0037デフォルトの名無しさんNGNG
善意に取れば >>35 は「ソースとオブジェクトが良く対応してた方が
(つまりソースがある程度低レベルな方が)組み込みのデバッグが楽」
といいたいのかも知れん。
003837NGNG
ごめん>>35じゃなくて>>33だった。
0039デフォルトの名無しさんNGNG
なんかこう、ちょびっとasmとかm80とかの使い方覚えて
最適化のこと分かった気になって、ついつい2chでかたりはじめちゃう連中、
ほのぼの。
0040デフォルトの名無しさんNGNG
>>37
> つまりソースがある程度低レベル
お前のプログラムみたいだな。(藁)
00412NGNG
(藁を(藁)とする>>40は新参
0042デフォルトの名無しさんNGNG
>>41
2ch の古参でうれしいの ?
0043デフォルトの名無しさんNGNG
必死な>>42を晒しage
0044デフォルトの名無しさんNGNG
>>42
新 参 者 必 死 だ な ( 藁
0045デフォルトの名無しさんNGNG
√藁
004642(騙りNGNG
そう、よかったわね。
004735NGNG
>>37
そんな変な取り方すんなよ。
別に制御系と言ったって、特殊なコンパイラ使ってるわけじゃない。まあ、
CPU が普通と違うとか、いろんな領域のアドレスがちゃんと指定できる
(どっちかってーと、リンカの仕事もあるけど) 等の機能はあるけど、
最適化に関しては、普通のコンパイラと同じだよ。
「組込に OS も何も無いんだけど」に至っては、何年前の話だ ? って感じが
する。まあ、俺もテレビのリモコンなんかは手がけたこと無いから、そのクラス
だとそう言うこともあるとは思うが、ちょっと大き目の LBP とか、銀行の端末
とかなら最近は、OS 乗せるのが普通。特に、GUI と Net (.NET では無いぞ。
TCP/IP とかのことだよ。) と ファイルシステムを備えるものなら、まず OS は
載っている。ちなみに、携帯電話用の OS もあるのは、知ってるよね。
0048綾ナムナム(´人`)NGNG
>>47 そんな必死に言い訳しなくてもいいのよ
ここがどんな場所だかわかってるの?
0049デフォルトの名無しさんNGNG
>「組込に OS も何も無いんだけど」に至っては、何年前の話だ ? って感じが
>する。まあ、俺もテレビのリモコンなんかは手がけたこと無いから、そのクラス
>だとそう言うこともあるとは思うが、

いやまさにそういうレベルの話だったんだけど自分の周りの方が特殊だったんだ、、。
おはずかしぃ。
0050デフォルトの名無しさんNGNG
目からもろこ?
0051デフォルトの名無しさんNGNG
ちなみに33 = 49でそれ以外の方は違う方です。
善意の方も悪意の方もネタの方もそのつもりでお願いします。

#いや善意にとってくれた人が自己弁護しているようにとられているから申し訳なくて、、。
0052デフォルトの名無しさんNGNG
正直、OSが使える人は羨ましい
仕事でブッちぎれたときはHello,world.
標準出力がある幸せ
0053デフォルトの名無しさんNGNG
もろこ!!
005447NGNG
>>48
あらあら、言い訳にしか取れなかっただね。ごめんな、あんたにはちょっと
難しすぎたみたいね。

>>49
まあ、そう言う世界もあるらしいけど、制御系一般の話としてはちょっと
ね。ところで、OS 云々はいざ知らず、そう言うクラスの話だと、
「汎用的なコンパイラの最適化は無意味」なのか ? メモリーが少なそう
だからプログラムサイズを最優先にするとかのことを言ってるのか ?
0055デフォルトの名無しさんNGNG
正直、小規模組み込み系の話はそっち系のスレでやって欲しい。
0056デフォルトの名無しさんNGNG
不特定多数が相手なんだから、
相手の解釈がどうのこうの言わずに自分の表現を変えてみたら?
0057デフォルトの名無しさんNGNG
>>56
誰に言ってるんだ。誤爆か ?
0058デフォルトの名無しさんNGNG
リスト構造のプログラムで
struct node {
int data;
struct node *next;
};
なる構造体を定義し、メモリを確保する際に、
struct node *p_new;
p_new=(struct node *)malloc(sizeof(struct node));
とC言語の本に載っています。しかしながら、別の本には、
p_new=(struct node *)malloc(sizeof(struct node)+4);
のように+4、あるいは+8などしているのですが、これは
なぜでしょうか?何のためでしょうか?教えていただけませんか?
いずれにしてもコンパイルは出来ますし、実行も正常にできます。
0059グリーンNGNG
どなたか、ぜひ教えて下さい。
Windowsプログラムで、エクスプローラでフォルダを選択して右クリックの[共有]で開く画面(フォルダ共有設定をする画面)を出したいのですが、方法はないものでしょうか。
0060デフォルトの名無しさんNGNG
>>58
一般的に言って足す必要なし。
+4してる本に特殊な状況であることについての説明があるんじゃないの?
もしなければその本がクソ。
0061デフォルトの名無しさんNGNG
理由なんか無いだろ
0062デフォルトの名無しさんNGNG
>>59
C言語じゃ無理だね
0063デフォルトの名無しさんNGNG
>>62
ワラタ
0064デフォルトの名無しさんNGNG
>>58
メモリー屋さんの陰謀かもしれん。その本の題名と著者をさらせ。
と言うのは、おいといて...
struct node {
 struct node *next;
 int data[1];
}
って定義して (next と data の順序に注意)、
p_new = (struct node *)malloc(sizeof(struct node) + 4);
なら、p_new->data[0〜1] が使えて
p_new = (struct node *)malloc(sizeof(struct node) + 8);
なら、p_new->data[0〜2] が使える。と言う方法は昔あったけど...。
ちなみにこれは、sizeof(int) == 4 を仮定してるから、普通は...
p_new = (struct node *)malloc(
 sizeof(struct node) + (n - 1) * sizeof(int));
と言うようにやる。
0065デフォルトの名無しさんNGNG
つうか質問です。
コンパイラ(visual C++.NET)は
どうしてレジストリいじくっちゃうんですか?
仕組みわかる人教えて
0066デフォルトの名無しさんNGNG
>>65
API。アフォか。
0067伊集院光NGNG
突然ですが私は伊集院光です。水曜25時25分
ゲームWAVE見てね。


0068デフォルトの名無しさんNGNG
>>67
前まで見てたけどお前アフォなので見なくなった
0069デフォルトの名無しさんNGNG
>>58
むかしむかし小さなメモリブロックをアロケートすると4だか8だかの倍数の
大きさにメモリブロックのサイズを調整しようとした時にバグになる処理系があった。
もしかしたらそれのトラウマが感染してるんじゃなかろうか?
007058NGNG
>>60,>>61,>>64,>>69
レスありがとうございます。助かりました。
0071記念式典国民大会NGNG
なんかこのスレも回数を増すごとに>>1の名前におもしろみが薄れていく・・・
スーパーハイソサエティーハッカー日下部陽一から次はどう来るか楽しみだったのに・・・
0072デフォルトの名無しさんNGNG
俺は糞壁の名前だけでむかつくから使わんで欲しいが。
0073デフォルトの名無しさん NGNG
くだらない質問なんですけど、
TurboC++っていうコンパイラソフトで、
複数のファイルからなるプログラムをコンパイルする時はどうすればいいのでしょうか?
初心者なので優しく教えてね。よろしくお願いします。
0074デフォルトの名無しさんNGNG
>>73
tcc file1 file2 file3...
もしくはmakeを使う。
0075デフォルトの名無しさんNGNG
>>73
IDEからやりたいのなら、プロジェクトにコンパイルしたいファイルを追加する。
しかし、Turbo-C++のIDEのプロジェクトにはバグがあって、よく泣かされたな・・・・
(遠い目)
0076デフォルトの名無しさんNGNG
>>74
レスありがとうございます!

出来ればtcc file1 file2 file3...、メイクの使い方を詳しく教えてください。
たびたびすいません。
0077デフォルトの名無しさんNGNG
>>76
例えばfile1.cとfile2.cとfile3.objをコンパイルしたければ

tcc file1.c file2.c file3.obj

file1をオブジェクトファイルにコンパイルしたければ

tcc -o file1.c

makeはmakefileに次のような内容を編集する。

file.exe: file1.obj file2.obj file3.obj
0078デフォルトの名無しさんNGNG
>>77
スマソ。tccのオブジェクトファイル作成は

tcc -c

だったです。
0079デフォルトの名無しさんNGNG
>>77
何回やってもエラーが出ちゃいます(泣

tcc -c file1.c←あんまり意味がわかりません。。。すません。
根本的にどう繋げればいいか教えてくれると嬉しいです!
0080デフォルトの名無しさんNGNG
>>75
レスありがとうございます!
それって単純に複数のプログラムを開いてコンパイルのボタン押すだけのことですよね?
0081デフォルトの名無しさんNGNG
TurboC++ってマニュアルねーのかよ。
0082デフォルトの名無しさんNGNG
なんかみんな親切やねぇ。
0083saNGNG
初心者です。

10     15  
5   →  10
3   を  5
       3

というふうにファイル(.txt)の先頭に書き込みしたいのですが、
fseekでストリームのファイルの位置をを先頭にもってきて書き込みすると、
15
5     と2行目が削除されてしまいます。
3

どうしたらうまくいくでしょうか?レス頂けるとありがたいです。
0084デフォルトの名無しさんNGNG
ファイルの中身全部読み込んで1行書き込んでから
読み込んだ内容を戻してやったらだめなの?
0085デフォルトの名無しさんNGNG
>>83
いきなりファイルの上で挿入する手段は無い。
>>84のいうとおりメモリ上で挿入してからファイルに書くか、もう1つファイル使え。
0086デフォルトの名無しさんNGNG
他スレにも書いたのですが、
VC6.0にてfopen()を発行するとerrnoが12(ENOMEM)でエラーになってしまいます。
また、この現象が起こるPC、起こらないPCがありまして、
エラーとなっていたPCでも電源を切って翌日になると成功し始めたりします。。。
対策方をご存知でしたらおしえてください。おねがいします。
0087デフォルトの名無しさんNGNG
マルチは氏ね
0088デフォルトの名無しさんNGNG
コンパイルエラー?
DLLかなんかがぶっ壊れてるか、マシンの日付が未来になってるとか。
新規インストールのOSと新規インストールのVCで動作確認しる!

再現性がないやつは特定が困難かもなぁ。
0089デフォルトの名無しさんNGNG
ENOMEM・・・本当にメモリが足りないとか?
それとも、ディスクが足りなくなってるとか、リソースが尽きてるとか、ファイルを開きすぎてるとか(閉じてないとか)、それ系のエラーかと。
0090デフォルトの名無しさんNGNG
>>88
コンパイル時ではなく、実行時のエラーです。
ちなみに、一度エラーが起こらなくなるともう大丈夫なようです。
0091デフォルトの名無しさんNGNG
>>89
同じスペックのマシンでも動く動かないがあるので、メモリは大丈夫なので、
リソースなのかなぁ。。。。?
0092デフォルトの名無しさんNGNG
>>91
CRTのソースのfopen関係のあたりでENOMEM検索してみれば
いいんでない?
0093デフォルトの名無しさんNGNG
雑誌で,
for(i=0;i<20;i++){
 Num[i]=i;
}

を

for(i=0;i<10;i+=2){
 Num[i]=i;
 Num[i+1]=i+1;
}

としたほうが早くなるよ。
都かいてあったのですが,皆さん使ってますか?使ったほうがいい?
0094デフォルトの名無しさんNGNG
>>93
loop unrollingだな。
オプション付ければコンパイラがやってくれるよ。
0095デフォルトの名無しさんNGNG
>>93
この程度はコンパイラが最適化するだろ。
バグを生みやすい意味不明のコーディングは逝ってよし!
0096デフォルトの名無しさんNGNG
無駄。>>93
実際の性能改善だと
そんな細かい小細工以前に
やる事がたくさんある。
0097デフォルトの名無しさんNGNG
関数の戻り値として,文字列を返したいのですが,

char *ReturnMoji(int i)
{
if(i==1)
return "1だよ"
if(i==2)
return "2だよ"
if(i==3)
return "3だよ"
}

というふうにして,char Text[256]; char mes[256];
Text=ReturnMoji(1);
sprintf(mes,"答えは%sです",Text);
DrawText(hdc,mes,-----);
としているのですが,%sの部分が変な文字で表されます。
どうしたらいいでしょうか?
0098デフォルトの名無しさんNGNG
>>97
それでコンパイルが通るはずが無い。
ちゃんとコンパイル済のソースを賭。
0099デフォルトの名無しさんNGNG
>>97
その方法では無理なので

char *ReturnMoji(char *buf,int i)
{

〜

return *buf;
}

な感じで
0100デフォルトの名無しさんNGNG
そもそも、
char Text[256];
Text=ReturnMoji(1);
constの配列にポインタは代入できまへん。
0101デフォルトの名無しさんNGNG
>>98
まぁまぁ、コンパイラじゃあるまいし。

>>100
レベルの低い煽りだな。
■ このスレッドは過去ログ倉庫に格納されています