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

このエントリーをはてなブックマークに追加
1983 ◆HIHn86y.
C言語質問スレッド Part 28

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART4
http://pc.2ch.net/test/read.cgi/tech/1022961238/l50

・前スレ

<26> http://pc3.2ch.net/test/read.cgi/tech/1026048820/
<25> http://pc.2ch.net/test/read.cgi/tech/1024918442/
<24> http://pc.2ch.net/test/read.cgi/tech/1024033400/
<23> http://pc.2ch.net/test/read.cgi/tech/1023024817/

コンパイラなどのリンクは>>2-3 あたり
void日下部氏の激動の半生は過去スレを参照
2983 ◆HIHn86y. :02/08/05 06:18
【コンパイラ】
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

【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。
3983 ◆HIHn86y. :02/08/05 06:22
すまん、前スレ入れ忘れた。

<27> http://pc3.2ch.net/test/read.cgi/tech/1027160374/
4デフォルトの名無しさん:02/08/05 06:25
>>1-3
カレー
5ビル・ジョブス:02/08/05 07:48
27歳になりますた
6260:02/08/05 08:37
#include <stdio.h>

#define PI 3.14 /* 円周率 */

main()
{
float r, S;

scanf("%g", &r);
S = r * r * PI;
printf("%g\n", S);
}

こんな感じのを
*fp使って、ファイルには1から10の数字は与えられている場合どうするの?

面積計算は必要です。
出力は
1  3.14






な感じになるようにお願いします


fを付けてループ回す
なにが解らないのかもちっと具体的にかきませう
>scanf("%g", &r);
fscanf(fp, "%g", &r);
スレ立てお疲れ>>1
インタプリタもどきを作りたいんですが、
-----
#!/home/foo/bin/prog
aaaa
bbbb
-----
こういう風に起動して、prog(インタプリタ)がコマンド(aaaa,bbbb)を読むた
めにはどうしたらいいですか?
1110:02/08/05 10:32
書き忘れましたが、環境は Linux です。
>>10
stdin
1310:02/08/05 10:45
>>12
stdin は試したのですが、やり方が間違っているんでしょうか。

-- foo.c --
#include <stdio.h>

int main()
{
char c[1024];

fgets(c, 1024, stdin);
printf("c=%s\n", c);

return 0;
}
----
-- foo.sh --
#!/home/bar/bin/foo

aaaaa
-----

これで aaaa を読み込んで表示させたいのですが、foo.sh を起動するとキー
ボードからの入力待ちになってしまいます。
14デフォルトの名無しさん:02/08/05 11:13
C言語で音楽ファイルの周波数をいじりたいのですが、どんな感じで処理すればいいのでしょうか?どなたか御教授下さい。お願いします。
>>14
フーリエ変換。
>>13
> printf("c=%s\n", c);
system(c);
1714:02/08/05 11:31
>>15
もちろんフーリエ変換はやりますが、フーリエ変換をしたあとで、
周波数帯で区切っていくという処理をしたいのです。
>>14
人間のカタツムリ管はA/Dコンバータと同等の機能らしいので
取り外して解析してみてはどうです?
>>18
単に

空気振動−>電気

ブリッヂでは?
>>14
WAVをいじれれば判ると思うが。
>>17
周波数領域のデータが得られるんだから後は配列処理だろ。
23デフォルトの名無しさん:02/08/05 14:24
質問です。
画像を表示させるにはどうすればよいのでしょうか。
>>23
OSと言語と環境とついでにおまえのIQまで全部書いてからもう一度質問しなおせ
>>12
え???

>>10
スクリプトは、#!の行のコマンド名(インタプリタ)に、そのスクリプト自体を
起動したコマンドラインを追加して実行したのと同じになる。
例えば>>13の場合、./foo.sh を実行すると、
/home/foo/bin/prog ./foo.sh というコマンドを実行したのと同じ。
だから、argc, argvで引数を受け取ってそのファイルをオープンしてやれば
いいよ。
26デフォルトの名無しさん:02/08/05 14:34
>>24
OSはWindows
言語はC
環境は…忘れた
IQは127(2年前)
>>24
> OSと言語と環境とついでにおまえのIQまで全部書いてから
それよりも肝心なのが
 「表示したい画像フォーマットって何?」
じゃないかな?
28デフォルトの名無しさん:02/08/05 14:37
>>27
bmpです。
>>28
setDIBits()。

俺優しすぎ?
30デフォルトの名無しさん:02/08/05 14:41
>>29ありがとうございます!
ところで、ヘッダーファイルは何をインクルードすればよいのですか?
それから、setDIBits(ファイル名);でよいのですか?
31デフォルトの名無しさん:02/08/05 14:46
>>30
(°Д°)ポヵーン
>>30
頼むからここに行ってから質問してくれ。
http://www.kumei.ne.jp/c_lang/

それから、すれ違い。ここで質問しる!

Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/l50
ついでじゃ。
ここいけ。
第26章 ビットマップ画像の表示
http://www.kumei.ne.jp/c_lang/sdk/sdk_26.htm
34デフォルトの名無しさん:02/08/05 14:52
す、すみません。スレ違いだったのですね。
いろいろ教えてくれて、どうもありがとうございます。
3510:02/08/05 16:16
>>25
なるほど。
勉強になりました。ありがとうございます。
36デフォルトの名無しさん:02/08/05 18:17
C言語でsin波のポイントを出したいのですが簡単なアルゴリズムあったら教えてください。
1Hz で 最大値500、最小値-500 よろしくお願いします。
ポイントって何?
>>36
サンプリング角周波数は?
3936です:02/08/05 19:01
double value, radius=0.0;
わかりづらい質問で申し訳ありません。
ちと、作ってみました。

#define TOP_VALUE 500
while( 1 ){
  radius += 0.064;   /* サンプリング周波数に合わせて */
  value = sin( radius ) * TOP_VALUE;
}
こんな感じで大丈夫ですか?
4036です:02/08/05 19:03


#define TOP_VALUE 500

double value, radius=0.0;
while( 1 ){
 radius += 0.064;   /* サンプリング周波数に合わせて */
 value = sin( radius ) * TOP_VALUE;
}
関数を知らんのかと。
4236です:02/08/05 19:17
>>41
関数ってC言語の関数ですか?
それとも三角関数ですか??
>>42
で?>>40じゃ駄目なの?
試してないけど動くんじゃないの?
>>43
>>36の言う「ポイントを出したい」ってのは、
「波形をプロットしたい」という意味ではないかと思ってみたり。
>>44
ますます関数だな。
>>1にいいたい!
ちゃんと名前をネタにしてくれ。つまらなくても何でもいい!
「983 ◆HIHn86y.」←こりゃないだろ・・・
47デフォルトの名無しさん:02/08/05 21:15
どなたか助けてください。

double a;
short b;
a = 0.29;
a = a * 100;
b = a;
printf("%d\n", b);

