C言語なら、俺に聞け! <27>
■ このスレッドは過去ログ倉庫に格納されています
0001日下部? ということにしたいのですね? :)
NGNG・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日下部氏の激動の半生は過去スレを参照
0446sage
NGNG0447デフォルトの名無しさん
NGNGんなわきゃないでしょっ びしっ。
0448デフォルトの名無しさん
NGNG文字列リテラルの最適化のことか?
0449二つ目のお気に入りとして
NGNGサイトを目指しています。しかも総合リンク
サイトとしては日本初のナビゲーションリン
ク機能を搭載して、全てのサイトを右フレー
ムに表示できるようにしてあり、あらゆるサ
イトをさくさく表示することができます。是
非ブックマークに登録して活用してください。
http://home9.highway.ne.jp/cym10262/
0450デフォルトの名無しさん
NGNGif(a!=b)とか考えたことないや。出来るのかな?
0451デフォルトの名無しさん
NGNGまずは比較する際の「意味」を考えれ。
struct Proc p, q; // プロセス構造体
if( p < q ) ・・・
もしこんな風に書けたとしても、
結局の所「何を」比較しているのか意味分かるか?
0452デフォルトの名無しさん
NGNGa==b・・・aとbが同じ
a!=b・・・aとbは違う。
0453デフォルトの名無しさん
NGNGレコードの比較。
違いがあるのかないのか。
等等の用途に。
比較したい時ってない?
メンバがいっぱいある時、一つずつ比較するのは面倒だろ。
1byte境界にしてmemcmpか? ちと嫌だ。鬱だ。
0454デフォルトの名無しさん
NGNGそろそろC++の時期
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNGC++で万事解決?
解説本でスパッと説明されているのを見たことないなあ。
入門編しか読んだことないからかな。
解説してくれるとうれしいです。
>>455
多種多様な構造体ごとに作るのは鬱にならないか?
指定された構造体が記録されているメモリブロックをユニークに
参照して、パディング位置が判別出来れば比較用関数1つで済むだろうが。
0457デフォルトの名無しさん
NGNG>指定された構造体が記録されているメモリブロックをユニークに
>参照して、パディング位置が判別出来れば比較用関数1つで済むだろうが。
そんな無茶苦茶な。アラインメントによる隙間だってあるかも知れんし
ポインタの参照先がデータ本体かも知れんし、上にもあったが
意味上の問題もあるし(リストの連結に利用するポインタの値が
違うからといって意味的に同値で無いとは限らんだろう?)
C++では演算子のオーバーロードが出来るし、ポリモーフィズムも
可能だから456の意向に近いことは出来ると思うがな
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNG普通に定義したら、複数のCファイルでそのヘッダファイルをinclude
しているので、multiple definitionと言われる。
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGヘッダファイルに関数定義を入れないといけない理由は?
0462名無しさん@XEmacs
NGNG#ifdef xxxxx_h
とかやって、回避してください。
具体的な方法は、標準的なヘッダファイルに同じことが
普通はかいてあります。
たとえは、stdio.h などにも、ちゃんと多重定義しないように
そういう処理がかいてあるので参考にしてください
0463デフォルトの名無しさん
NGNG459の犯してる誤ちはそういうことじゃない
0464デフォルトの名無しさん
NGNG単に外部参照したいだけ?
externで解決か?
0465495
NGNGANSI Cの時間計測関数より正確に時間計測できる
関数ってOSによって異なってますよね。
それをラッピングするマクロがヘッダファイルに書いてあったんです。
しかし、そのままではどうしてもコンパイルが通らないんです。
よくよく調べてみたらマクロで定義できるほど単純ではないことに
気がついて、マクロではなく関数で定義しようとしたんです。
0466463
NGNG未来からのメッセージですか?
もう一度ヘッダファイルのなんたるかを再考してみよ
0467デフォルトの名無しさん
NGNG>465
とりあえず、問題のソースをはってみそ
0469デフォルトの名無しさん
NGNGヘッダでは関数宣言、別途.cファイルで定義を記述。
がベストだろ。
#ifdef HOGE
関数定義
#else
関数宣言
#endif
として、どこか1つのソースだけで、このヘッダを読み込む前に
#define HOGE
する手もあるが、お勧めできない。
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNGまさか、おれの知ってるやつじゃあるまいな。
そいつ、ヘッダに関数を定義するの得意だった。
0473デフォルトの名無しさん
NGNG3×3のマスの中にチェスのナイトが置かれている。
(1) 3×3の配列aを定義して、すべての要素を0に初期化。ナイトの位置は1で、空欄は0で配列に記録。
スクリーン上には、□で空欄を、★でナイトの現在位置を表示する。(ナイトの最初の位置はプログラマーが選択してよい)
(2) チェスのナイトは、将棋の桂馬と同じ動きをするが、前だけでなく左右や後ろにも桂馬飛びができる。
そこで、3×3の配列bとcを宣言して、それぞれに現在位置(i,j)から移動できるマスの番号を2桁の整数で入力する。
移動できるマスが(3,1)ならば31と入力する。(この問題では移動できるマスは常に2つなので配列bとcを使います。)
(3) 現在のナイトがいる配列bの要素を10で割った商と余りを利用して、移動できるマスを(i,j)の形でプリントする。
同様に、配列cの要素をプリントする。
(4) ユーザーからの入力を読み、上の(3)で求めた(i,j)のどちらかならばナイトを移動して、新しい状態をプリントする。
入力が-1,-1ならばプログラムを終了する。
(5) 上の(3)と(4)を繰りかえす。
条件:配列aを引数として、現在ナイトがいる場所をプリントする関数を作製すること。
0474デフォルトの名無しさん
NGNGがあったけど。
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1027756023/199
http://pc3.2ch.net/test/read.cgi/tech/1027756023/247-248
0478デフォルトの名無しさん
NGNGこういう人のために時間をかけるのはどうなのだろうか。
0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNG>問題の意味もいまいちわからないし。
つまり、俺らがめちゃくちゃな解答をしてあげても先生に
「できました!かんっぺきです!ボクは天才ですから!いやーハハハハ」
とかいって提出する可能性があるわけだな
0482おしえて〜
NGNGa=2.0;
b=3.0;
c=5.0;
c[0]=a+b+c;
c[1]=a+b-c;
c[2]=a+b*c;
c[3]=a+b/c;
c[3]=a-b+c;
・
・
・
数値は同じで演算子だけを+、-、*、/の全ての組み合わせで計算したいのですが、全て書くのは大変です。
何とかこのソースを簡単に出来きませんか?
教えて下さい。
0483おしえて〜
NGNGa=2.0;
b=3.0;
c=5.0;
d[0]=a+b+c;
d[1]=a+b-c;
d[2]=a+b*c;
d[3]=a+b/c;
d[4]=a-b+c;
・
・
・
0484デフォルトの名無しさん
NGNGそういうコードを生成するコードを書きなさい
0485おしえて〜
NGNGすいません具体的にお願いします。
0486デフォルトの名無しさん
NGNG#include <stdio.h>
int main()
{
int i;
const char op[] = "+-*/";
for(i = 0; i < 16; ++i) printf("d[%d]=a%cb%cc;\n", i, op[i/4], op[i%4]);
return 0;
}
0487おしえて〜
NGNG0488デフォルトの名無しさん
NGNGここまで出たんだから、ソース吐かせずに
プログラム中で計算する方法を考えるべし
0489おしえて〜
NGNGたびたびすいません。やっぱり分かりません。
486のソースをどお変えればよいのでしょうか?
初心者なので教えて頂けないでしょうか。
お願いします。
0490デフォルトの名無しさん
NGNG演算子の順位がめんどくさそう
0491デフォルトの名無しさん
NGNGこんなもんかな。ただし演算子の優先順位は考慮してないよ。
#include <stdio.h>
static double add(double a, double b)
{
return a + b;
}
static double sub(double a, double b)
{
return a - b;
}
static double mul(double a, double b)
{
return a * b;
}
static double div(double a, double b)
{
return a / b;
}
int main()
{
int i;
double (* op[])(double, double) = {add, sub, mu\
l, div};
double d[16], a = 2.0, b = 3.0, c =&n\
bsp;5.0;
for(i = 0; i < 16; ++i)
d[i] = op[i/4](a, op[i%4](b, c));
return 0;
}
0492491
NGNGこっちが正しい。
#include <stdio.h>
static double add(double a, double b)
{
return a + b;
}
static double sub(double a, double b)
{
return a - b;
}
static double mul(double a, double b)
{
return a * b;
}
static double div(double a, double b)
{
return a / b;
}
int main()
{
int i;
double (* op[])(double, double) = {add, sub, mul, div};
double d[16], a = 2.0, b = 3.0, c = 5.0;
for(i = 0; i < 16; ++i)
d[i] = op[i/4](a, op[i%4](b, c));
return 0;
}
0493デフォルトの名無しさん
NGNGどうでもいいが、なんでそんなにエディタの幅がせまいの?
0494493
NGNG0495おしえて〜
NGNGすいません。実行できないんですが・・
0496491
NGNGインデントがちゃんと見えるようにスペースを に置換してる。
んで、面倒なんで行頭のスペースだけじゃなくてソースにあるスペースを全部
に置換してるから、やたら幅を食う(笑)
ちなみにエディタというかターミナルの幅は95にしてる。
0497デフォルトの名無しさん
NGNGちょっとはその足りない脳みそ使ってみろよ
0498491
NGNGありゃあ。一応こっちではコンパイル/実行してみてるんだけど。
実行できないというのはどのレベル?
・コンパイルできない
・コンパイルできたけど実行したら保護違反とかなんとか言われてしまう
・結果が表示されない
多分、結果の表示がなされてないとかいうことかな。してないな(w
mainのreturn 0;の前に
for (i = 0; i < 16; i++)
printf("d[%d] = %f\n", i, d[i]);
と入れてみてくれ。
0499おしえて〜
NGNG実行すると、
『実行時エラー:不正なアドレス参照』とだけでます。
0500デフォルトの名無しさん
NGNG#include <stdio.h>
static double add(double a, double b) {
return a + b;
}
static double sub(double a, double b) {
return a - b;
}
static double mul(double a, double b) {
return a * b;
}
static double div(double a, double b) {
return a / b;
}
int main() {
int i;
double (* op[])(double, double) = {add, sub, mul, div};
char str[] = "+-*/";
double d[16], a = 2.0, b = 3.0, c = 5.0;
for(i = 0; i < 16; ++i)
if ( i/4 < 2 && i%4 > 1 )
d[i] = op[i/4](a, op[i%4](b, c));
else
d[i] = op[i%4](op[i/4](a,b),c);
for( i = 0; i < 16; i++ )
printf( "%f %c %f %c %f = %f\n", a, str[i/4], b, str[i%4], c, d[i] );
return 0;
}
0501デフォルトの名無しさん
NGNGおおすばらしい。
でもこれなら、結局普通に式を16個書いたほうがいいね。
ぐふっ
0502おしえて〜
NGNG実行すると
エラー:無題:4行目:パーサーエラー、・E は間違っています。
と出るんですが。
0503おしえて〜
NGNG0504デフォルトの名無しさん
NGNG全角スペースをなおしたか?
0505デフォルトの名無しさん
NGNG「コンパイル」と「実行」という言葉を使い分けよう
0506デフォルトの名無しさん
NGNGツッコミにワロタ
0507おしえて〜
NGNG直しましたが、やはりできません。
0508おしえて〜
NGNGこっちも忙しいんです。
0509デフォルトの名無しさん
NGNGコンパイルエラーの出た行を貼ってくれ。(ソースの)
0510おしえて〜
NGNG0511デフォルトの名無しさん
NGNGごめんね。
0512デフォルトの名無しさん
NGNGerror C2018: 文字 '0x40' は認識できません。
がいくつか出てくるのだが・・・
0513デフォルトの名無しさん
NGNGマターリイイ!
0514おしえて〜
NGNGCmachineが原因でKERNEL32.DLLにエラーが発生しました。Cmachineは終了します。
と出てCmachine強制終了してしまいます。
0515デフォルトの名無しさん
NGNGそれおもいっきり全角スペースじゃん
0516デフォルトの名無しさん
NGNG全角スペースを除去しろよタコ
0517デフォルトの名無しさん
NGNGスマソ
忘れてた(w
0518おしえて〜
NGNG0520デフォルトの名無しさん
NGNGみんな分かっているから気にするな。
対象のソースを丸ごと貼ってくれい
0521おしえて〜
NGNGすいません。ソース待ちだったんですか。
#include<stdio.h>
static double add(double a,double b){
return a+b;
}
static double sub(double a, double b){
return a-b;
}
static double mul(double a, double b){
return a*b;
}
static double div(double a, double b){
return a/b;
}
int main(){
int i;
double(* op[])(double,double)={add,sub,mul,div};
char str[]="+-*/";
double d[16],a=2.0,b=3.0,c=5.0;
for(i=0;i <16;i++)
if (i/4<2&&i%4>1)
d[i]=op[i/4](a,op[i%4](b,c));
else
d[i]=op[i%4](op[i/4](a,b),c);
for(i=0;i<16;i++)
printf("%f %c %f %c %f=%f\n",a,str[i/4],b,str[i%4],c,d[i]);
return 0;
}
0522おしえて〜
NGNG0523デフォルトの名無しさん
NGNGまったくもんだいない。
Cmachineとやらの問題じゃないの?
0524デフォルトの名無しさん
NGNGCmachineを使うのは初めてかい?
以前に違うソースは実行できた?
0526おしえて〜
NGNGそうですか。どうしてもできません。プログラムを動かす基の部分が原因だと思うので諦めます。
ありがとうございました。
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNGprintfとかstrcpy程度。
0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNG0532デフォルトの名無しさん
NGNGやっぱりw
>>530
初心者向けCエディタとでも言えばよいのかな?
ちなみにフリー。
0533デフォルトの名無しさん
NGNGCでは以下のように複数のファイルで
同一名のグローバル変数を定義しても
C++とは違い、エラーになりませんが、
これは言語仕様でしょうか?
file1.c
int foo=3;
file2.c
int foo=7;
0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNGfile2.cの中でfooを参照すると7になります。
staticを付けてないので両方のfooは外部リンケージ
を持つのに 「外部リンケージを持つ変数はプログラム
の中でただ一つの定義を持たなければならない」という
規則に違反しないんでしょうか?
0536デフォルトの名無しさん
NGNGexternしなけりゃ外部リンケージ持たないとか?
staticにすると、externができなくなる、と。
0537デフォルトの名無しさん
NGNG解決できたのかな。とりあえず、そのCmachineとやらいう変な処理系捨てて、
まともな処理系、たとえばgccなりbccなりを使ってほしい。
じゃないと変な癖つくよ。まかり間違って職業プログラマになってしまって、
しかもCを書くようになったら、かなりの困ったチャンになってしまうよ。
http://pc.2ch.net/test/read.cgi/prog/1021560641/l50
このスレで晒されるような存在になってしまうこと必至(w
で、Cmachineを使わざるを得ないというのであれば、ちょっとだけヒントを。
ただ、これでも動くかどうかはわかんないけど、トリッキーなことやってないので、
多分動くのではないかと。
以下の関数をop[なんちゃら](かんちゃら, どうした)って呼んでる部分で
置き換えてみるとよい。evalの引数opはどうやって得るかは考えてね。
double eval(char op, double a, double b)
{
switch (op) {
case '+':
return a + b;
break;
case '-':
return a - b;
break;
case '*':
return a * b;
break;
case '/':
return a / b;
break;
}
}
0538デフォルトの名無しさん
NGNGリンクエラーになる。
0539デフォルトの名無しさん
NGNGCではリンクエラーにならんそうです
0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNG0542API学くん
NGNGvoid *HENSU
という表現があったのですが、意味がわかりません。
ボイドへのポインタの意味を教えていただけないでしょうか。
voidは関数に付けて返り値のないものという認識だったのですが、
変数に付いてさらにポインタというところがわかりません。
0543デフォルトの名無しさん
NGNGどうしたらいいのでしょう?
vector<char []> list;
vector<char [256]> list;
いずれもだめなようで
vector<char *> list;
とするとOKなのですが
while (inifile.getline(ss,256)){
CorpusList.push_back(ss);
AfxMessageBox(ss) //この段階では表示される
}
AfxMessageBox(CorpusList[0]);//あれれ・・・表示されない
するとAfxMessageBox(MFCのダイアログ表示命令)
になにも表示されません・・・
0544デフォルトの名無しさん
NGNGスレ違い
0545デフォルトの名無しさん
NGNGstatic指定されてない外部宣言は外部リンケージをもつ。
>>538 >>540
VC++6.0だとエラーと出るが実行できるぞ。(SPあててない)
BCC5.5.1だとエラーにならずに実行できるね。
gccは試してないけど、これが正しいのか?
■ このスレッドは過去ログ倉庫に格納されています