ってやると28と表示されます。
29と表示させるにはどうしたらよいでしょう?
>>47
丸め誤差、切り捨て誤差、等々を調べる。
49デフォルトの名無しさん:02/08/05 21:26
>>47
double型からshort型に変換されたからデータが失われているのでは?
質問!
stdio.hって、なんて読むんだ!
ストヂオ ドット エッチ?
51デフォルトの名無しさん:02/08/05 21:28
>>48
>>49
ども!
はい。意味はなんとなくわかっております。
こういう場合の定石などありましたら教えていただきたいのです。
例えば、0.1を足しとけ。みたいな。
>>50
ストゥドィオ.エチー
>>50
俺は
スタンダード・アイオー ドット エイチ
って読んでる。
54デフォルトの名無しさん:02/08/05 21:31
スタンダードアイオーピリオドヘッダー
>>51
とりあえず、整数化する時に 0.5 足しとけ。
56デフォルトの名無しさん:02/08/05 21:33
>>51
short b;
をdouble bにしてみろ。すると、-1になるだろ。
だから、29より1少ない28が出力される。
>>55
ダメプログラマでは?
>>50
そもそもstdio.hとは
スタンダード・インプット・オウトプット.ヘッダーファイル
の略なのだよ。
つまり、stdio.hには正式な読み方はない。
すなわち、自由に発音して結構ということである。
59デフォルトの名無しさん:02/08/05 21:37
>>56
おー。すごいっす。
ひょっとして、これは大きなヒントですか?
ちょっとかんがえてみます。
60デフォルトの名無しさん:02/08/05 21:38
>>58
スケベ・タコ・ダメ人間・インポ・オナニー.変態
の略かと思ってた世
61デフォルトの名無しさん:02/08/05 21:39
>>56
だましましたねー
>>60ワロタ
63デフォルトの名無しさん:02/08/05 21:40
a = a * 10 * 10;
でいけるよ。
0.29 と 100は桁が違いすぎる。
で、結局stdio.hは何て読むの?
>>63
つまんね。
66デフォルトの名無しさん:02/08/05 21:41
>>63
うがー。感動しますたー
ちょっといろんな数字で試してみます。
javac ジャバック?
>>64
>>60 以外なら、大体通じるよ。
>>67(゚Д゚)ハァ?
>>67
ハァ――――――(゚Д゚)―――――?
71デフォルトの名無しさん:02/08/05 21:48
>>63
0.47で破綻しますた。
72デフォルトの名無しさん:02/08/05 21:52
Cを理解するならコンピュータの構造を理解しないといけないっていうのは本当ですか?
具体的にはどのようなことでしょうか
>>72
機械語
>>72
2進数、16進数、論理演算、IOポート、割り込み、etc...
>>60
海馬の奥から呼び覚ましてくれてありがとう(w
>>72
C++
>>72
用途による。
78デフォルトの名無しさん:02/08/05 22:04
>>72
最低でも、WindowsXPを設計できるぐらい、コンピュータの構造を理解していないと
文字を画面に出力することは出来ないな。
>>72
最低でも、モニターをチンカスで代用できるぐらい、コンピュータの構造を理解していないと
文字を画面に出力することは出来ないな。
>>72
最低でも、ダスキンにフィルターを交換してもらえるぐらい、コンピュータの構造を理解していないと
文字を画面に出力することは出来ないな。
>>72
最低でも、PCとCRT・LCDの構造について電気電子学・情報科学的に理解していないと、
文字を画面に出力することは出来ないな。
>>81
同感。例えば、マザーボードに乗っているチップセット名だとか。
>>82
その中のトランジスタ数とか。
>>83
RGBの信号だとか。
>>72
最低でも、童貞卒業しないと
文字を画面に出力することは出来ないな。
>>85
女にはできないのか?!
>>72
まあ、そんなに心配するなよ。
童貞用の言語、BASICがちゃんと用意されているから。
>>86
女は生まれながらにして、出力できる。
89デフォルトの名無しさん:02/08/05 22:32
おんなは入出力
90デフォルトの名無しさん:02/08/05 22:39
>>72
「最低!! 信じてたのに私をだましたのね!!
私はこれからどうやって生きていけばいいの?
責任とってよ!!!!」

と言われる位コンピュータの構造を理解していないと
文字を画面に出力することは出来ないな。



おんなは入出力
>>63,>>71
俺もこの問題で昔悩みました。
結局、doubleは使わず、固定小数点形式、と考え
100倍に桁上げて整数演算することで逃げたーYO!
93デフォルトの名無しさん:02/08/05 22:50
IOポートってなんですか?
>>93
10ポート。

1ビットのことだ。
>>94
違うな。
I/Oポート、は「エロポート」の事にきまっとる。
96デフォルトの名無しさん:02/08/05 23:00
出したり入れたりして熱くなるんだよ。
97 (-_-):02/08/05 23:15
          |          |          |
          | リッタイテキニ    .|          | リッタイテキニ
          | ミエル?        |          | ミエル?
        (-_-)        |       (-_-)
        (∩∩)───── .|       (∩∩)─────
      /              |      /
    /                |   /
  /                  | /
みえるよ。
あの、質問なんですが
Cスレの序盤は何故いつもネタスレ化するんでしょうか
立体的に平べったい罠
お前ら大事なものを忘れてるぞ。

角度とかを理解してないと
文字を画面に出力することは出来ないな。
>>102
私のは90度で左曲がりですが何か?
なんかビビビと電波がかけぬけたような気がしないでも無い。
105デフォルトの名無しさん:02/08/06 00:46
ネタすれに質問でいいのかわかりませんが・・・
最近Javaを使ったWebAPPを作成しているのですが、Excel/Wordを吐き出したい
という要望があげられました。
普通どうするのでしょうか?
私なりにJava-JNI-DLL-(ExcelOLE)を呼び出すと考えたのですがDLLって
基本的にVBのActiveXDLLしか作ったことがないんです・・・
そもそもDLLってAPI DLLとActiveXDLLとあると聞いたのですがこの辺詳
しい書籍とかあるのでしょうか?VC++で作ろうとするとテンプレートで
MAINDLLだかってメソッドが初期で用意されるんですが、この意味もいま
いち謎でして・・
それとも根本的にJava−JNI-DLL(ActiveXDLL)-(ExcelOLE)って不可能?
もっともWindows環境でなければ使えない、Javaで.NETソリューションを
扱うなといわれそうですが
誤爆?
107デフォルトの名無しさん:02/08/06 00:47




Windows環境でなければ使えない、Javaで.NETソリューションを扱うな



Excelのファイルを吐くWinサーバーを立ててftpかなんかでゲトってのは?
109超初心者:02/08/06 01:24
ソートとサーチのアルゴリズムは覚えるしかないんですか?
>>109
一回本見ながらでも書いて、あとはそれを利用すればいいんでない?
111超初心者:02/08/06 01:30
>>110さん
興味はあるんですけど、いまいち勉強の仕方が分からないんですよね。
質問に答えてくださってどうもありがとうですm(__)m
>109
全てのアルゴリズムを丸暗記する必要はなくて、どういうときにどういうアルゴリズムを
使うべきなのか、ってのをきちんと覚えておけば、あとは必要になったときに
書籍やらネットやらで調べればよい。
まあ、主要なアルゴリズは覚えといたほうがいいかもしんないけど
113じゃかーた:02/08/06 01:33
>>105
http://www.terra-intl.com/jakarta/poi/
ネタにマジレスかこわるい。
114超初心者:02/08/06 01:39
>>112さん
ありがとうですm(__)m

あと、本読んでるだけだと、やっぱり上達しないですよね?
プログラミングをスラスラ打てる方は、どうやって勉強したんですか?
是非教えて下さいm(__)m
キューにデータを詰める時、必ずしも順番通りでないデータを順番通りに取り出したい
んですが(あるいは入れるときに順番とおりでもいいです。)、調べてみると色々やり
かた(アルゴリズム)があるみたいですが、基本的にソートして全部を舐めないといけ
ない。これはデータの個数が増えると処理時間も増えてしまいます。とにかく軽くでき
ないでしょうか?malloc/freeをその都度しないといけない線形リストもいや〜んな感じです。
ちなみにキューに入れるデータの個数は50個固定だとします。
>114
やっぱ体(手動かして)で覚えるしかないんじゃないかな。
少なくともおれは読むだけでは吸収できない。

>115
50個程度ならあまり違わんと思うが、
配列でやりたいなら、ヒープがいいんでない?
117116:02/08/06 01:58
てか、50個固定なら、線型リストでもmalloc/free必要ないけどね
118デフォルトの名無しさん:02/08/06 01:58
キューだけに・・・                                  qsort
>>114
アルゴリズムは別に覚える必要はあるまい。
「ああいうのあったな」というのと、それが載ってる本さえ覚えておけば。
試験じゃないんだから、本見てプログラム書いたって誰もカンニングとは言わん。

最近じゃアルゴリズムに加えてデザインパターンなんてのも覚えといたほうが
いいようだが、ここはCのスレだしあんまし関係ないな(w

ソートとかサーチみたいなのはプログラマにとって基礎体力みたいなもんで、
経験を積めば普通は自然と覚えるもんだ。

言える事は、一度はきっちりと理解しといたほうがいいということかな。
いろんなアルゴリズムに含まれてるアイデアは全然関係ない局面でも
使える場合が多いから。
120デフォルトの名無しさん:02/08/06 02:14
ずっと心の奥に引っ掛かってたことがあるんです。
15年ほど前にOh!PCかどこかでやってた林晴比古のC言語の入門講座で
関数名は大文字小文字を区別しないというようなことが書かれてた記憶が
あるんですが、そういう仕様の処理系ってあったんでしょうか?
当時は大文字小文字を区別しないリンカも多かっただろうけど、
「結果として区別できない」のと「区別しなくてよい」は別物だと
思うんですが。
あくまでも言語仕様は大文字小文字区別じゃないんでしょうか?
>>120
それはいくらなんでもデタラメ過ぎるだろ。
122260:02/08/06 04:41
#include <stdio.h>

#define PI 3.14 /* 円周率 */

main()
{
float r, S;

scanf("%g", &r);
S = r * r * PI;
printf("%g\n", S);
}

こんな感じのを
*fp使って、ファイルには1から10の数字は与えられている場合どうするの?

面積計算は必要です。
出力は
1  3.14






な感じになるようにお願いします
>>122結果的にマルチ
>>122
根本的にマルチ
むしろ鼠講?
>115
>キューにデータを詰める時、必ずしも順番通りでないデータを順番通りに取り出したい

それはデータ構造にキューを使っていること自体が間違いかもしれないよ。
だって先入れ先出しで処理したいからキューを使うわけでキューの順番を入れ替えるってことは
それはもうキューじゃないと思うんだが。
127デフォルトの名無しさん:02/08/06 10:16
すみません。この意味を教えて下さい。お願いします。

int fd=open(filename,O_RDWR);
>>115
> キューにデータを詰める時、必ずしも順番通りでないデータを順番通りに取り出したい
> んですが(あるいは入れるときに順番とおりでもいいです。)
意味が分からん。
「任意の順番で入力されたデータをそのデータのキー順に取り出したい」
ということか?
>>127
つぅか既に名が体を表しているな。

>>129
それ、キューじゃない気がするね。
>126
>129
>130
priority queue じゃないの?
>>131
> priority queue じゃないの?
ならば、Cで無理に実装せずにC++のSTLを使う...

# ってCスレで言ってしまって良いのか?
>>131
それならキューに突っ込む段で並べるからそもそもソートしない
134131:02/08/06 12:03
>133
>並べるからそもそもソートしない
並べることをソートというのでは?
135133:02/08/06 12:05
キューを使った挿入ソートの一種と見なすならそのとおり>>134
136デフォルトの名無しさん:02/08/06 14:21
Richard Stevensの詳解UNXIプログラミングで
勉強しています。サンプルコードをコンパイル
しているなかでエラーが出たのですが教えて下さい。

apue/signals/setops.cのなかで

int
sigaddset(sigset_t *set, int signo)
{
    if (SIGBAD(signo)) { errno = EINVAL; return(-1); }

    *set |= 1 << (signo - 1);/* turn bit on */
    return(0);
}
という個所があるのですが、この関数内における
  *set |= 1 << (signo - 1);
という行においてエラーが出ます。gcc-2.95.4における
エラーメッセージは以下の通りです。
setops.c: In function `sigaddset':
setops.c:12: invalid operands to binary |

これはどういう意味なのでしょうか?

使っているLinuxの/usr/include/asm/signal.hにはsigset_tは
#define _NSIG64
#define _NSIG_BPW32
#define _NSIG_WORDS(_NSIG / _NSIG_BPW)
typedef struct {
    unsigned long sig[_NSIG_WORDS]; 
} sigset_t;
このように定義してあります。

gccのコンパイラオプションで回避できるものなのでしょうか?
使っているマシン(i386)でsizeof(unsigned long)を確かめたところ
4バイトでした。
137超初心者:02/08/06 14:23
質問。Cで素数の足し算のプログラムを具体的に教えてはくれませぬか?
お願いしますm(_ _)m
#define _NSIG64
#define _NSIG_BPW32
これは
#define _NSIG    64
#define _NSIG_BPW  32
の間違いでした。スペース消えてすまそ。
139デフォルトの名無しさん:02/08/06 14:33
>>136
構造体にビット演算は無理だべ。
オプションいじっても無理。
140デフォルトの名無しさん:02/08/06 14:34
入力された文字列を,
あらかじめ指定しておいたテキストファイルから削除するには
どうすれば良いでしょうか?
141デフォルトの名無しさん:02/08/06 14:35
>>137
質問を幾つか
・出題者が「多倍長」ってフレーズを口にした?
・素数そのものはファイルに入っている?それとも計算する?
・ファイルに入っている場合、素数の桁数はどのくらいあった?
142デフォルトの名無しさん:02/08/06 14:36
>>137
素数の足し算って?
解説きぼーん。
143デフォルトの名無しさん:02/08/06 14:40
>>140
テキストファイルを読み込んで、メモリ上で文字列を削除して、
それからファイルに書き出す。
144超初心者:02/08/06 14:40
>>141
・多倍長ってのはいっていません。
・ファイルに入ってるとは素数のプログラムがですか??
・その意味なら入ってはいませんでしたが、問題は100以上、1000
 以下の素数のプログラムを作れとのことでした。。
145超初心者:02/08/06 14:44
すいません。素数の和のプログラムを作れの間違いでス。。
足し算?
>>144
こちらでプログラムが紹介されています
見ても解らなかったら再度こちらで質問をどうぞ

素数 "列挙" アルゴリズムを極めるスレ
http://pc3.2ch.net/test/read.cgi/tech/1018657457/l50
148デフォルトの名無しさん:02/08/06 14:48
>>145
「素数の和のプログラム」?
素数を足すことになにか意義があるの?
かけるならいざしらず
宿題?
151超初心者:02/08/06 14:51
>>149
意義はモレも知りませんが、そうゆう問題がでたんですよ。
152超初心者:02/08/06 14:51
>>150
まぁそんな感じです。。
>>139
なるほど、そうなんですか。ありがとうございます
>>153
つかincludeもその本に載ってなかったの?
>>154
ヘッダファイルは
#include <signal.h>
#include <error.h>
だけです。

どうにも分からないので放置します(笑
156*nix厨:02/08/06 15:38
>>155
よこレスですが
その本が、コードと解説で構成されているやつでしたら、
割り込みの解説のあたりに、割り込みレジスタの構成(何レベルとか)が
書かれていますので、それに合わせてsigset_tをint等に書きかえれば
大丈夫です。
>>156
おお、そうなんですか。ありがとうございます。
実は本を読まずにまずはコードばかりを動かしてました(汗
シグナルについて書かれた10章をよく読んでみます。
失礼しました。
158686:02/08/06 19:05
C言語始めたばっかりで、いまいちわかっていません^^;
コンパイルできないのですが…修正をお願いします^^;
#define MAX 10
#include<stdio.h>
void kan(int a[MAX],int b[MAX],int c[MAX]);
int main(void)
{
int a[MAX]={1,5,3,7,2,10,4,3,8,9};
int b[MAX]={6,1,9,5,4,4,3,3,8,9};
int c[MAX];
int i, total=0;
kan(a,b,c)
}
void kan(int a[MAX],int b[MAX],int c[MAX]);
{
int i,total=0;
for(i=0;i<10;i++)
{
total=a[i]+b[i];
c[i]=total;
printf("%d",c[i]);
}
}
void kan(int a[MAX],int b[MAX],int c[MAX]);←このセミコロンがいらん
{
>>158
次からコンパイルエラーが出たら、そのエラーメッセージをコピペしろ

11行目の
> void kan(int a[MAX],int b[MAX],int c[MAX]);
の最後のセミコロンを削除

あと
> for(i=0;i<10;i++)
で他は全てMAXと書いているのに何故for(i=0;i<MAX;i++)としない?
そこはsizeofで往くべきでは?
total=a[i]+b[i];
c[i]=total;
直接代入したらええがな。
> printf("%d",c[i]);

"%d "とかにしておかないと、結果が読みづらいと思われ。
>>161
> そこはsizeofで往くべきでは?
どこを?
ちなみにkanの中でsizeof a / sizeof a[0]を行っても
10にはならないよ。
もう一つあった。
> kan(a,b,c)
こっちは最後にセミコロンが抜けてる。
166デフォルトの名無しさん:02/08/06 20:06
えーと、sizeofで疑問なんですけど

char buf[256];
とかあったとして、sizeof(buf) は256になりますが、なんでですか?
bufというのは256バイトのchar配列の戦闘アドレスを指す
constなchar型ポインタだと思ってたので
sizeof(buf)で1が帰ってくるのが自然とか思い込んでました。
FAQ見ても説明つからないし。

まあサイズ帰ってきた方が便利なので今のままの方がいいけど
ポインタで1が返っちゃまずいだろ
>>166
> 戦闘アドレス
そんな物はない。はともかく

> FAQ見ても説明つからないし。
C-FAQ 6章 配列とポインターを小一時間読んでみろ
http://www.catnet.ne.jp/kouno/c_faq/c6.html
特に以下の箇所は音読するように
 6.2:でもchar a[]はchar *aと同じと聞いたことがあるが。
 6.3:Cで"ポインターと配列は同等"というのは何を意味しているのか。
 6.9:配列とは定数ポインターにすぎないと説明してくれた人がいた。
169686:02/08/06 20:25
158です。下のプログラムでコンパイルできました^^
助言ありがとうございます!
ついでに聞きたいのですが…このプログラムにつぃて口頭試問をするのですが…
どういった質問ができるかいくつか教えて(出題して)もらえますか?
自分なりに答えを考えたいと思うのですが^^;
#define MAX 10
#include<stdio.h>
void kan(int a[MAX],int b[MAX],int c[MAX]);
int main(void)
{
int a[MAX]={1,5,3,7,2,10,4,3,8,9};
int b[MAX]={6,1,9,5,4,4,3,3,8,9};
int c[MAX];
int i;
kan(a,b,c);
}
void kan(int a[MAX],int b[MAX],int c[MAX])
{
int i;
for(i=0;i<MAX;i++)
{
c[i]=a[i]+b[i];
printf("%d",c[i]);
}
}

int main(void)が値をreturnしていないのはなぜか?
まあ
・kanて何?
・MAXを引数にしなかったの?
・printfは何してるの?
が最初か
>>169
> どういった質問ができるかいくつか教えて(出題して)もらえますか?
・そのプログラムは一体何をするプログラム?
>>169
・表示される答えが改行されないけど、君はこれで見やすいのかね?
とか。
174686:02/08/06 20:32
すいません^^;
170さんと171さんの2つ目がわかりません^^;
>>173
いまそれ書こうと思ってたw
176デフォルトの名無しさん:02/08/06 20:46
x,yで指定したところに文字を出力させるにはどうすればよいのでしょうか
>>176
せめて環境を。
178デフォルトの名無しさん:02/08/06 20:53
>>177
OSはWindows
コンパイラはVC++6、0
>>177
緑に囲まれていい所です。
>>176
yの分だけ改行してxの分だけブランクを入れる
181デフォルトの名無しさん:02/08/06 20:59
>>180
マジデ!?Σ(゚д゚)
>>179
緑?ダム端か?
183デフォルトの名無しさん:02/08/06 21:04
で、どうなの?
>>179
せめて都道府県名くらいわからないとどうしようもない。
185デフォルトの名無しさん:02/08/06 21:06
>>184
マレーシアです。
186デフォルトの名無しさん:02/08/06 21:07
x,y(int,int)
187686:02/08/06 21:18
174です。
教えてもらえないですか^^;?
>>187
コンソールアプリなのか、windowアプリなのか?
189686:02/08/06 21:25
WINDOW!
>>188
それは>>174じゃなくて>>176に対するレスでは…
海外のサイトで翻訳ソフトを使って勉強をしたいと思うのですが,
おすすめの翻訳ソフトあります?
プログラム的な事って,ちゃんと翻訳されるのかなぁ?
>>191
最低限の英語力付けるだけで十分だと思うけど。
自作とプログラミングの文章に出てくる単語はほんの僅か。
193Rina ◆tI333vNE :02/08/06 21:46
面倒でも英語勉強したほうがいいと思うな.
うーんそうですか。
英語辞書買って,あとはなんかのドリルでも買ってがんばります。
ベイヤフーで検索するんでしょうか(すれ違いぎみ)?
>166
>sizeof(buf) は256になりますが、なんでですか?

char buf[SIZE];
と宣言すると式中ではbufはbufの先頭要素を指すポインタに変換される。
このことを知っているとsizeof(buf)はsizeof(char *)と等しいと思うかもしれないが
sizeofはこれを"特別扱い"して配列全体のサイズを返す。
196Rina ◆tI333vNE :02/08/06 21:51
英単語調べるだけならedictで十分.
基本的に翻訳ソフトの訳文は笑いたい時に読むものだよ
「激しい穴・・・」とか出てくるからね
>>185
apa kabhar?
>>195
おお、便利だな。
>>191
Personal Dictionaryと英次郎を組み合わせる。
これ最強。
バビロンとかよりお勧めだ。
しかし>>190は結果的に板違いのヨカソ
202デフォルトの名無しさん:02/08/06 23:11
がー!バグだー!
error C2601: 'main' : ローカル関数の定義が正しくありません。
どういうことだ!どこが間違っているんだ!
>>202
ローカル関数の定義が正しくないようだ。
204デフォルトの名無しさん:02/08/06 23:18
>>179

なんかしらんが 
ワロタ
205デフォルトの名無しさん:02/08/06 23:19
>>202
しらん
>>202
質問の仕方が正しくないようだ
>>202
mainを検索する
考える
宣言がたぶん変なんだろう
Windowsでフルカラー表示するためのソースプログラムって
どっかにありませんか?

コンパイラはBorlandC++使ってます
>>208
意味がわからん
もう変更する必要のない関数をファイルにまとめて書きこみたいのですが,
普通は,やっぱり変更する必要がなくなっても,その関数が関係のある関数群をまとめたファイルに書きこんでおきますか?
>>210
ライブラリだね。
>202
コンパイルが通らないのはバグ以前の問題。がんがれ。
213 :02/08/07 01:42
>>202
{}の対応がとれていない。
>210
DLLにしちゃえ。
typedef po {
char *u;
char *c;
int aa;
} PO_PO, *PPO_PO;

#define UHU (*BOKO)(PPO_PO)

と宣言した場合、

BOKO

というのは実体がなくてもいいの?
 a = (UHU)uhyo;
みたいにかかれているコードが普通にコンパイルとおっているので、
これで問題ないのか先輩がおかしいのかわからないです。
先輩は「これで問題なく動くはず」と公言していますけど・・・
>>215
ああ、問題ない
Dev-C++ってどうよ?
>>217
今はβ版だよ。途中でMingW-3.0になったのだが、何か不都合があった
のか、またMingW-2.95.3に戻されているよ。

かなり安定してきた。
219検索しる:02/08/07 12:09
会話がわからねーよ
ウワァァァァァン
そんなあなたにここをオススメする
http://pc3.2ch.net/test/read.cgi/tech/1028450760/
221デフォルトの名無しさん:02/08/07 12:35
あるソースを読んでいて、

 typedef type1 type2[6]; /* (1) */

とあり、

 type2 val;

と使われていました。良く分からないまま、とりあえず、

 typedef type1[6] type2; /* (2) */

とは違うものなのだろうかと試してみたところ、これはコンパイルエラーになりました。

質問
(1) は (2)(コンパイルエラーになりますが)のイメージのようなものなのでしょうか?
それともまったく違う意味なのでしょうか?
イメージって?
意味がわからん
>>221
要素6っこの配列を作るときに
type1 a[6];
って書くのと同じこと。
>>221
はやく良くなってね。お大事に・・・
>>221
イメージではないです。
言うなれば、テキスト型のバイナリですね。 
226デフォルトの名無しさん:02/08/07 13:11
質問です。
#include<stdio.h>
int main(void)
{
int a;
while(1){
printf("入力しなさい\n");
scanf("%d\n",&a);
printf("%dです。\n",a);
}
return(0);
}
これを実行して、最初に1を入力したとします。
すると、変数aには1が代入されて、1です。と表示さますよね。
で、無限ループですから、また入力します。
今度は2を入力したとします。
そうすると、また変数aには2が代入されるはずですよね?
しかし、1です。と出力されてしまいます。
なぜでしょうか。
>>226
scanfの \n は不要
228デフォルトの名無しさん:02/08/07 13:22
>>227ありがとうございます。
なぜ、\nがあると正しく動いてくれないのですか?
229デフォルトの名無しさん:02/08/07 13:27
コマンドインタフェース仕様のスケジュール管理プログラムの
例題ソースみたいなのどこかにないですか?
230221:02/08/07 13:28
>>223
ありがとうございます。

>>222,224,225
アホですんません。
なんか、光化学スモッグ注意報が出てて、気分悪いんです。
Java の int[6] val; のイメージだったんだけど、まあそれはどうでも良いや。
> なんか、光化学スモッグ注意報が出てて、気分悪いんです。
ワラタ
>>228
qで終了できるエディタがあった場合、それで作ったテキストファイルにはqは出てこないはずである。
233デフォルトの名無しさん:02/08/07 14:10
>>232
誤爆でしゅか?
>>232
viはZZで終了できるけど何か?
:wq 2ch.bbs

Σ(゚Д゚) !!!
236デフォルトの名無しさん:02/08/07 15:50
/* 文字列を大文字に変換 */
char *touppers(char *s)
{
 static char buf[256];
 char *p = buf;
 for(;;p++,s++){
  *p = toupper(*s);
  if(*s == '\0') break;
 }
 return buf;
}
このような関数を作ったとき、引数と戻り値は
それぞれconst char*にするべきなんでしょうか?
いまいち判断基準がわかりません。
>>236
そもそも関数出た時点でその戻り値のアドレスの内容は不定なんだが。
const以前に,
関数内部のバッファのポインタをかえすのはやめましょう.
>>237
かぶった
スマソ
>>237
> そもそも関数出た時点でその戻り値のアドレスの内容は不定なんだが。
はずれ。
static char buf[256]; なので255以上の文字列を入力せず、
かつ、マルチスレッドで動作していなければ正常に動作する。
char buf[256]; ならば不定。
241237じゃないけど:02/08/07 16:14
どっちにしろ次に使うときにその領域は壊されるわけだから
「正常に動作する」とは言えないのでは?
242236:02/08/07 16:19
>>240
printf("%s %s", touppers("foo"), touppers("bar"));
でも破綻しますけどね。

staticのアドレスを返すのはinet_ntoa()などでもやっていることで
仕様をきっちり理解したうえで使う分には問題ないですよ。

唯一の問題は論点がずれていることです・・・
>>236

引数はconst char *でいいと思うんだけど、戻り値については、
constなのは戻り値そのものであってそのポインタの指している値ではないので、
const char *touppers() でなくて、char *const touppers() に
なると思うんだが…ちょっと自信なし。
>228
>なぜ、\nがあると正しく動いてくれないのですか?

たとえば
10 20 30
をscanfで読みとるときはscanf("%d%d%d", &a, &b, &c);でいい。入力フィールドは空白ではない
文字列とされる。逆にいうと空白文字で区切られているものは自動的にscanfが区切ってくれている。
注意しないといけないのはこの空白文字はブランク、タブ、改行、復帰、垂直タブ、改ページと
定義されているということ。だから
10 20 30 \t \nとあってもscanf("%d%d%d", &a, &b, &c);でちゃんと読み込める。

逆にこれをscanf("%d%d%d\n", &a, &b, &c);,scanf("%d%d%d ", &a, &b, &c);とすると
スペースや改行を読み込もうとするけど空白文字に埋もれて見つけることができなくなる。
>>240
ごみん、static見てなかった。
確かに保持されるわ。
でも、トリッキーといいわけ。
>243
char *const touppers()
だと「ポインタの指している位置を変更できない」って意味でしょ?変じゃない?
たとえば、strlen関数とかに渡せなくならない?やったことないのでわからんが
247246:02/08/07 18:03
>strlen関数とかに渡せなくならない?
全然大丈夫だね。寝起きでねぼけてたスマソ
248デフォルトの名無しさん:02/08/07 18:29
たとえば型がhogeの2次元の配列 array[N][M] を宣言した場合には、いつも
N × M × sizeof(hoge) バイトの連続したメモリがとられるものと
考えて間違いないでしょうか。それとも連続した M × sizeof(hoge) バイトの
ブロックが適当な(一定の)パディングつきでN個とられる場合もあるのでしょうか?

そして、それはどこで定めてあるのでしょうか? ANSI?
>>248
処理系依存
>>249
そうなの?
多次元配列も要は配列を要素にもつ配列なわけだから
連続したメモリ領域を確保するのでは?
251ふぅ〜 ◆WKHVTRQg :02/08/07 18:48
「先月7/25の、衆院安保委の会議録」を読んでいる内にこの事を歪曲報道した
マスコミに怒りを覚えたよ。だって、俺の記憶によると北朝鮮の惨状のみを
強調する内容だった。北朝鮮援助と難民受け入れへの意識を喚起するような
感じだった。
西岡参考人の「北朝鮮問題の本質は安全保障問題なんです。」が一番要約された
一言でキーワードに成り得るのだが。
252251:02/08/07 18:49
うわぁ、もろ誤爆スルーしてちょ。
>>250
struct {
 long l;
 char c;
} a[8][8];

なんて配列があったら大抵の処理系で、パディングですかすかだと思うけど。
>>253
泣きそうですな。
255デフォルトの名無しさん:02/08/07 18:58
質問です。
ポインタは具体的にどういうときに使われるのですか?
絶対にポインタを理解しろ言われるのですが、そこまで重要なのですか?
>>255
IOポート叩くときとか。
>>255
ポインタ無かったらC使う局面なんて・・・。
>>257
まったくだ。ポインタなかったら誰がこんな糞言語使うかってかんじ。
>>253
それは構造体のパディングであって配列の連続性とは無関係。
>>248
1次元配列作って、自分で2次元的にアクセスしたらいいじゃん
>255
int a=10;
int b=20;
これを入れ替える
void swap(int* a,int* b);
を作成する時。
参照とか言われそうだけど。
初心者にはこの辺が一番分かりやすい答えでは
なかろうか。
もっと奥の深い質問なら失礼。
>>260
y*(n / x) + n % xって奴ねw
>>255
Dynamicなことやる時、でかい型を引数にとったり返したり。
あとは文字列操作のインサイドを理解する時。
Cしか知らないんだけどCから派生した言語以外にはポインタ(それに相当するもの)ってないの?
どの言語にも似たような機能はあるもんだと思い込んでたんだけど
>>264
C++ そのもの+参照
Java 参照
C# 参照
Perl リファレンス
PHP リファレンス

Cから派生してネイティブコードはけるのはC++だけという罠。
>>264
Pascal系にもポインタはある。ポインタ演算ができないので、Javaの参照に近い。
Fortranは 77 にはないけど 90 からは導入されたはず。
>>265
待て。Objective-Cがあるぞ。ネイティブコード吐けるぞ。
>>267
記憶にございませんw
江藤
お前には失望した。
>>269
田中、すまんな。
いや、謝るべきなのは佐藤だろ。
272269 :02/08/07 20:38
いや.. 野球板に投稿するつもりが誤爆しちゃっただけなんだけど..
273佐藤(実名):02/08/07 20:42
ご、ごめん。
274( ・∀・)ヨロシクね!:02/08/07 20:42
オマエら!
俺にCRCについて原理からプログラミングの仕方まで詳しく教えてください( ゜д゜)タノム!
>ポインタは具体的にどういうときに使われるのですか?
>絶対にポインタを理解しろ言われるのですが、そこまで重要なのですか?
絶対に理解しましょう。重要です。というか基本です。
今でも知らずにポインタを使っているはず。

必ずでてくるのが参照渡し。261のswap()関数ね。引数の値を操作しようとするときはポインタを
渡さなくちゃならない。

それから関数に配列を引数に渡したい場合。配列そのものは渡すことができないのでポインタを
渡す。

後は文字列。文字列リテラルなんかはポインタに変換されて扱われている。
556
>>275
引数いじるって邪道な気がするけどね。
無名構造体とかできればいいんだろうか?
関数呼び出しもポインタに属する。
そういえば配列そのものは引数として渡せないけど
構造体はそのもの自体渡せるんだよね?
じゃあ構造体の要素に配列があった場合はどうなるのですか?
スタックがあふれそうなので構造体はあまり渡さないでください(ポインタを渡してください)。
>>280
そう言う逃げが嫌いだ・・・。
>>279
もちろん引数として渡すこともできるし、代入もできる
>277
>引数いじるって邪道な気がするけどね。

引数いじる関数って標準関数でもいくらでもありますけど。fgetsとか strcpyとか
全部そうだし、、、。何で邪道?
284( ・∀・)ヨロシクね!:02/08/07 21:08
教えてくれょぅ(=゚ω゚)ノ
>>284
知っているところまで書いてみたら?で、わからないとこを聴く。
286( ・∀・)ヨロシクね!:02/08/07 21:11
>>285
正直CRCについては全くわかんないのです。
検索かけていくつかソースみたんですが、さっぱりでした。
>>283
いや、概念的によ。
ある引数を入れたならある戻り値が帰ってくる。
あくまで引数はinputであるべきじゃないのかと。
だからPerl見たいに戻り値を複数返せるようになってたらいいんじゃないのかと。
288デフォルトの名無しさん:02/08/07 21:37
>>287
ポインタを引数にして、メンバへのポインタ演算子を使った値変更も不可ってこと?
>287
>ある引数を入れたならある戻り値が帰ってくる。
>あくまで引数はinputであるべきじゃないのかと。

気持ち的には分からなくもない。けど実際複数の返値は返せないし配列も返せないから
そういう場合は仕方ない。そのためにconstがあるわけだしポインタさえ渡さなければ
変更されない、逆にポインタを渡すのは操作を許すということだからこの仕様はそれなりに
いいと思う。個人的にはC++の参照渡しの方が怖い。

よそのHPで自分よりスキルがあると思われる人ってサンプルコードをみると大抵ポインタを渡して
関数ないで操作してるんだよね。何でかなと思っていたら大きいプログラムを書く場合は大抵
エラー処理用に戻り値を使うからだと気がついた。だからちょろっとしたサンプルコードを
書くときは返値がvoidでポインタを渡すような関数を書いている。
>>289
> 大きいプログラムを書く場合は大抵エラー処理用に戻り値を使うからだと気がついた。
だからC++とかは例外があるんだよね。(他にも理由はあるが)
エラー処理は例外、戻り値は戻り値として使えるから。
291デフォルトの名無しさん:02/08/07 22:16
質問します

今基礎的な算数のプログラムをやっているのですが
#include <stdio.h>の下にくるのが
ある本には"int main(void)"とかいてあって
ある本には"main()"とかいてあります
また
ある本には最後に"return(0)"といれるようにいってあるのに
ある本にはなにもいれてません
そして
どっちの方式でやっても結果は変わりません
どうしてでしょうか
またある本には
void main(void)

int main(int argc,char **argv)
などとかかれています。
>>291
C言語なら引数なしの括弧だけは評価されない
mainのreturn 0は明示的にやらないとシステムがやってくれる。
294デフォルトの名無しさん:02/08/07 22:20
>>291

int main(void)とmain()は同じ。
正しくはint型(例えば0)を返すべきだけど、コンパイラによってはエラーにしない。
相当良くある質問だけど、
気にしなくていいよ。
理解できる時になれば一瞬で理解できるから。
多分あなたのレベルじゃ
>293は理解できないでしょうし。
嫌味じゃなくて、いい意味でいまは置いておくことを
薦めるよ。
俺の本なんてdouble main(void)だぜ。
ということはグローバルやスタティック変数使わなくても
要素が配列ひとつだけの構造体を作れば
配列の値渡しが出来るというわけですね?
まあそんなことする必要性があるかどうかはわかりませんが
可能か不可能かということなら可能ということですよね?
>>297
一行目の意味がわからんが、可能なんじゃないかしらん?
Javaとかだとそうするみたいだし
299デフォルトの名無しさん:02/08/07 22:30
>>297
可能
300デフォルトの名無しさん:02/08/07 22:32
301291:02/08/07 22:32
質問に答えてくれた方ありがとうございます
ではとりあえずどっちでもいいということで保留しときます
きっとそれだけ自由な言語なんですね
302デフォルトの名無しさん:02/08/07 23:16
int型って、4バイトだったり8バイトだったりするらしいけど、
それはソースをコンパイルするパソコンによって違うの?
それとも、コンパイル後にできた実行ファイルを実行する
パソコンによって違うの?
>>302
そら、ターゲット依存にせざるを得ないわな。
304 :02/08/07 23:20
>>302
コンパイラによります
いや、あの
void main(void)
とか書いてある本って、捨てたほうがいいと思うんだけど。
書いたやつの規格の理解が怪しい証拠だし。
8バイト… いや、つっこむのも大人気ないとは思うんだが。
>>286
http://www.ncfreak.com/cecilia/memo/edcode.html#crc
後、
「C言語による最新アルゴリズム辞典」奥村晴彦著
この本に詳しい解説がある。買って読め。
>>286
あと、
ftp://ftp.matsusaka-u.ac.jp/pub/algorithms/src/
ここにある
crc*.c
ってやつをひっぱて置け。
>>306
ILP64モデルのコンパイラなら、intが8バイト(64bit)になるよ。
310( ・∀・)ヨロシクね!:02/08/08 01:02
>>307
早速そのHP読んできます。
アルゴリズムの本には手を出すなと昔ここでいわれたのでいまだに読んでないんですよ。
とりあえず立ち読みしてみるとこにします。。情報ありがとうございました

>>308
とりあえずダウソしてみました。
今中身みてますが、やはりわかんないかも・・・
とりあえず>>307が教えてくれたHPに概念がのってるので、それ読んだあと再度見てみます。
ありがとうございました
>>305
そう言う台詞はC言語まともに使いこなせるようになってからほざくもんだ。

お前とそのクソ本、どっちがCの知識が多いかと言えば後者だからな。
クソながらお前より賢い先生だ。無礼は許さん。
>>311
よくわからんが、嘘を堂々と書くやつは知識の多寡に関わらず賢くないと思うけど。
しかもC FAQにさえのってる有名な事例だ。それすらも知らんで知識多いの?

無礼かどうかはしらんが、嘘つきと無礼なやつだったらおれは無礼なやつを取るけどな。
いつもmainの定義ではつまんない議論になるな。
どーでもいいやん。
scanfの腐った仕様とかのほうがよっぽど問題だ。
>>313
どうでもいいといえばどうでもいいんだけども、
クズ本で勉強してきたヤシがいっぱしのプログラマでございなんて
顔されるのがたまらんのだよ。無論そいつは被害者なんだけど。

クズ本のせいで何人ヘボプログラマが生産されてることか。
こっちと関係ないところでひっそりと生きていてくれればいいんだけど、
そうもいかんしな。おい、K、おまえだよおまえ(w

だからクズ本はクズ本と言うようにしてるんだわ、おれ。
荒れる原因になりかねないからちょくちょくは言わんけどさ。

mainの定義くらいだったらかわいいもんだけどさ、
裏返すとそれすらもちゃんと知らないヤシが書いた本なんて推して知るべしだろ。
おい、おまえが適当に書き飛ばしてくれた本の尻拭いをなんでおれが、
と何度思ったことか。特にM田、貴様だ。
つかM田は書き飛ばしたわけじゃないらしいのが深刻なんだが(w

そういうわけで私怨が多分に入ってるよ、おれは。
あーあ。
316M 田:02/08/08 05:02
俺かよ!!
>>316
貴様だ。
本のせいにするなヴォケェ
319デフォルトの名無しさん:02/08/08 10:00
なんでみんなよってたかってリエントラントなコードにしろって
そんなにスレッド作りたいのか? あ?
>>314
誰もそんなこと言ってねぇよ。
大して勉強もしてねぇくせにステレオタイプで

この本クソなんですけど〜?

とかほざく厨房に死んでもらいたいだけだ。
321デフォルトの名無しさん:02/08/08 11:56
配列ってどうやって宣言するんですかぁ?
配列ッ!
地球圏の重力に引かれた愚民どもよ。
私はここで高らかに宣言する。

我が、ジオン公国は配列を使用することを!

ジークジオン!
脱ダムってどうやって宣言するんですかぁ?
この脱ダムが押されている!?さすがだな、シャア!

くっくっく、まだまだ私には勝てんよ、アムロ。
326API学くん:02/08/08 12:13
質問です。
関数の引数の中に「0L」と言う表現があるのですがどういう意味でしょうか?
どうも零のことらしいですが、わざわざLを付ける意味がわかりません。
VC++の例文に載っていたのですが、これがC言語のものか、C++のものか、VC++固有
の表現なのかもわかりません。
よろしくお願いします。
>>326
long
0L ←ヨコカラミルト、キョンシー
329API学くん:02/08/08 12:21
>>327
どうもありがとうございます。
longを明示したわけですね。
あと「0L」はC言語のものか、C++のものか、VC++固有の表現なのか教えて頂けないでしょうか。
330 :02/08/08 12:22
C/C++の仕様です
331API学くん:02/08/08 12:25
>>330
わかりました。どうもありがとうございます。
API教えて君

にハンドル変えたら?
ネット(and人間)をマニュアルがわりに使うやつ氏んでほしい
0L ←OL萌え
>>333
ネットはいいだろう。リファレンスやTIPSとしてなら。
基礎知らないと全く役に立たないけど。
基本は本で体系的に学ぶのがいいと思うけどね。
337333:02/08/08 15:06
ネットはいいね。
「人間を検索エンジンの変わりに使ってる奴」に訂正。
>>337
ははっ 「変わり」 だってさ。ダサー
一生の恥だなおめー
>>338
無粋だな。
340デフォルトの名無しさん:02/08/08 17:16
また蒸し返しのようにmain()の話ですみません。
int main(int argc, [以下略]と書いても、 void main(void)と
書いてもwarningが出ない、ってのはなぜですか? main()のプロトタイプは
どこにあるのでしょうか?
>>340
なにがしたいんだ?
>>340
ない。
343デフォルトの名無しさん:02/08/08 17:26
>>340
mainのプロトタイプ?
自分でかかなければあるわけねーだろ。
>>340
mainは魔法の名前なんだよ。
>>340
Cはターゲットと開発機のOSやCPUなどが全く違う状態で開発できるようになってます。
つまりmainの返り値や引数は、ターゲットの環境に依存するわけです。
ですからmainは自由なI/Fで記述できるようになっています。
>>345
勉強になった。
347デフォルトの名無しさん:02/08/08 18:25
>>340
> warningが出ない、ってのはなぜですか?
そんなもん、コンパイラによるだろ。
test.c
void main() { }

#2cc test.c
ゴルア(`Д´) test.c(1) > void main() <小一時間問い詰めたい
そのコンパイラ欲しい>>348
>>349
segmentあぼーん。

メッセージで信用丸つぶれ。しかも、coreの代わりにエロファイルが。
351デフォルトの名無しさん:02/08/08 18:49
Pro*Cのコンパイル方法教えてください。
とりあえず、ためしにやってみました。

proc test.pc
cc -c test.c
cc -o test test.o

Oracleのライブラリをリンクしたいんですけどどうしたらいいでしょうか?
352デフォルトの名無しさん:02/08/08 19:02
>>351
リンク時に加えればいいんじゃネーノ?
>>351
スレ違いだし、なんでヘルプを読まないのかな?(怒)
354デフォルトの名無しさん:02/08/08 19:05
>>353
ヘルプはないっす
>350
だが、エロファイルを袖の下にして信用回復。

>351
Oracleのmakefileを改造。
でもライブラリを特定してリンクしたいとかだったらスマソ。
>>354
死ね
>>350
それはコンパイラでなく、OSの仕業。
>>357
ひろゆき、割とUNIX互換OS manax 発表。
359デフォルトの名無しさん:02/08/08 19:19
>>355
そうなんです。makefileがわけわかんないんで。
ひとつひとつやってみたいんですけど。
360340:02/08/08 19:40
>>345 うーん。ご指摘の点ですけど、
ターゲットが違うんなら、仮におなじホストでおなじコンパイラ使っててもインクルードする
ファイル(の置き場)も変わるものなんではないかと思いますけど...
(つまり、ターゲットがいろいろあるって事実は、mainのprototypeが存在しないこと...
「自由なI/Fで記述できる」ってのの理由になってるんでしょうか?)

で、343さんや344さんの言うように、mainのプロトタイプは、ふつうは存在しないってのは
正しいんでしょうか?なんかの規格上、存在しないってきまってるものなんですか?

>>341 正確な知識が得たいんです。

知るかヴォケ、って言われそう。
>>360
規格で決まってるらしい。

C言語のJIS規格X3010-1993には、
「プログラム開始処理において呼び出される関数の名前は、mainとする。
処理系は、この関数に対して関数原型を宣言しない。」
との記述がある。
362360:02/08/08 20:11
>>361
ありがとうございます!

363デフォルトの名無しさん:02/08/08 20:11
1から10までの数字をランダムに毎回実行する
ごとに順番を入れ替えるプログラムを
作ってください。
>>363
作りました。
>>363
そういうのは、現在時刻、またはプロセス番号をキーに
乱数を作ればいいんだけど、環境に依存するよ。
誰かが作っても君の環境で動作するとは限らない。
366sage:02/08/08 20:27
>>363
rand()
>>366
実行開始ごとに乱数系列が初期化されるから、単にrand()を使っただけだと
毎回同じ結果になってしまうよ。

それを避けるためには、>>365の言うように何らかの外的要因による初期化が
必要で、その手段は実行環境に依存する。
368363:02/08/08 20:41
>>365,367
動作しなくても、参考になるので
誰か作ってください。
宿題かのう?
>>368
千円で作ってあげるよ。
371363:02/08/08 20:51
>>369
そんなとこです。
そんなとこですか。
あたま痒いとこありますか?
>>373
あるけど教えません。
座標60.0681、48.2218のあたりが痒いです
system("ls %s"〜

のようにsystem関数で変数をいれたいのですが、
どのようにすればよいのでしょうか?
>>376
PG向いてないと思われます
378376:02/08/08 21:22
PGに向いて無くても構いません。
>>376
char tmp[256];
sprintf(tmp, "ls %s",殻);
system(tmp);
こんな感じかな? >>363

int  _Rand( int n );  // 0〜nを返す

int  main( void )
{
  int  b,i,n,a[10]={1,2,3,4,5,6,7,8,9,10};
  
  for(n=0;n<9;n++) {
    i=_Rand(9-n);
    b=a[i];
    a[i]=a[9-n];
    a[9-n]=b;
  }
  
  return 0;
}
381363:02/08/08 21:37
>>380
どうも、ありがとうございました。
関数の戻り値でPOINT型やint型などがあるのですが,
これを関数名でわかるようにしたほうがいいのでしょうか?

point_kakezan();
383Rina ◆tI333vNE :02/08/08 23:31
場合によりけり。
同じ機能で型違いっていうのなら関数名に型情報を
持たせたほうがいい。
fabsとabsなんて良い例なんじゃないかな?
BOOL Hantei( void )
{
 int i;

 for(i=0;i<Cnt;i++) {
   if( Data[i] >= 1 ) return TRUE;
 }
  return FALSE;
}

これぐらいでも関数にする時ってありますか?
今関数100個くらいあるんですが
ひとつのファイルに20個くらいも書いてあるのはありですか?
>>384
いいんじゃねぇの?
386 :02/08/09 00:02
>>384
それぐらいでも関数にする時ありますよ
ファイルは機能別に分割した方がいいでしょう
387デフォルトの名無しさん:02/08/09 00:16
マクロにしろよ。
>>387
思想が危険。inlineでいいじゃん。
389 :02/08/09 00:19
>>387
いい加減なこと言うな
マクロにしたらソースが真っ黒
391 :02/08/09 00:38
ウワッ...
392デフォルトの名無しさん:02/08/09 00:54
C言語でスロットのゲームを作りたいと思っています。
可能でしょうか?また、そういったものを作られた経験のある方はいらっしゃいますか?
>>392
可能
394 :02/08/09 00:56
>>392
せめて環境を書きましょう
395デフォルトの名無しさん:02/08/09 01:01
>>394
ヴィジュアルC++のコンソールアプリです。
フラグの成立に関する関数って存在しますか?
>>395
>>395
フラグの成立?
何言ってっかわかんないけどそんな関数ありません
>>392
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int main(){
time_t tt;srand(time(&tt));
while(getchar()!=EOF)
printf("%d",rand()%10);
return 0;}
399395:02/08/09 01:15
例えば、

   {12345678901234567890}

上のような個々の数字(または文字)をランダムで1つ選ぶ、みたいなモノです。
スロットはレバーをたたいた時こんな風にフラグ(ベルやスイカ、チェリー等の役)をランダムで決めてるので。

bool IsFlagOn(bool Flg){
  return Flg;
}
401395:02/08/09 01:17
>>398
ランダムで決めるヤツですよね?
すいませんがほんとに簡単でいいんで解説お願いできますか?
void kan2(char *);

void kan( void )
{
 char box[20][20];

 kan2(&box[0][0]);
}

void kan2(char *box)
{
 for(int i=0;i<10;i++)
  box[0+i]=i;
}

を,

void kan2(char *box)
{
 for(int i=0;i<10;i++)
  box[0][i]=i;
}

という風に使いたいのですが,kan2のプロトタイプ宣言の仕方とchar *boxをどのようにすればいいのかわかりません。
教えてください。
>>395
time(NULL);現在時刻を返すかもしれない
srand(time(NULL));ランダム系列を現在時刻で初期化
getchar();一文字読み込む、もうなければEOF
rand();擬似乱数を返す、系列はsrandで初期化済み
rand()%10;0から9に限定
printf("%d",rand%10);それを表示
>402
void kan2( char **box );
あと、普通は
kan2( box );
と呼び出すと思うんだけど
>>402
void kan2(char box[20][20]);とか
void kan2(char box[][20]);とか
void kan2(char (*box)[20]);

kan2(box);
プロトタイプ宣言にboxとかいれてもいいんでしょうか?
>>406
(゚∀゚)余裕でオッケー
>406
いいよ。てか、普通は入れる。引数の意味が分かりやすいように
Cはじめて1年半知らんかった
全部void kan( int, int ,char );
とかにしていた・・・
鬱だ,がんばろう
>>409
1年半じゃしかたないね。 オレは歴10年でやっとモノにしつつある感じ。
>>409
がんがって!
>>409
逝っちゃって!
おれとあんまし変わらないけど(さりげなくイヤミ) >1年半
学生で古い本だけをみてやってるとそうなるだろうね。
つーか、C/C++ってプロトタイプ宣言が必要だから嫌い。
プロトタイプ宣言が無いと面倒くさくていや。
タイプミスがバグに直結するんだよ? それでもいいの?

タイプミスをコンパイラがはじいてくれる・・・こんなにうれしいことはない
if(0){
  (デバッグ処理);
}

と書くと、この部分はコンパイルされませんか?
それとも、
#if 0 〜 #endif でくくらないと駄目ですか?
>>416
> と書くと、この部分はコンパイルされませんか?
処理系と最適化オプションによる。ちなみにgccの場合は無視される。

> #if 0 〜 #endif でくくらないと駄目ですか?
この場合は処理系、最適化オプションに関わらずに必ず無視される。
typedef struct{
 char *lpBox;
 int nu;
}Box;

これで,Box.lpBoxに5つの配列を動的に確保し,そのあとmemsetでBoxを初期化(0でメモリの塗りつぶし)したら,どうなりますか?
それとBox.lpBoxを開放したあとに,memsetした場合はどうなりますか?
419モヒモヒ:02/08/09 10:41
自販機のプログラムを作れっていわれたらどんな感じにします?
>>416
無視されるがコンパイラは検索するので
SJISで「/* ここで「表示」します */」なんでいれてもエラーは出る。
#ifdefでも。
gccだとね。
>>418
ポインタを初期化したら解放できないだろ。
解放した後にそのポインタに触れるのはご法度。
>>419
昔、どっかでプログラムの学習ででてきたやつだな。
「最初にお金を入れて、次にボタンを押して」
とかいう。
宿題は宿題スレにいきな。
typedef struct{
 char *lpBox;
 int nu;
}Box;

これで,Box.lpBoxに5つの配列を動的に確保し,
Box.lpBoxを開放したあとに,memsetした場合は安全ですよね?
このあと,またlpBoxに動的に配列を確保したりしてもいいですよね?
いいよ、好きにしな。
本当のところは?
2chでの回答をお前は信用するのか?
無意味だろ。本なり信用できるネットで調べてこいよ。
で、俺の信用できない意見でいいなら
「かまわん」
俺の信用できない意見はこうだ。
「配列を5つも確保してどうする」
428デフォルトの名無しさん:02/08/09 11:52
最近何処かで見たソースで、処理用の領域を関数内部でmallocで確保して、
returnの直前でfreeして、そのfreeした領域内の値をreturnしているものが
あったんですが、これって許されることなんですか?
返す値を別の変数に保存してからfreeして、保存した値を返すようにすべきじゃ
ないかと思うんですが。
だめにきまっとる。
それに
「何処かで見たソース」
でなくて
「自分が作ってしまったソース」
だろ。正直に書くように。
>>428
freeした後に、その領域にアクセスしちゃいけないよ。
431 :02/08/09 15:17
ヘッダファイルに出来る事はなに?
>>431
C言語でできることなら何でも
>>432
と、いうことは、こんなプログラムを書いていいれすか?

main.c の中身

#include "input.c"
#include "calc.c"
#include "print.c"
434432 :02/08/09 15:54
それはあなたの自由です
>>433
文法的には可能。
ただそれをやると君のコーディングセンスが疑われる諸刃の剣
素人にはお勧めできない。
ヘッダファイルをプログラムの最後に置いた場合、
「テイルファイル」に名称変更してもいいれすか?
>>336
駄目です。
「フッタファイル」ならば許可します。
>>437
ポインタ参照ミス。
439437:02/08/09 17:12
えーん、ポインタって難しいよ。

ところでチョット疑問>>0 ってどうなるんだろう?



  ど う も な ら な か っ た ね
質問。
N88BASICみたいに
絵を書くことは出来ますか?
>>441
できない。
>>442
なーんだ。できないのか。
CってN88BASICより劣っているんだね
なんてレベルに低い言語だ
>>443
ハイハイソーソー
>423
>これで,Box.lpBoxに5つの配列を動的に確保し,
>Box.lpBoxを開放したあとに,memsetした場合は安全ですよね?

ネタなんだかわからんがマジレスします。全然安全じゃありません。
構造体で考えるから難しくなるんでしょう。何でもプリミティブな形で
考えればいい。要はこういうことでしょ。

char *cp;
cp = malloc(5);
free(cp);
memset(cp, 5, 0);

freeしたあとのcpには何かしら有効なポインタを指す前にアクセスしてはいけない。

446428:02/08/09 19:13
>>429
自分でそんなコード書いたらとてもこんなとこで晒せませんて。

記憶を辿ってハケーンしますた。
ttp://www5.airnet.ne.jp/tomy/cpro/sslib9.htm

ここの
double lagra(double xx[], double yy[], int n, double xi)
double splint(double xx[], double yy[], int n, double xi)
の中でこんな記述が。
if(*p++ == xi)
{
  free((char *)x);
  free((char *)y);
  return *(y + i);
}

freeしてすぐだからって駄目ですよね?こんなの。
啓学出版の「C言語による科学技術計算サブルーチンライブラリ」
(黒瀬能聿・松島勇雄・松尾俊彦 共著)という本をベースにしてる
そうですが、この本誰か知ってますか?
信頼に足る本なんでしょうか?
Pro*Cのmakefileできましたよー
これでさらに無敵になりました。
>>446
その本はしらんが、そのコードはダメだ。
そのページのやつがダメなのか本がダメなのか判断つかんが。
>>446
そのページのソース、なんか、途中で面倒くさくなったらしくて、
3つcallocして、どれかがNULLならfreeしないでreturnしてるね(w
まぁ、危険なところは書き直して吉。
大昔のUNIXではfreeした直後のポインタをreallocで復活させる
ことが許されていたそうな。くわばらくわばら。
>>450
復活できなかったら別の領域が確保されてreallocの戻り値で
返されるとかいう仕様?
無条件に復活できるわけじゃないでしょ?
新規にmallocせずに必ず復活できると限らんものをreallocしたい
心境が分からんが。
右脳系プログラマですが、何か?
>>452
あ、俺も俺も〜。
>>445
NULL入れた後はOK?
>399
「ランダムで選ぶ→rand()を使用」って書いてあるのにアフォですか?

ちなみにスロットのドラムは一定方向に回転しているだけなのでランダムで選ぶのはどうかと。
実機で絵柄が飛ぶように見えるのは、ボタンを押した瞬間に滑らせる(=役が揃わないように高速でドラムをずらす)からだよ。

とりあえず今後はゲ製版へ逝ってくれ。
Objective-Cっていうのはアレかい?
Macで使われてるのかい?
>>454
NULLが有効なアドレスだと思ってんのか。
458454:02/08/10 00:20
わかたーよ
ポインタのメンバ以外memsetするーよ
>NULL入れた後はOK?
>わかたーよ
>ポインタのメンバ以外memsetするーよ
たぶん全然分かっていないと思うけどこれなら可能。
typedef struct{
char *lpBox;
int nu;
}Box;


int main(void)
{
Box box;

memset(&box, 0, sizeof(Box));
printf("%p, %x\n", box.lpBox, box.nu);

return 0;
}
460デフォルトの名無しさん:02/08/10 02:12
みなさんプロのかたばかりですか?
C勉強中ですが
レス見てもぜんぜん理解できません

はぁー
>>461
気にしなくてもよいかと。
>461
素人のしったか君の方が多いです。ご安心を。

そんなあなたも3ヵ月後には
「NULLポインタ?お前ら読み方はナルが正しいんだぞ、厨房がぁ!」
とかさらりと言えるようになります。
>>463
どうしても「NULL」を「ヌル」と読んでしまう漏れはぬるぬるですか?
>>463は、ラジオをレイディオと発音するタイプ。
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=NULL&sw=0
>>463
warningはウォーニングとは読まないのですか?
>>466
読んでますが何か?
468モヒモヒ:02/08/10 10:14
宿題スレってどこにあんの?」
探し出した者だけが答えを貰えるという・・・
伝説の・・・
検索
あ、見つけやがった。
>Borland C++で自販機作ってください。
(;´Д`)
しかし、それはもう何百年も前の話・・・
質問です。
#defineで宣言するのが多くなったので、他のファイルに分けたいのですが
どうすればよいのですか?
476デフォルトの名無しさん:02/08/10 14:26
>>475
defineのファイルをインクルードしなさい
477デフォルトの名無しさん:02/08/10 14:26
>>476
どうやって書いたらよいのですか?
毛筆で
>>478
俺はかわいく丸文字がイイな。
480デフォルトの名無しさん:02/08/10 14:38
>>478-479
真面目に答えてください。
今日中に教えてくれないとレイプします
まじれす
#ifndef HOGEHOGE_H
#define HOGEHOGE_H

#define xxxxxxxx
#define xxxxxxxx
  :

#endif
482デフォルトの名無しさん:02/08/10 14:46
>>481ありがとうございます。
これをヘッダーファイルにして
インクルードすればよいのですね?
>>475
現時点でどういうファイルがあって、
どのファイルで#defineの宣言が多くなったのかを言わんと。
484481:02/08/10 14:47
です
485デフォルトの名無しさん:02/08/10 14:52
ところで、
#ifndef HOGEHOGE_H
#define HOGEHOGE_H
のHOGEHOGE_Hってなんれすか?
>>485
インクルードガード
487481:02/08/10 14:56
ヘッダファイルが多重にインクルードされることのないように。
HOGEHOGE のとこは何でもいいのれす。
488デフォルトの名無しさん:02/08/10 15:08
ヘッダーファイルはどこに保存すればいいのですか
>>488
ひまなのか?ネタなのか?
490デフォルトの名無しさん:02/08/10 15:11
>>489
まじです。
お願いだから、マジレスしてください。
>>490
どこでもいいよ。
>>490
HDDに。
つか
#include <hogehoge.h>
とやってないだろうな?
#include "hogehoge.h"
カレントに置く場合はこうしませう。
493デフォルトの名無しさん:02/08/10 15:15
>>491
インクルードファイルが見つかりませんって言われるのですが…
>>492が正解の予感
495デフォルトの名無しさん:02/08/10 15:30
どういうことですか?
ポカーン( ゚Д゚)
497デフォルトの名無しさん:02/08/10 15:33
ディレクトリ名を入れないといけないのですか?
それでいいよ
>>497
>>492は理解してる?
500デフォルトの名無しさん:02/08/10 15:39
いいえ
     >>500
          ,;⌒⌒i.
  ノノノノ⌒ヽ (   ;;;;;)   ______
 (゚∈゚ )  ミ)     ,,:;;;). .|         .|
/⌒\/(   ) ヽ| |/ |;,ノ  |   樹海    |
( ミ   ∨∨  | /  .,i  |______|
 ノ  /     | | ,,i; ,, . ,;⌒‖
( \/ヽ ,,,丶, | |,,,;.    ;i,  .‖ヽ
 \ ) ) ..   ,,   ´ヽ (,,  ‖丿.,,,
 ///   ,,   ,,  .. ´ヽ  ‖,,, ..,
`ヾ ヽミ ,,  .、 ヽ .. ヽ丶,.ヽ ‖、,,
502デフォルトの名無しさん:02/08/10 15:41
あ、できた。
そんな事より1000よ、ちょいと聞いてくれよ。スレとあんま関係ないけどさ。
昨日、近所のム板行ったんです。ム板。
そしたらなんかCを理解してる人がいないで語れないんです。
で、よく見たらなんかC言語を習得するには20年かかると書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、C如きで普段来てないム板に来てんじゃねーよ、ボケが。
Cだよ、C。
なんか親子連れとかもいるし。一家4人でム板か。おめでてーな。
よーしパパ勉強しちゃうぞー、とか言ってるの。もう見てらんない。
お前らな、VCからCを勉強と。
ム板ってのはな、もっと殺伐としてるべきなんだよ。
モニターの向こうの奴奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと語れたかと思ったら、隣の奴が、Cは関数の集まり、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、Cは関数の集まりなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、Cは関数の集まり、だ。
お前は本当にCは関数の集まりを言いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、Cは関数の集まりって言いたいだけちゃうんかと。
ム板通の俺から言わせてもらえば今、ム板通の間での最新流行はやっぱり、
繰り返し文、これだね。
無限繰り返し文while。これが通の頼み方。
繰り返し文ってのは同じことをさせる。そん代わり楽。これ。
で、それに無限while。これ最強。
しかしこれを頼むと次から日本政府にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、BASICでもやってなさいってこった。
>>500
とりあえず、コンパイルする.cファイルと同じディレクトリに自作のヘッダを
おいてください。includeは<>じゃなくて""で囲ってください
505ほべ:02/08/10 16:11
>VCからCを勉強と。
>モニターの向こうの奴奴
506デフォルトの名無しさん:02/08/10 16:21
ちょっとwebさまよってて見かけたんだけど
 double a = 74.58;
 double b = 0.33;
 double c = a/b;
 int d = (int)c;

とすると c=226.0 なのに d=225 になるらしいんです。
実際やってみたら確かにそうなる。 floor(c)でも同じ。
まじ怖いと思った。どうやって回避すればいいんですか?
cが厳密には 225.999・・・ になっていて、整数にするとき
端数が切り捨てられただけでは
>>506
死者五入しんさい。
桁上げしてintで計算しる!
510506:02/08/10 16:48
>>507 >>508
微小量を cに足してやった上でint にするというソリューションが、載ってい
た記憶があるんですが、それはそれで、真の解ではなくなる可能性もあるんですよね...

>>508
数値計算のようなアプリケーションでは、ちと辛いような気も...
>>510
BCDとかBIGNUMを使う、分数は分数のまま持って歩く。
無知は怖いねぇ
513デフォルトの名無しさん:02/08/10 19:36
「int x, *p;」とした時に「p = &x;」は出来るのですが、「&x = p;」が出来ません。
(エラーの内容は「左のオペランドが左辺値になっていない」です)
何故エラーが出るのかどなたかご教授していただけないでしょうか。お願いします。

int main(void) /* sample.c */
{
 int x, *p;

 &x = p;
 p = &x; /* error */

 return 0;
}
>>513
xのアドレスは変えれんよ
515513:02/08/10 19:46
すみません、間違ってソース書いてました。修正します
p = &x;
&x = p; /* error */

>>514さん
どうもです。でも、代入すら許されないのでしょうか?
516513:02/08/10 19:53
アドレスは変えられないんでした・・・。逝ってきます
>>514さん、有難うございました。
質問です。
どうやったらチンカスを出力できますか。
printfでやったけどできませんでした。
518 :02/08/10 20:13
KISS(Keep it simple, stupid)の原則ってどういう意味なんですか?
「単純にしろ、間抜け」?
>>517
puts

>>518
スレ違い
>517
printf("チンカス\n");
521デフォルトの名無しさん:02/08/10 20:40
http://www.kumei.ne.jp/c_lang/intro/no_26.htm
の下のほうの「MS-DOSのエスケープ・シーケンス」のところで、
printf("\x1b[4;31m");
とあるところなのですが、色が変わらず、┘のような
変な文字列が表示されるだけでうまく動きません。

色の変更をしたいときは、Cではどのようにしたらいいですか。

OSは WinXP Home
コンパイラは Borland C++ 5.5.1 for Win32 です。
>>521
>(*注)同じMS-DOSでもたとえば98シリーズと FMシリーズではカラーコードが違っています。
>他にも微妙に違うところがあるかもしれません。
>お使いの機種で本章のプログラムがうまく動作しない場合は、無視して下さい。
>本章以降のプログラムについても同様です。
超FAQだが、NT系Windowsではコンソールで
ANSIエスケープシーケンスがつかえねーんだってば。
>>522-523
見落としてました。

代替法を伝授していただきたいのですが。

# sage 進行スレでageてゴメソ
525デフォルトの名無しさん:02/08/10 20:55
>>524
質問くらいageてもいいだろ。

/* 折れはかちゅ〜しゃだしね… */
526デフォルトの名無しさん:02/08/10 20:58
>>524
sage進行じゃねーぞ。sageる人がこの板に多いだけ。
質問はなるべくageてね・・・
スレ違いかもしれませんが教えてください
最近C++を勉強していますが
Cに慣れてるせいか所々詰まってしまう部分があります
特に「参照」がソース中に出てくるとつっかえてしまいます
一応機能や文法は理解しているのですが本の中だけで理解しているだけです
実用的なソースはまだ見ていないのでわからないのですが
基本的にポインタで代用可能という判断を下したのですがどうなんでしょう?
参照には出来てポインタでは出来ない事とかあるのでしょうか?
個人的に参照はあまり使いたくないと思っています。
>>527
nullは取れないのでエラーをどう表そうか悩む。

本来、ポインタのよる参照渡しはリーガルな方法ではないし問題も多い。
だから参照というものが導入された。
>524
確実なのはSetConsoleTextAttributeみたいなAPIを叩く、くらいしか、、

>527
>参照には出来てポインタでは出来ない事とかあるのでしょうか?
T& operator + ( const T &lhs , const T & rhs);
T ret = T(1) + T(2) + T(4);

>528
引数として参照があるのは、「エラー状態はいらねー」という意思表明ナリ
返値としてなら、例外投げれ
ソースが長くなったので他のファイルに分けようと考えているのいるのですが
どうすれば良いのでしょうか。
>>529
int &getref()
{
int &a = some_valiable;

return a;
}


getref() = 32;
532デフォルトの名無しさん:02/08/10 21:34
>>530
関数単位で分けて書く。
一つの関数を複数のファイルに分けて書くことはできないはず。
>>532
これを別のファイルに保存して、それを読み込む方法を聞いているのですが…。
534デフォルトの名無しさん:02/08/10 21:38
>>533
は?
コンパイラの使い方を聞いているの?
そんなのコンパイラの説明書をみればいいじゃない。
535534:02/08/10 21:38
#includeは使うなよ。
>>535
モジュールかですかいな。
>>533
includeしろ!
>>536
535は単に*.cを#includeするなと言ってんじゃない?
分割コンパイルの方法を聞いているのですが...
540デフォルトの名無しさん:02/08/10 21:47
>>539
じゃあ使っているコンパイラを教えてよ。
>>539
コンパイラ。
>>539
もっと具体的に言え
分割コンパイルの方法を1から説明しろと言うとるのか?
>>539
単に別々にコンパイルするだけです。
実行形式にするときにはコンパイルしてできた
オブジェクトファイルを必要なだけリンクします。
544デフォルトの名無しさん:02/08/10 21:49
プリプロセッサ、コンパイラ、リンカーなどを総称してC処理系と言うんですか?
>>544
いいんじゃない?
>>527
C++相談室スレで質問して貰った方がいいのかもしれないけど…

参照は基本的にポインタで代用可能という判断で正しいと思います。
必要を感じなければ積極的に使わなくても良いのでは。

私が参照を使う場面というと、ネストしたクラスの奥深くにアクセスするときに
参照で短い別名を付けるというpascalのwith文のような使い方とか、
関数内部で変更しないクラス引数をポインタ渡しにすると呼び出し側に
実体の変数が必要だけど、const参照で渡せばコンストラクタ等で生成した
即値を渡すことも可能とか、そんな用途ぐらいですか。
547デフォルトの名無しさん:02/08/10 21:55
http://black.sakura.ne.jp/~third/c1.html

ここの下のコンパイラの説明のところに、実行ファイルは作れませんが・・・とあるんですが、そんなコンパイラがあるんでしょうか(^_^;)
コンパイルするだけしてリンクはしないとか?
>>547
VMがあるかもねぇ。
>>547
gccやボーランドはだめなの?
ムムム・・・
頑張って参照に慣れるしかないようですな・・・
どうも代入文の左辺に&があったり
関数に値を代入したりという部分でわかってはいても理解に時間がかかる・・・
まあこれは慣れしかないですね
>>547
リンクはリンカがするものです。
ただ、オプション指定でリンカを起動できる
コンパイラが多いだけです。
552デフォルトの名無しさん:02/08/10 22:08
>>547
そのサイトやべーぞ。
http://black.sakura.ne.jp/~third/c55.html

呆れたYO!
553デフォルトの名無しさん:02/08/10 22:09
英語の情報になれたいのですが
英語で書いてあるCの勉強ぺージってありますか?
#include <stdio.h>
#include <stdlib.h>

int main() {
char *po;
if ((po = (char *)malloc(sizeof(char) * 128)) == NULL) {
fprintf(stderr , "メモリが足りません");
exit(1);
}
po = "Kitty on your lap"; /* なんのためにmallocしたんだよ */

printf(po); /* %s使え */
free(po); /* mallocした覚えのないものをfreeするな */
return 0;
}
>>553
そりゃもう無数に。
556デフォルトの名無しさん:02/08/10 22:11
>>553
勉強ページとは言えないかもしれないが、>>1のC FAQとか
> free(po); /* mallocした覚えのないものをfreeするな */
mallocはしていると思うが?
558デフォルトの名無しさん:02/08/10 22:16
>>557
その時点でのpoの値は"Kitty on your lap"という文字列リテラルの先頭アドレスで上書きされています。
>>547
リンクページの"C machine"というサイトにあるのがここで触れられている
学習用コンパイラのようだけど、Windows用のexeを吐くんじゃなくて
コンパイラから実行環境までをアプリ内部で持ってるようですな。
文字列のコピーはstrcpyを使えとあれほど(略
>>560
strncpyの方がより安全かと
562デフォルトの名無しさん:02/08/10 22:28
>>561
なにが、どういうふうに安全なのか教えていただけますか?
strncpyはけつに0をつけない事があります。
先頭を0にして、strncatがおすすめ。
564561:02/08/10 22:38
>>562
一般的には溢れないn付きの方が安全かと。
>>554の(>>552のリンク先のですよね)みたいにコピー元が固定の文字列で
明らかに溢れない場合はstrcpyでノープロブレムです、はい。
565デフォルトの名無しさん:02/08/10 22:41
>>563
strncatってそんな仕様だったんだ。
putsは改行するのにfputsは改行しなかったりと、なんか統一性がないね。
>>561-565
ネタ
567565:02/08/10 22:51
>>566
俺もかよ!
>>567
何マジにな(略
569563:02/08/10 23:22
strncatは、n+1(終端の\0のぶんおおい)バイトの領域が
必要になることがあるから気をつけてね。
>>569
当たり前のことを語りまくるな。
こいつ。strcpyは領域いっぱいに使ったんだろうな。
571569:02/08/10 23:45
>>570
プ
今日はこのスレの伸びがいいなぁ。いいことなのかわからんが
strncpyで昔から妄想してるというかちゃんと調べてないんでわかんないことがあって、
いい機会だから書いてみる。

strncpyのあの仕様ってCOBOLとかのレコードをCで扱うためにある(あった)んじゃないかって
だいぶ前から妄想してたりする。

以前全銀協手順のプログラムをCで書いたとき、文字列のフィールドは、
文字列の末尾からフィールドの最後までを0x20で埋めろという仕様だった。

もちろんstrncpyは0x20じゃなくて0x0で埋めるんだけど。

で、ひょっとしてstrncpyが生まれた時代のCOBOLの実装に
文字列フィールドの末尾を0x0で埋めるやつがあったんじゃないかななんて。

…やっぱ妄想ですね。逝ってきます。
574562:02/08/11 00:00
ネタにネタを振ってみたらこんなことに...
初心者が混乱するのでもう止めてください。
strncpyってmemcpyといっしょだよね。違うの?
>>575
ネタだと思うけど一応・・・・
strncpyは0が来たらそこでコピー終了。memcpyは指定されたバイト数分無条件でコピー。
>>576
何ー!!
そんな仕様だったのかー!!
>576
ネタだよね?
strncpy()は最初の'\0'が見つかった後、nバイトに達するまで'\0'で埋める。
579デフォルトの名無しさん:02/08/11 00:29
>578
ネタだよね?
strncpy()は最初の'\0'が見つかった後、nバイトに達するまで0x20で埋める。
>>578
そうだったっけ?
てっきり'\0'はひとつだけコピーするのかと・・・
やはり、スレがのびればいいってもんじゃないな。
厨はまとめて逝ってくれ。
>>1-581
逝けってさ。
5831-581:02/08/11 00:37
カチャ
  ;y=ー( ゚д゚)・∵. ターン
  \/| y |)
>>1-583
じゃ、逝くか。
>579
下のプログラムを試せばわかるよ

#include <stdio.h>
#include <limits.h>

int main(void) {
  char buf[] = "0123456789";
  strncpy(buf, "", LONG_MAX);

  return 0;
}
>>586
ねぇ"" = '\0'じゃないの?
>587
デバッガで試してみなよ。
""[0]=='\0'
0[""] == '\0'
0 == 0[""]
>>589
覚えたてだから「知ってるぞ」ってアピールしてんの?
みんな知ってるってw
?何を覚えたて?
>>592
何か覚えたてなの?
>592
調子に乗ったあげく、

NULL[NULL] == NULL

ってされなかった分だけマシだったと思って許してあげれば?
?許す?
597モヒモヒ:02/08/11 08:03
なんでこれじゃ駄目なん
int main(void)
{
char option;

cout << "S) Select An Item" << endl;
cout << "D) Deposit Money" << endl;
cout << "C) Cancel" << endl;

cin >> option;

if (option == "S")
cout << "1" << endl;

else if (option == "D")
cout << "2" << endl;

else if (option == "C")
cout << "cancel" << endl;

else
cout << "Please select S or D or C" << endl;

int i;
cin >> i;
return 0;
}
598初心者 ◆ZMVdytmo :02/08/11 08:13
Visualc++6
でマイクロソフトの機能使わずに
ウィンドウ表示させるコードってあるの?
599ssssss:02/08/11 08:21
>>598
マイクロソフトの機能?ってどの部分?
開発環境のことか、それともAPIのこと?

てか、その前にスレ違いだけどな。
http://pc3.2ch.net/test/read.cgi/tech/1018239290/l50
この辺で聞いてみたら?
>>597
iostreamライブラリはC++用なので、Cでは使えないです。
option == 'S'
602デフォルトの名無しさん:02/08/11 11:17
何がおかしい?
void item(void)
{
int item;
int howMuch[6]={100, 100, 125, 75, 75, 100};

cout << " 1 2 3" << endl;
cout << " Coke Sprite Orange Juice" << endl;
cout << "$1.00 $1.00 $1.25" << endl << endl;

cout << " 4 5 6" << endl;
cout << " Mars Oh Henry! Kit-Kat" << endl;
cout << "$0.75 $0.75 $1.00" << endl << endl;

cout << "Select the item:";
cin >> item;
clrscr();

if (item == 1)
cout << "Please deposit $1.00";
else if (item == 2)
cout << "Please deposit $1.00";
else if (item == 3)
cout << "Please deposit $1.25";
else if (item == 4)
cout << "Please deposit $0.75";
else if (item == 5)
cout << "Please deposit $0.75";
else if (item == 6)
cout << "Please deposit $1.00";

deposit();
}


void deposit()
{
int dep, change, i;

cout << endl << endl;
cout << "Enter how much you are going to deposit" << endl;
cin >> dep;

change = dep - howMuch[i - 1];
cout << "Your change is " << change << endl;
}
>>602
・スレ違い
・状況を書けや
>>602
iってなんやねん
else if else if else if... キモ
606602:02/08/11 11:29
よくわからんねん。
void item()で品を選ぶっしょ。
んで、選んだ番号によって値段が違うんだけど、その値段をどうやって
deposit()のほうで使うん?
この辺がようわからん。change = dep - howMuch[i - 1];
引数を知らんのか
>>606
・itemをdepositに渡せばいいじゃん。
・スレ違い
609602:02/08/11 11:32
どうやって?
宿題カナ?
とりあえず、depositを関数に分けずに書いたら?
マジックナンバー、ハードコード、ほとんど同一の行だらけか。
ド下手。

多分質問の答え:
・howMuch[] が deposit()からアクセスできないね。
・deposit()にプロトタイプ宣言が無く、C++のようなので、これもエラーだな。
else if else ifのかわりに配列でもつかったら?
613602:02/08/11 11:40
C++です。ここスレ違いね。
宿題なんだけどさ。
自動販売機作れとか言いやがってさ、さっぱりよ。
ってことはdeposit()の方に
int howMuch[6]={100, 100, 125, 75, 75, 100};こうすればいいの?
>>613
全部グローバル変数にしたらw
引数を知らんちゅーことは、授業をまるっきり聞いてなかったちゅうことか?
616モヒモヒ:02/08/11 11:49
まあ、サルだから
何はともあれ宿題スレに移動したら?
http://pc3.2ch.net/test/read.cgi/tech/1027756023/l50
618602:02/08/11 11:51
カナダでこのC++の授業とってんだけど、英語むっちゃ難くてさっぱりなんよ。
グローバル変数ってGlobal Variableって事?
あー、やんなってくる
>>617
616は確信犯だから何言っても無駄だと思われ
>>618
ふざけているんだね?
>>618
スレ違いという日本語は理解できてマスカ?
>>618
日本の評判を落とすのはやめてください
623デフォルトの名無しさん:02/08/11 14:57
getchar ってキーボードからどう入力すればいいんですか?
c = getchar ();
putchar (c);
c = getchar ();
putchar (c);
上のコードに対して、(1 改行)と打つと 1 が一回だけ表示されて
終了してしまうのですが
>>623
getcharを使わない。
>>623
禿ファック。
とりあえずこのスレ全毒してみろ。
>>623
鼻フック
>>623
尻キック
>>623
1がちゃんと入力されてるやん
まったくもって正常な動作やん
629デフォルトの名無しさん:02/08/11 17:04
linux/drivers/char/mem.cというファイルを眺めていました。
531行目に以下のような記述があります。

static struct file_operations mem_fops = {
   llseek:  memory_lseek,
   read:   read_mem,
   write:  write_mem,
   mmap:  mmap_mem,
   open:  open_mem,
};
この”:”は何を意味しているのでしょうか?
これは処理としてはあるファイルに特定の処理を結びつけて
入ること自体は分かるのですが、Cにこんな記述があったのか
どうかよく分かりません。K&Rにも書いてないし。。

よろしくお願いします。
補足:
memory_lseekやread_memは同じファイルにstaticな
関数として宣言されています。
631デフォルトの名無しさん:02/08/11 17:12
>>629
ビットフィールドじゃないの?
ビットフィールド?
633デフォルトの名無しさん:02/08/11 17:13
>>629
ビットフィールドだろ?
本当にK&Rに載っていなかったか?
634デフォルトの名無しさん:02/08/11 17:21
計算機プログラムのソースをもっている方はください
635デフォルトの名無しさん:02/08/11 17:31
linux/include/linux/fs.hには以下のようにfile_operationsが定義されています。

struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, i
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned l
};
仮に先の”:”がビットフィールドだとするとどう解釈すればいいのでしょうか?
個人的には構造体の初期化用の何かシンタックスなのかと予想していますが
どうでしょうか?。今回のケースで言えば、特定のメンバ(今回のケースで言えば
関数ポインタ)を初期化しているように見えるのですが。。
ビットフィールドだったら、
struct Hoge {
 int n : 3;
};
見たいな書き方になるんじゃないの?
>>635
たぶんgccの拡張で、指定フィールドの初期化とか、
なかったっけなぁ?

>>631,>>633
プ
>>637さん
>gccの拡張で、指定フィールドの初期化とか
ありがとうございました。謎が解けました。感謝します。
>>637
いちいち細かいところまで見ていられるかよ。
というか>>629==>>637は釣り師だろ。
629=635=638=私です
古いLinuxのソースを見てみたら、通常通りの
初期化をしていました(必要のないメンバはNULL指定で、
全てのメンバの値を羅列)。
これでパフォーマンスに及ぼす影響はどれぐらいになるんで
しょうかね。興味深いところではありますね。
>>640
標準Cじゃないと分かったんだから、そろそろスレ違いだと思わない?
Linuxのソースなんてよめねーよ
このスレってANSI Cじゃないとダメなの?
そんなこというと各コンパイラスレがたってうっとおしいことになりそうだが。
>>643
質問の際は使用コンパイラを明らかにするべし。
必死すぎて見てらんない
>>644
オリジナルのコンパイラですがなにか?
Linuxのソースと書いてあるんだから(略
>>645
みなくてよろし
構造体宣言と実体定義の違いが、「細かいところ」かのぅ?
えっとですね、ヘッダに変数のextern宣言をまとめたいのですよ。
で変数のなかに
size_t marukome;
とか言うのがあるんですが、ヘッダファイルで
#include <stdio.h>ってやったほうがいいんでしょうか。
それとも普通はやらないのでしょうか。
>>650
size_tならstddef.hの方がよくない?
652650:02/08/11 18:12
>>651 いや・・・。そゆことではなく・・・。
へっだでsize_t使ってるんなら、stddef.h、もしくは
それをincludeしてるヘッダを取り込まないとエラーが出ると
思うんだが…。
>>650
どっちでもいいと思う。俺はそうする。
655650:02/08/11 18:20
オッケーでス。どうもでス。
>>654
よくねーだろ。
なんで?
>>657
エラーが出るかもしれないから、だろ。
ソースでinclude した後でinclude したらどうなる?
ぶぁーか(ぷうぷぷぷ
>>659
普通は2重にインクルードしないようにおまじないを書いとく
標準ヘッダファイルってインクルードガードされてるとは
限らないんだっけ。
ANSI C言語辞典の「標準ヘッダ」の解説だと、与えられた
有効範囲で2回以上組み込むことができて、その効果は1回
組み込んだ場合と同様、とありますから、同じ翻訳単位で
複数回インクルードされても問題ないんじゃないでしょうか。
もちろん自作のヘッダファイルをインクルードガードする
必要はあるでしょうけど。
インクルードガードしないヘッダーは何か意味があるの?
おれにはそれをしない理由が分からないのだが
665デフォルトの名無しさん:02/08/11 19:19
初歩的な質問ですいません

int nc=0;
while((c=getchar()) != EOF){
++nc;
}

printf("nc = %d", nc);

として文字数を数えるために、EOFを入力してループを抜けたいのですが
EOFの入力の仕方が分かりません。
Win98SEでやってるのですが、どうやって出すのでしょうか?
UNIXの場合はCtrl+Z(?)か何かで出来たような気がしたのですが・・・・TT
インクルードガードって結構後になってから出てきたような気がするんだが。
>>665
Unixの場合はC-dだ. そこんとこヨロシク.
WindowsはC-zかC-dじゃなかった?
Ctrl+Z でなかたか
そうだ, たしかC-zだったな.
サスペンドじゃん!って突っ込んだ記憶がある.
>>665
もうこないかな?
ctrl-zを入力したらEnter(Return)キーをタイプしないと駄目だぞ。
671665:02/08/11 19:59
>>667-670
みなさんレスありがとうございます!
Ctrl+ZがWindowsだったのですね^^;

でも今やってみたところCtrl+Zでループを出ることは出来たのですが
そのままprintf()を実行しないままプログラムが終了してしまいました
Ctrl+Zを押したとたん終了してしまうのでRetunキーも押せないですしTT
せっかくK&Cを買ったのに一章で詰まってしまって泣きそうです><
672665:02/08/11 19:59
>>671
K&Rでした><
スレ汚しすいません
>>672
その意気や良し!
まず、ソースを全部貼りつけてみな。
674673:02/08/11 20:10
あとコンパイラも
>>674
コンパイラは10Kを超えているので貼り付けられないです。。。
>>671
一度ファイルに書き込んでから
a.exe < file
でいいのでは
>>671
俺の環境(winme+VC++6.0)でもそうなるよ。
なんでだろうね?
Linuxだとうまくゆくんだけどね。
#include <stdio.h>
int main(){
    int nc=0,c;
    while((c=getchar()) != EOF){
        ++nc;
    }
    printf("nc = %d", nc);
    return 0;
}
これで思ったとおりに動かないか?
679678:02/08/11 20:19
ちなみにBCC32
おまえらちょっと待て
printf("nc = %d\n", nc);
にしる!
681665:02/08/11 20:21
>>673
K&Rの写しでやってます
#include<stdio.h>

main()
{
long nc;

nc = 0;
while(getchar() != EOF)
++nc;
printf("%ld\n", nc);
}

コンパイラはBorland C++Compiler5.5を使ってます。

なぜか先ほどふと出来たのですが、まだすぐ出なくなってしましました。
なんでだろ^^;

>>676
あ、それだと出来ました。ありがとうございます!
>>678
できないですね。
プログラムが悪いんじゃなくて環境が悪いんです。
683665:02/08/11 20:27
>>678
それでも出来ませんでしたTT
>>681のでやったとき極稀にできたりするのでとっても気になるのですが・・・・・・
やっぱり>>682さんの言うとおり環境の問題なのかな
K&RでCの勉強するならUnix系OSにしたほうが良くないか?
あれ, たしかシステムコールの話とかも載ってただろ.
forkとかWin系じゃ動かないんじゃなかったっけ?
Linux厨だから外してたらスマソ.
685駄目だとは思うが:02/08/11 20:34
fflush(stdout);
をprintfの下に追加してみよう。
686デフォルトの名無しさん:02/08/11 20:36
>>685
さっき駄目もとでsetvbufでstdoutをunbufferedにしてみたけど駄目だったからfflushしても駄目じゃないかな?
687686:02/08/11 20:37
というか、^Zした時点で終了しちゃうのよね・・・
688名無しさん@Emacs:02/08/11 20:37
>>686
setvbuf使わなくてもsetbuf(stdout, NULL)じゃダメ?
a.out > ofile
でやったら一応出力されてた
690665:02/08/11 20:40
>>684
システムコールって何なのか良く分からないのですが、最終章に
UNIXシステム・インターフェイスってのがあるのでこれのことなのかな?
まだ一章なので(汗)、この章まで来たらLinuxを入れてみたいと思います。
助言ありがとです

>>685 >>688
やらせていただきましたけど、駄目でした><
>>690
=APIでいいっしょ。
>683
それはwin9xのdos窓のバグ(仕様)

「ユーザがCtrl-Zを叩いた後、次の改行までの表示が行なわれない」

ということらしい。ソースがどこだったか忘れた。
694665:02/08/11 20:57
>>692-693
出来ました^^
すっごいうれしいです。

みなさまありがとうございましたm(_ _)m
mpichのサンプルプログラムを見ていたら、関数の引数にvoid *bufってのがありました。これはどう解釈すればよいのでしょうか?voidだから何もないはずなのに、ある!
>>695
おまじない。
つまりこの場合のvoidは何型でもよいって意味ですか?
void と void * は意味が全然違うよ。
>>695
● void ポインタ

void * は、あらゆるポインタ型からキャスト可能で、
あらゆるポインタ型にキャスト可能な汎用ポインタ型である。
実体は、他のポインタ型と一緒でただのアドレス。
そのアドレスの先に何があると思うかはプログラマ次第。

参考はこの辺
ttp://www-mbi3.kuicr.kyoto-u.ac.jp/~hattori/
>697
void=日下部陽一氏のHNだ。
あまり連呼すると出現しちゃうから気をつけろ。
>>700
これ、召喚するな。
>>700-701ワラタ
703shige:02/08/12 10:51
呼ばれて出てきてジャジャジャジャ〜ン
In articleを見なくなって久しいな。
たまにはこいよvoidたん。
705デフォルトの名無しさん:02/08/12 10:52
>>703
お前はカエレ
706Kusakabe Youichi:02/08/12 11:10
このスレッドは「C言語」とタイトルにある時点でだめですね。
(CとC言語の違いが分からないようでは問題外ですが)
また、釣れたなどと喜ぶ人が居るんでしょうね;)
>>706
>>706
DivX 5.0.2の動画も比較的スムーズになったように見えます。
少なくとも、最初で駒落ち気味だったような動画が駒落ちしなくなりました。

…案外お勧めっぽいかも知れません。
708Kusakabe Youichi :02/08/12 11:16
In article >>4, 4 Kusakabe Youichi <[email protected]> wrote:
()の数も合わせられないおかしな人が、いきなりでてきましたな(^^;
本物でてこねーかな。奴はあれでなかなか強敵だからな。
知らない人は知らないままでよい
×知らないままで ○知らないままのほうが
(´д`) ママ…
long long 型っていうのはANSI C規格にあるんですか?
>714
C99で正式に「long long int およびunsigned long long int型は少なくとも64bit以上の値である」ことが定められてます
>>715
なるほど、C99で規格に盛り込まれたのですね。どうもです。
717715:02/08/12 14:07
値である→値を持つ、だった
細かいけど
C99を詳しく紹介しているページを発見。
http://seclan.dll.jp/c99d/
ふーん、//のコメントって、C言語でもOKになったのか・・・
そろそろK&Rスタイルは辞めて欲しいよな。
ブール型に _ が付いてるのがちょっとやだな。
C99改訂の際に某C雑誌で翻訳記事を担当したのがvoi(略
>>721
奥さんじゃなくて?
keikoタン、ハァハァ
>>722
探してみたら

      Cの標準規格の改訂版
      The Revised C Standard
   ______________
          P.J.Plauger
   ――――――――――――――
    翻訳:日下部圭子・日下部陽一
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

ってなってた 奥さんがやったのをチェック、、ってとこか
>>721
それってCマガ?
奴の記事が載っている号があったら教えてくれ。
そこだけ焼却処分にするから。
これから載る号も頼む。立ち読みで済ますから。
726724:02/08/12 16:09
CマガAPR.2000 P.16-20
もっとも、漏れにはその次の特集記事「プログラミングの禁じ手」がかなり役に立った、というか未熟さを痛感させられた
Cマガなんてまだ読んでるの?
あれに書いてあるような薄っぺらい内容のものなら、
書籍買って深く知るほうがいいと思うけど。
雑誌の記事は結局参考文献を知る程度にしか使えない。
>>727
まあこっちにでもお勧め書いてくれ
http://pc.2ch.net/test/read.cgi/prog/1006353701/l50
729デフォルトの名無しさん:02/08/12 18:37
よく使う変数宣言をひとまとめにマクロにして宣言するのは変かな?
#define VALUE int aa; int bb;
int main()
{
  VALUE
  ・・・
キショ
>>730
そんな冷たくあしらわないでください。
もうすでに、それでかなりのボログラムを
書いてしまったので、どうしようもありません。
>>731
全部捨てろ。
>>729
そのaaとかbbって名前でいろんなコードに使ってるのならマジキショい
それに宣言文自体が使うところから見えなくなるのは保守に悪い。グローバル変数と区別つかん
734730:02/08/12 19:16
そか、悪かった
もう何も言わん
>>731
> もうすでに、それでかなりのボログラムを
> 書いてしまったので、どうしようもありません。
お前のエディタには文字列置換もないのかと小一時(略
>>729
やめてくれ
そゆアホなことをするから、糞ソースが出回ることになるんだ
737初心者:02/08/12 20:44
static unsigned char buf[2][MAXSIZE]; /* 受信電文組み立て場所 */
static unsigned int counter[2];/*組み立て中の電文の文字数 ( <SCIMESSIZ) */

がどっちもグローバル変数で、sci_rx_line[2]のなかに電文を組み立てて
行きたい場合、1文字受信するごとに


*( buf[port]+counter[port]) = 'h' ;
counter[port]++;

ってな感じで組み立てていけばいいんですか?
要するに1行目のポインタ演算に自信がないんですが。
738初心者:02/08/12 20:45
SCIMESSIZ = MAXSIZE です。スマソ。
それだけの説明じゃ何のことかさっぱりわからん
なんだ、まだvoid来てないのか
741737:02/08/12 21:14
>>739 スマソ

っていうか解決すました。スレ汚してすみません
>>737
自信がなければ
buf[port][counter[port]]='h';
とするのがシンプルでいいと思われ。
743デフォルトの名無しさん:02/08/12 22:22
22:22をお知らせします
そう
745 :02/08/13 00:18
脳内で受信したデムパをバッファリングして、ファイルに落としたいのですが
割り込み処理の

void interrupt far int_recv(void)
{
  buf[++rec_cnt] = inp(BRAIN_IN);
}

がどうしてもうまくいきません。
どなたかいい方法ご存知ですか?
(Cしか分からないので、Cでおながいします)
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| 電波を感知しました。 |
|__________|
              / /
              /
      _         ビビビ
     /||__|∧    /
  。.|.(O´∀`) /
  |≡( ))  ))つ
  `ー| | |
    (__)_)
>>745
farかよ!
rec_cnt++ ではないのか
749 :02/08/13 00:31
>>748
それもありました。
でも今の問題は、割り込み処理自体に入らないのです。
あと、タイムアウト用大麻も正常に動作してないようです。
戻ってくる時もあるし、永遠ループになる時もあるし・・・。
デムパはほぼ四六時中受信してるので、テストはいつでもできるんですが。
C++なら
void interrupt far int_recv(void)
{
  try {
    buf[++rec_cnt] = inp(BRAIN_IN);
  }
  catch (std::bad_dempa) {
    // 例外処理
  }
}
デバッグ用に、色々な関数群の内部処理のログ出力をfprintfで出したいんですが、
それらの関数を呼ぶたんビに、通常の引数といっしょに
ファイルポインターをいちいち渡さないといけないのですが、何かこのあたりのエレガント
なソースの書き方ってありますかね?やっぱりファイルポインターも含めたおっきな
データ構造体を渡すしかないですかね?
752デフォルトの名無しさん:02/08/13 01:26
stderr
リダイレクトは?
>>751
デバッグ用ならこうすれ。

void dprintf(const char *format, ...)
{
  va_list ap;
  FILE *fp;

  if (!(fp = fopen("debuglog", "at"))) {
    return;
  }
  va_start(ap, format);
  vfprintf(fp, format, ap);
  va_end(ap);
  fclose(fp);
}

使い方。

dprintf("%d: %s\n", i, s);

printfとおんなじ。
755751:02/08/13 01:54
>>754
まさにこういうのが求めていた奴です。泣けました。ありがとうございます。うぅ涙で
画面が見えません。
>>755
ファイルポインターはグローバル変数にしてもいいよ。
printfだって、stdoutというグローバル変数を使ってるわけだし。
757754:02/08/13 05:26
で、デバッグが終わったらdprintfは一括して削除したくなると思う。
こういうときにはマクロを使う。

#ifdef DEBUG
#define dprintf(...) DPRINTF(__VA_ARGS__)
#else
#define dprintf(...)
#endif

/* >>754のdprintfの関数名を変える */
void DPRINTF(const char *format, ...)
/* 以下は一緒 */

こんな感じで。上記の#ifdef〜#endifとDPRINTFのプロトタイプをヘッダに書いておいて、
それぞれのソースで#includeすればよろしいかと。

デバッグ中は#define DEBUGしとけばいい。gcc だと

 gcc -DDEBUG foo.c

って感じ。デバッグコードを取り除きたくなったら -DDEBUG をはずせばいい。
でもgccでこういう可変長引数マクロが使えるかどうかは確認してない(w

というか、>>754を書いた後で可変長引数マクロをC99で
使えるようになってないかなと思って調べたら
ttp://seclan.dll.jp/c99d/c99d02.htm#dt19990405
というのがあったのだった。これ、おれがCに一番欲しかった機能だ。
8年前にあればなあ…。今は仕事でCを使ってませんです。
>>757
今は可変長マクロなんて便利なものがあるんだぁ。
昔は2重カッコで苦労したもんだ。シミジミ
759758:02/08/13 06:34
s/2重カッコで/2重カッコを使ったマクロで/
>>754
個人的にはその都度ファイルオープンとクローズを繰り返すのは抵抗あるので
やはりグローバル変数に一票かな
わしは>>753に一票かな。
>>754
fopen/fcloseしないで、fflush使ったらだめなのか?
前に試してみたら、大丈夫そうなので使っていたが…
環境に依存したりするんだろうか。

まぁ、この場合はグローバル変数を使って実装することになるんだけど。
Cで連想配列みたいなものを作りたいのですがどうするのがいいですか?
具体的には、
'a' → "a.bmp"
'0' → "0.bmp"
'@' → "atmark.bmp"
(これが合計50字前後)
という感じに、char1文字を与えたとき、それに対応する文字列へのポインタ
を返すような関数(連想配列?)がほしいんですが。
>>762
環境依存はどうだろうね。
やるとすれば実装はこんな感じになるかな。

void DPRINTF(const char *format, ...)
{
 static FILE *fp = NULL;
    :
    :
 if (!fp) {
  if (!(fp = fopen("debuglog", "at"))) {
   return;
  }
 }
    :
    :
 fflush(fp);
}

DOSだとまずかったかもしれないがよく覚えてない。
ま、DOSなんて捨ててもいいんだけど。いやよくないかな(w
あとUNIX系を前提にできればsyslogを使う手もあるね。
>>763
char *a[256];
a['a'] = "a.bmp";
a['0'] = "0.bmp";
a['@'] = "atmark.bmp";

これでできるよ。ただ、aの要素数255は環境依存だけど、
ま、大抵charは8bitだから大丈夫だろ(w
>>765
なるほど、そんな単純でいいんですか。
大分悩んでいたのに一瞬で解決してしまいました。
どうもありがとうございました。
767762:02/08/13 13:31
>>764
オレは、関数内のstatic変数が仕様変更に弱いという考えを持っているんで、
グローバル変数にして、プログラムの先頭でfopenをする関数を呼ぶようにすると思う。
まぁ人の好みだけど。

試したのは確かVCだった。
DOSはファイルをオープンしたまま異常終了すると
同時にオープンできるファイルの数を食いつぶしていく
って問題があったような気がする。
>>767
漏れは動いた分のログは全部欲しいもので関数内でopen/closeしてます
まあ考え方の差ですが
>>763
単純な方法は>>765でいいとしても、仕様の拡張を考慮して、
ちゃんとしたものを作っておくのも勉強になると思うよ。
C++ の map や hashmap のようなものを、自分で作ってみるとか。
770デフォルトの名無しさん:02/08/13 19:29
初心者本を一通り読み終えた者です。

Cでかちゅ〜しゃ等のWinアプリケーションを作りたいのですが、可能でしょうか?
今のところ、ファイルやDOSに出力する方法しかわからなく、困っております。

Cには、例えばJAVAで言えば、java.awt.*クラスのような、アプリケーション
作成に適した関数は用意されていないのでしょうか?

コンパイラはcygwinを使っています。
どうぞ、よろしくお願いします。
おとなしくjavaを使って書くというのはどうだろう.
772770:02/08/13 19:35
>>771
レス、ありがとうございます。
JAVAではユーザーが限られてしまうので、ちょっと・・・。

僕の目標はフリーソフトで、かちゅ〜しゃみたいな、人気にちゃんソフトを
作る事なのです。そのためにCを勉強したのですが、前述のような
内容でつまずいてしまいました。今日も秋葉原の本屋で、調べてみたの
ですが、一向につかめません。

かちゅ〜しゃって言語は何で書かれてるんでしょうね。
773デフォルトの名無しさん:02/08/13 19:37
>>772
かちゅ〜しゃはDelphi。

おとなしくVBを使うのはどうだろう。

VC++でもいいけどかなりの知識が必要だYO!
774770:02/08/13 19:41
>>773
貴重な情報ありがとうございます!

VBですか・・・それもありですよね。
CでWinアプリケーションを作るのは、簡単な事だと思ってました。
だって、初心者本にCは何でも出来るYO!ヽ(`д´)ノて、
書いてあったし、、くそー、、(笑)
なんて本さね
>今のところ、ファイルやDOSに出力する方法しかわからなく、困っております。

printfだけわかったんだね。


>初心者本にCは何でも出来ると書いてあった

「何でもできる」 = 「簡単なこと」 って、すごい脳内変換だな・・・
「猿にでもできるCげんご」でも読んだのなら別だが


・・・はぁ? 一生無理だな、こりゃ。
777770:02/08/13 19:47
>>775
塚越一雄著:はじめてのC言語であります!
>>776
そうなんです(笑)。あと、リダイレクト、、
とりあえず、極めればWinアプリケーションも作成可能という事ですよね?
もうちょっとCを勉強してみることにします。
Cを極めてもWinアプリは作れないと思われ。
779デフォルトの名無しさん:02/08/13 19:51
C でWINアプリを作るのはかなりの遠回り。
780770:02/08/13 19:53
>>778
>>779
マジで鬱です、、
その為にCを勉強したのに、、
UNIXアプリなら余裕っぽいですね。でもUNIXか、、
やっぱユーザー人口的にもWinがいいですね、、
Delphiでも勉強しようかな、、
>>780
UNIXでかちゅ〜しゃを作るのは余裕ってこと?

そんな余裕どこから出てくるんだ?
>>780
GUIなものを作りたいんだったら、UNIX上(X)でもC以外のことを知る必要があるよ
783770:02/08/13 19:57
>>781
ああ、そんな初心者をいじめないでやって下さい(笑)
>>780
Cでも窓アプリつくれるよ
SDK + VC++ とかで
785770:02/08/13 19:58
>>782
そうなんですかー、、
僕はJavaから入ったいわゆる、Java厨って奴なんで、
GUIに対して楽勝っていう先入観がありましたね。甘かったです。
786770:02/08/13 19:59
>>784
情報ありがとうございます!
やはり、Delphiではなく、せっかくCを学んだのですから、
そちらの言語に進んだほうがいい気がしますね。
ちょっと考えて見ます。
787d:02/08/13 20:00

-------風俗の総合商社・MTTどこでも-------

〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
  http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------
>786
そういうケチくさい根性のせいで無駄な苦労をしてる奴の多いこと多いこと(藁
>>770
Javaやっていたひとなのに、C++じゃなくてCをやるの?
>>786
cygwinでも-mwindowsを指定すればwinアプリはつくれるでしょ
>>790
Cでwinアプリを作れるか否かではなくて、
Cの知識だけでwinアプリが作れるか?って話じゃないの?
792770:02/08/13 20:11
>>788
、、、
>>789
ええ、なんとなくCを、、でも、初心者本の内容はすぐ理解出来ましたよ。
Javaとあんま変わらないですよね。Cも。
>>790
アプリケーションというか、かちゅーしゃみたいなGUIを作りたいというか、
そのコマンドについては勉強しておきます。
793770:02/08/13 20:13
>>791
まあ、そういう事になりますね、、僕が勉強足らずだったということで、
申し訳無いっす。
>>792
Javaでも作れないんだろ?
かちゅ。
>>792
Javaなんかと一緒にしてほしくない。
>>770
Cには組み込み関数はありません。
変数名の型がわかった所で、どのようなバグの混入を防げるというのだろうか?
その型が表せる数の範囲だろうか?それくらいしか思い浮かばない。
それくらいではメリットはない。むしろ、邪魔なくらいである。

俺的には,ちょー必要だと思うのだが。
>>797
?
>770
まぢレス。
俺の場合。
C言語->C++言語(主にClass?)
->VisualC(いわゆるVC、SDKでC言語での窓の動作の仕組みを習得)
->MFCを使って普通に作る。
とりあえずここまでいけば
GUIで悩むのは終わりじゃないかな?
Cを学んだのは間違いとは思わないなぁ。
俺Cからのスタートだったし。
逆にVBとかJavaでGUIの動作について
考える機会が少なくて、学べないより
よっぽどいいんじゃない?
実際かちゅ〜しゃのGUI部分だけなら
あっというまに書けると思うよ。
「C言語のみ」って言わず、俺はMFC使えばだけどね。
まぁなんだ、がたがた騒ぐなw
出来るやつは出来るんだから。
できないならがんばれ新人。
>>770
C++Builderにしたら?
801デフォルトの名無しさん:02/08/13 23:44
C++BuilderでもVC++でもgccでもいいが、とにかくJava知ってるんだから
CよりC++をお勧めする。

因みにC++BuilderはGUI関係のライブラリがPascalで書いてあって
C++より読みやすいよ(経験談)。もしPascalを知らないなら、
アルゴリズム記述言語だと思えば当たらずとも遠からず。
>797の質問がわかった所で、どのようなバグの混入を防げるというのだろうか?
その質問が意図するところは汎整数型の問題だろうか?それくらいしか思い浮かばない。
それくらいではメリットはない。むしろ、邪魔なくらいである。

俺的には,>797の文面はちょー理解不能だと思うのだが。
803デフォルトの名無しさん:02/08/13 23:59
質問ですけど、プリプロセッサの条件コンパイルってどんな所で使うんですか?
実際プログラムを組んでいて#include と#define 以外を使ったことがありません。
どのような所で役に立つような技術なんでしょうか?
>>803
デバッグするときとそうでないときで、コンパイルするコードを切り替えたり、
処理系に依存する部分を分けたりする
>>770
書籍関連のスレに参考になりそうなレスがあったよ
806803:02/08/14 00:05
>>804
>デバッグするときとそうでないときで、コンパイルするコードを切り替えたり、

いままで、 // debug line:200〜218
なんて事やってた俺って・・・。

ありがとうございます☆
807名無しさん@Emacs:02/08/14 00:15
>>806
http://member.nifty.ne.jp/Ryuz/c/preprocessor.html
とか参考になるかも. 簡単なTipsだけだけど.
808806:02/08/14 00:20
>>807
ほえ〜・・・。
こんな使い方があったんですね。

2重インクルードは駄目だったんだ・・・。
危なかった (w
>>808
もしかして標準のヘッダファイル読んだこと無いのか?
810デフォルトの名無しさん:02/08/14 00:22
                         ┗0=============0┛
               \===========[_|_|_|_|_|_|_|_|_|_|_|_|_|_]===========/
            /三三三三三三三三三三三三三三三三三三三三\
                  0 │ |∞∞∞ |::|∞∞田田∞∞|::|∞∞∞ | ::|  0
            [二] | ::|       |::|┏━━━━┓|::|       | ::l [二]
◎○@※◎○@※. |□|.│ |┌┬┐ |::|┃/ .C.\┃|::| ┌┬┐| ::|. |□| ◎○@※◎○@※
ii|iiii|iiii|iiii|iiii|iiii|iiii|iiii| `)三(´| ::|├┼┤ |::|┃ ∧_∧ ┃|::| ├┼┤| ::|`)三(´il|iiii|iiii|iiii|iiii|iiii|iiii|iiii|
@※◎○@※◎○ | ::| | ::|└┴┘ |::|┃(´∀` ) ┃|::| └┴┘| ::| | ::|  @※◎○@※◎○
ii|iiii|iiii|iiii|iiii|iiii|iiii|iiii|li┏━━━━━┓|::|┃(.    つ┃|::|┏━━━━━┓ li|iiii|iiii|iiii|iiii|iiii|iiii|iiii|l
◎○@iiii※◎○@ ┣┳┳┳┳┳┫|::|┗━━━━┛|::|┣┳┳┳┳┳┫ ◎○@iiii※◎○@
ii|iiii|iiii|iiii|iiii|iiii|iiii|iiii|l ○    ●        ∫∬∫∬        ●    ○ ii|iiii|iiii|iiii|iiii|iiii|iiii|iiii|li
               ○○  ●●      iiiii iii ii iiii       ●●  ○○
           [ ̄ ̄] [ ̄ ̄]   ( ̄ ̄ ̄ ̄ ̄)    [ ̄ ̄] [ ̄ ̄]
                |_○_|  .|_○_|     |_____|     |_○_|  .|_○_|

    ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧
    (    )(    )(,    )(,,    )    ,,)(    )(    )(,    )(,    ;)
   とうとう糞言語の王様が……  ザワザワ  かわいそうに  ナモナモ……
811808:02/08/14 00:26
>>809
標準のヘッダファイル???

私の場合、いきなりAppWizardでした・・・。
自作ヘッダを読む場合に、VCが勝手に作ったプリプロセッサが
とても気になったんです・・・(爆死)
812デフォルトの名無しさん:02/08/14 01:22
ヘッダーファイルは何回読み込んでもよいとK&Rに書かれていたような気がするけど記憶違いかな?
今手元にないので確認できない。
813デフォルトの名無しさん:02/08/14 01:24
>>811
stdio.hやstring.hのことだろ?
>>812
インクルードガードしてあるから標準ヘッダに限っては何度読み込んでもよい
…じゃなかった? 俺も手もとにないからうろ覚えだけど….
815811:02/08/14 01:33
夜中までご苦労様♪

>>813
ほとんどMFC使っていたので知りませんでした・・・(汗)
勉強不足の感あり・・・。
>>815
> 夜中までご苦労様♪

なんかむかつく
>>816
まぁまぁ…確かに徹夜組が見ると殺気を覚えるかもしれんが….
818解析:02/08/14 01:46
ご苦労様というのは目上の人が目下の人に使う言い方なので、
気をつけないと大変な時があります。「お疲れ様」が適切です。

ただ、♪をつけてる時点でどの道煽りっぽくなってるので
この場合はあまり気にする必要はないでしょう。
>ただ、♪をつけてる時点でどの道煽りっぽくなってるので
>この場合はあまり気にする必要はないでしょう。

ワラタ
業界によっちゃあ
ご苦労様 と お疲れ様 の意味合いが
完全に逆転しているところもあるしな
821名無しさん@vi:02/08/14 01:51
Cはもう古いというイメージがあるのですが、いまでもよく使われていますよね。
信者が多いからですか?
>>820
やくざやさんも逆転している。
823C++使い:02/08/14 01:53
信者多すぎです。
なんでもかんでもCでやろうとします。
助けてください。
824デフォルトの名無しさん:02/08/14 01:56
>>821
適材適所ってこと。
VBやC#なんかでOSやドライバを書こうとする馬鹿はいない。(いたらスマソ)
>>823
そう? C厨は見掛けたことないなぁ….
>>824
VBで書かれたドライバ…ヤダーヨ.
>>827
おれはGNU信者だけど、GNUコーディング規約には反吐が出る。
長くなっても関数定義は一行にしたい
>>828
俺もGNU信者だけどGNUコーディング規約は嫌い….
>>829
何文字までだったら、一行に書いても心が痛まない?
832デフォルトの名無しさん:02/08/14 02:11
>>831
何文字でも。と言いたいけれど、さすがに100文字越えたら・・・
>>832
やっぱ100文字が心理的境界線だよね。
qsortの関数定義は変数名にもよるけど100文字くらいいきそう。
一行だと//コメントが書けねーよぅ
>>835
言ってる意味が分からんのだが…?

>>834
typedef使って簡潔にまとめたらいいんじゃないか?
>>835
パラメータにひとつずつコメント入れる派?
>>824
Prologで書いたOSならありますぜ(w
そういえばJavaでOS書いたな。
>>839
ソースきぼん
>>839
|-`).。oO(OS->VM->Javaで書いたOS->Javaで書いたOS用のVM->Javaアプリって感じかな?)
>>841
恐怖
VMを半分Javaで書いた。 どうしようもないところはネーティ部だけど。
OSちゃうやん
845770:02/08/14 10:12
>>799
GUI奥深し、、ですね。ちょっとDelphiにいくか、C++系にいくか、考えましたが
C++系に行こうと思ってます。
>>800>>801
C++Builderという言語は存在自体知らなかったですね。今度調べてみます。
>>805
今からちょっとロムってみたいと思います。

皆様、いっぱいのレスありがとうございました。大変勉強になりました。
846デフォルトの名無しさん:02/08/14 10:23
>>757
そういう都合を考えたら、syslogがいいなぁ・・
Windowsじゃ使えないけどね。

Windowsでsyslogみたいなことやれないかな??
知ってたら誰かおせぇて
>>823
> 信者多すぎです。
> なんでもかんでもCでやろうとします。
例えば、COBOLしかできなくて何でもCOBOLでやろうとするのは
COBOLerであってCOBOL信者ではない。
よって、なんでもかんでもCでやろうとするのは
ただのC厨(Cモンキーでも可)であって、信者ではない。

信者とは根拠もなく「××は最高だ!」とほざく奴らのこと。
で、C言語は最高だと言う奴はRuby, Delphi, VB, Java使い
とかと比較してあまり見かけない。
848デフォルトの名無しさん:02/08/14 10:54
 _________
/∴∵∴ヽ
|∵∴∞ヽ|  _______
|∴/= ♀=| <C言語サイコー!
\|   ▽/   ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ̄ ̄
>>837
うん。
>>770
>C++Builderという言語は存在自体知らなかったですね。今度調べてみます。
「C++Builderという言語」は無いよ。念のためつっこみ。

DelphiはObjectPascalという名をやめてDelphi言語になるらしいけど。
それからするとC++Builer言語というのもそのうちに、、、なるわけ無いよな。
>>850
ある意味C++をDelphi言語に近づけたC++Builderという言語なのかもしれん。
うむ独自の言語拡張と(それを利用した)VCLで、もはやC++とは呼べん
言語自体は普通にC++だと思うけど。
VCLを扱うときに拡張キーワード使うことがあるってだけで、言語がDelphiに近いとは思わんが。
C++としても使えるというだけだな
> C++としても使える

なんか不満?
VCよりANSIに準拠してると聞いたような聞かないような。
違ったっけ。
VC++と比べてどうこうは置いといて、
> もはやC++とは呼べん
というのが、?だ。ま、スレ違いだしどうでもいいけど。
そういや昔 OWL なんていうのがあったっけな。
BCB6ユーザーですが、何か?
VCLを使う時だけC++らしくなくなりますが、それ以外はANSI-C++として
普通に使えますが何か?
>>859
スレ違い
>>858
OWL持ってる。BC5.0買ったからなぁ(w。一度もOWL使ったことないけど。
>>857
C++はほとんどの場合Cとして使えるがCとは呼べない
まあ、あんたがどう呼んでも構わないよ。
>812
何回読み込んでも平気だよ。
ただ、#defineや構造体定義などなどが二重定義で引っかかる。
'Flg' の初期化が 'case' ラベルによって行われませんでした。

case 0:
 bool Flg=true;
 break;
case 1:
 break;

なにがだめなんでしょうか?
>>865
Cならそれはダメだろう・・・。
case 0:{
 bool Flg=true;
 break;
}
普通は,
{}で囲うべき?
>>867
そうするとFlgは一度も参照されない変数に・・・。
そのFlgは何の役に立っているのかと小一時間(略
>>869
それが嫌ならswitch文の前で宣言すべし
>>871
小細工せずにはじめからそう教えるのがベストですな。
普通に switch ブロックの外で定義したらよいのでは。

case 1:
 Flg = false;
break;

なんてときに、Flg の定義が飛ばされて矛盾するからでは
ないのだろうか。
874871:02/08/14 23:25
私は867じゃないが?
875867:02/08/14 23:32
いや、switch内は大幅に省略されているとみたもので、、
>>875
それにしても書いたとき自分で気持ち悪くならなかったのかと思って。
877初心者:02/08/15 05:12
連続したファイル名を作る方法を教えてください。

for などでループして、i=0 ....10 とかで

file1
file2
file3
...
file10

というような感じで作りたいんですが、ループの数字を
ファイル名に足す方法がわかりません。
初心者過ぎてすみません。

itoa
strcat
まぁsnprintf使う程のモノでもないわな.
俺は可読性重視でsnprintf使うが.
sprintf(s,"file%d",i);
881デフォルトの名無しさん:02/08/15 05:38
C言語でとにかくグラフィックを出力したいのですが
もっとも簡単に出力するやりかたを教えてください
グラフィック版hello worldのような
main(){printf("( ´∀`)");}
>>881
残念ながらC言語では標準のGUIライブラリはない == 処理系依存.
WindowsでVC++使ってるんならWin32APIやMFCあたりがメジャー.
Unix系(Linux含む)ならXlib, motif, GTK+, qtあたりかな.
自分で調べて気に入ったの使え.

…っていうか処理系ぐらい書けや, ゴラァ!!
>>880
発想に惚れ惚れしたよw

>882
ですた。
886881:02/08/15 05:50
>>882
(;;
>>883
グラフィックを出力するにはそういう
外付けが必要だったんですね
わかりました
ありがとうございます
887877:02/08/15 06:05
>878
>879
>880
うーむなるほど、どうもありがとうございました。

889お願いします:02/08/15 06:21
int sample(void){
int i;
time_t tt;srand(time(&tt));
i=rand()%100;
return(i);
}
void main(){
int p,x=1;
while(x<1000){
x++;
p=sample();
printf("%d\n",p);
}
}
//////////////////////////////////////////////////////////

イメージとしてはいろいろな数字がずらずらーと表示されるはずだったのですが
実行しても同じ数字しか吐き出しません。なぜなのでしょう?
>>889
time()の値が変わるタイミングよりも、
main()でsample()が呼ばれるタイミングが早いので、
sample()内のsrand()への引数が常に同じ値になってしまうのが原因。

試しにmain()のwhileの最後にsleep(1);を追加してみれば
値が毎回変わることを確認できるはず。
srandはrandの初期化をする。
srandの引数に同じ値を渡すと、当然直後のrandの値は同じになる。
ということは・・・
>>889
srandはmainの中で1度だけ実行すれ.

あとrand()は%とセットで使わないほうがいい. manだとrand(3)参照.
893889:02/08/15 06:40
>>890-892

こんな朝早くからありがとうございます。
もう少しがんばってみます。
とりあえずお礼まで。
プログラマーの朝が早いのか、夜が遅いのか・・・。
早朝って微妙な時間帯だよねー。
寝てないだけだろ。
あまり突っ込むと、おれみたいに不機嫌になるぞ?
怒らないでよー。カルシウム取ろうよー。
おれは酔っ払ってこれから寝るところだよ。
よいこのプログラマは真似しちゃだめだぞ。
898デフォルトの名無しさん:02/08/15 08:14
魔板も無板も空気がカリカリしすぎだよね
プログラマ志望としては萎える
899デフォルトの名無しさん:02/08/15 08:55
#include <stdio.h>
#include <math.h>

#define pi 3.141592 /*円周率*/

int second;/*秒*/
int from;/*何秒から*/
int to;/*何秒まで*/
double r;/*ラジアン*/
float kaku;/*度*/
float v0;/*初速度*/
float g=-9.8;/*重力加速度*/
float vx;/*x軸の速度*/
float vy;/*y軸の速度*/
float xx;/*x軸の距離*/
float xy;/*y軸の距離*/

int main()
{
printf("放物線運動の秒毎の速度と位置を出力します\n");
printf("初速度を入力してください\n");
scanf("%f",&v0);
printf("x軸に対する角度を入力してください\n");
scanf("%f",&kaku);
printf("出力する区域(秒)をスペースで区切り入力してください\n");
scanf("%d%d",from,to);
r=kaku/180*pi;
for(second=from;second<=to;++second){
/*時間の表示*/
printf("%d秒",second);
/*x軸の速度*/
vx=v0*cos(r)+0*second;
printf("x軸速度:%4.0f",vx);
/*y軸の速度*/
vy=v0*sin(r)+g*second;
printf("y軸速度:%4.0f ",vy);
/*x軸の距離*/
xx=v0*cos(r)*second;
printf("x軸距離:%4.0f",xx);
/*y軸の距離*/
xy=v0*sin(r)*second;
printf("y軸距離:%4.0f",xy);
}

return (0);
}
900899:02/08/15 08:59
放物運動のプログラムを作ろうとしているのですが
「出力する区域(秒)をスペースで区切り入力してください」
というメッセージに対し"1 10"とか入力すると
「このプログラムは不正な処理を行いました」
というポップアップがでてきてしまいます
まるなげで恐縮ですがどこが悪いんでしょうか

THROWING のページ違反です。
モジュール : MSVCRT.DLL、アドレス : 017f:7802498c
Registers:
EAX=00000000 CS=017f EIP=7802498c EFLGS=00010202
EBX=00000020 SS=0187 ESP=0073fb88 EBP=0073fd58
ECX=78037c48 DS=0187 ESI=00000064 FS=4d37
EDX=78037c48 ES=0187 EDI=00000001 GS=0000
Bytes at CS:EIP:
89 38 e9 91 f7 ff ff 66 89 38 e9 89 f7 ff ff ff
901899:02/08/15 09:00
コンパイラはgccを使っています
とりあえず
scanf("%d%d",from,to); =>
scanf("%d%d",&from,&to);


903899:02/08/15 09:41
>>902
あ!
そんな基本的なところを・・・
>>903
math.hにM_PIって定義されてない?
>>904
3.1415926535
906-W -Wall:02/08/15 12:49
>>899と似たのをたびたび見かけるんで
次スレははじめの方に
★警告レベルは必ずageよう!★
とか書いた方がいいような気がする。

どうよ。
>>906
賛成ですな。他の処理系の警告レベルについても併記したらいいね。
VC++とかbccとか。おれはgccしかしらんから付け加えることは何もない。
908デフォルトの名無しさん:02/08/15 17:01
printfみたいな可変個の引数の関数は<stdarg.h>を使って実現できますよね。

で、このとき実際、可変個って最大何個渡せるかというのは、
どこで決まるものなんでしょうか?
>>908
スタックの大きさじゃん?
OS次第と思い思われ振り振られ
910デフォルトの名無しさん:02/08/15 17:31
>>909
OS次第じゃないでしょ
899=907
少なくともお摘むは同レベル。(藁
>>910
ほとんどの場合はOS次第でいいんじゃない?

引数全部レジスタ渡しな呼び出し規約のCPUなら
レジスタの個数に制限されたりするんだろうけど。
32個くらい保証すればいいんじゃなかったっけ。
質問です。
よく使われる変数って、register int としなくてもコンパイラが
最適化するときにレジスタに格納するようしてくれるんですかね?

環境は VC++ 6.0 ですが、ほかのコンパイラの話でもかまいません。
>>914
>register int としなくても
最近はコンパイル時にほとんど無視される指定のようです。
>>915
そうだったんですか…
ありがとうございました。
917910:02/08/16 05:31
>>912
スタックサイズのことを言っているんだけど・・・
>>917
スタックサイズはプロセッサによって制限がある。
その制限内において、OSによって制限がある。
その制限内において、リンカによって定められる。
そのサイズはリンカオプションで増減できる。
ということではないのか?
>915
正確にはvolatile指定をしない限りコンパイラは極力レジスタを使うようコンパイルします

場合によっては逆に問題が発生するからvolatile指定しなきゃいけないけど
(゚∀゚)どうでもいいんだけど、こないだ
ローカル変数にvolatileつけてるコード見たんだけど
これって何か意味あるのかね?
921デフォルトの名無しさん:02/08/16 16:38
>>915
コンパイラオプションで指定できるんじゃないの?
(少なくともBorlandはできたはず……デフォルトは「コンパイラに任せる」だったかな。)
922デフォルトの名無しさん:02/08/16 16:45
ttp://www.h3.dion.ne.jp/~unisoft/progtech.html
ここの「2.1 静的ライブラリ」の説明ってどうよ?
>>920
ローカル変数のメモリ上のならびに依存したコードを書いたなど
まあマトモなコードじゃなかろうが
>>922
論外
> 上の gcc では -I 以降の /usr/loval/include にユーザ・ライブラリが
> 有る事を示している。
ヘッダファイルはライブラリではない

> ncurses.h は /usr/include に保管されている。
> (正確には、/usr/include/ncurses/curses.h にリンク)
正確に言っているつもりが逆に間違っている
setjmp()/longjmp()使ったことない>>923ハケーン。
>>925
それは>>923と同じじゃない?
レジスタ上の変数が破棄される可能性の話だから
>>926
どこが同じに読めるんだ。
> レジスタ上の変数が破棄される可能性の話だから
>>923はそんなこと一言もいってないだろ。
928926:02/08/16 17:54
まあまあまた〜り
レジスタとメモリどちらに載るかという意味で書いただけなので
無視してもらってかまいません
(゚∀゚)

意味もなくこれ→(゚∀゚)←つけるヤシって嫌い。

(゚∀゚)アヒャ
( ´_ゝ`)フーン
>>929
トレードマーク
(゚∀゚)呼んだか?
(゚∀゚)次スレまだかよ
(#・∀・)カエレ!!
>>929
つまりmodokiってヤシがUZEEEEEEEeeeeeeeeeeeと、いうことですか?

(・∀・)こっちのうほうがすき。
936modoki ◆zVn/zRzw :02/08/17 12:29
|∀゚)そんなこというなよ
CとC#の違いを教えてください。
#がついてるかついてないかとか言わないでください。
>>937
ちょっと調べればわかることだろ。
>>937
書店に並んでいる C、C# の本を一冊ずつ買ってくる。
両方勉強しる。
(゚д゚)ウマー
940デフォルトの名無しさん:02/08/17 16:24
>>925
そんなもの使うなよ
>>937
半音高いことです。
>>941
同意。
C → C# → も〜っとC → Cどっか〜ん!
>>943
びっくり!五人目のプログラマ見習い登場!?
おジャ魔女ドレミ ヲタがまぎれててキモいんですが。
じゃあ帰れよ
switch文のcaseのなかにreturn;をいれているんですけど,これっていいんでしょうか?
>947
別に構わない
>>948
ありがとん
950950ゲッター:02/08/18 02:19
950
951951ゲッター:02/08/18 02:24
951
新スレ

C言語なら、俺に聞け! <29>
http://pc3.2ch.net/test/read.cgi/tech/1029605182/
953デフォルトの名無しさん:02/08/18 06:46
ファイル読み込んでバイナリモードで先頭から1bitづつ配列にいれていきたいのですがどうすればいいですか?
954デフォルトの名無しさん:02/08/18 07:03
for
955 :02/08/18 09:55
>>953
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main(int argc, char *argv[]) {
 FILE *fp;
 int c;
 int bit;
 int i;
 size_t size;
 char *vector;

 if (argc == 1) {
  return EXIT_FAILURE;
 }

 if ((fp = fopen(argv[1], "rb")) == NULL) {
  fprintf(stderr, "%s: %s\n", strerror(errno));
  return EXIT_FAILURE;
 }

 fseek(fp, 0L, SEEK_END);
 size = ftell(fp);
 fseek(fp, 0L, SEEK_SET);

 if ((vector = malloc(size)) == NULL) {
  fprintf(stderr, "out of memory\n");
  return EXIT_FAILURE;
 }

 for (i = 0; i < size && (c = getc(fp)) != EOF; i++) {
  vector[i] = 0;
  for (bit = 7; bit >= 0; --bit) {
   vector[i] <<= 1;
   if ((c & (1 << bit)) != 0) {
    vector[i] |= 1;
   }
  }
 }
 return EXIT_SUCCESS;
}
956デフォルトの名無しさん:02/08/18 12:46
>>955
単にbitの並びを逆転させた配列を作ってるだけのような気がするが。。
957955:02/08/18 14:25
>>956
は?逆転なんかしていませんが。
バイナリモードでファイルを読んで、先頭から1ビットずつ配列に入れる
という要求をそのままコードにしただけですが、何か間違っていますか?
958デフォルトの名無しさん:02/08/18 14:50
ど初心者丸出しの質問で申し訳ないのですが・・・。

マクロ展開後のソースを読む方法を教えて下さい。
(コンパイルオプションだと思うのですが、探し方が悪いためか、
ドキュメントで見つけられず)

使用可能なコンパイラは、

(1) gcc
(2) BCC5.5.1
(3) VC++6.0

の3つです。
(カナリ恥ずかしいですが)よろしくお願い致します。m(_ _;)m
>>958
プリプロセッサ通す。
960デフォルトの名無しさん:02/08/18 14:55
>>959
ありがとうございます。
できれば、具体的な操作方法(またはヘルプ検索のキーワード)を教えて頂きたいのですが。
>>960
man cpp
>>957
読み込んだcをMSBから調べていって、vector[i]のLSBからセット
していくんだから、bitの並びが逆転してるのは間違いない。
それが963の要望とあっているかどうかはわからないけど。
レス数が950を超えています。1000を超えると表示できなくなるよ。
(´・∀・`)ヘー
>>958
VC++6.0ならcl /?でオプションの一覧を参照できるだろ。
967955:02/08/18 19:15
>>962
うだうだ言ってないで動かしてみれ。
>>962
つーか963は別に何も求めてないだろ。
新スレ立ってまふ

C言語なら、俺に聞け! <29>
http://pc3.2ch.net/test/read.cgi/tech/1029605182/l50
さて。
そろそろ
うめとくか
973デフォルトの名無しさん:02/08/19 11:09
scanf("%d %d",from,to);
だろ
埋めなくていいよ。
>>973
ネタですか?ねぇ、ネタですか?ネタって言ってくださいYO!!
>>975
int f, t;
int *from = &f, *to = &t;

ってやりゃいいんだ(w
あ、いや、そうなんだけどさぁ…(笑)。
うめうめ
たてたて
980デフォルトの名無しさん:02/08/20 15:55
標準入力関数のエコーバックって消せますか?
>>980
コンソールの設定変えてくださいな。
>>980
犯罪のにおい
UNIX Cで、分割コンパイルのやり方を教えてください
おながいします

ワケワカンネェヨ ヽ(`Д´)ノ ウワァァァン
>>983
makefileの勉強をしる!
>>983
cc -c a.c
cc -c b.c
cc -c c.c
cc -c d.c
cc -o e a.o b.o c.o d.o
>984
まずはリンカではないかえ?
cat a.c b.c d.c e.c > tmp.c && cc tmp.c
それはむしろ結合コンパイル。
ネタをネタ(略
埋めろー!!
埋め立てですが何か?
cat a.c b.c d.c e.c | gcc -x c /dev/stdin
>992
バカモノ! こうだる!

--- a.cの中にて ---
#include "b.c"

--- b.cの中にて ---
#include "c.c"



それで、cc a.cとすれば完璧。
994折衷案:02/08/22 23:36
for c in *.c; do echo "#include \"$c\""; done | gcc -x c /dev/stdin
995デフォルトの名無しさん:02/08/23 06:05
cc -c a.c
cc -c b.c
cc -c c.c
cc -c d.c
ar q libe.a b.o c.o d.o
ranlib libe.a
cc -o f a.o -L. -le
996げっと
1!
2!
3!
だーーーーーーーーーーーーー!!!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。