1 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:29:45 ] エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 ※sageは禁止です。 【前スレ】 【初心者歓迎】C/C++室 Ver.36【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1175436073/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
40 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 00:10:05 ] Updateってやつの記述がないけど、Completeでいいのかな。 問題は自分を管理しているvectorをどうやって知るか、 どのタイミングで知るべきかってことだよね。 CのインスタンスよりもBaseListの寿命が長いことが確実なら、 std::vector<Base *> *m_pBaseList; をCに追加してコンストラクタで渡すのが手っ取り早いと思うけど。
41 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 00:11:58 ] >>38 それくらい、ヘルプや規格書読んだりググったりして自分で確認しようよ
42 名前:デフォルトの名無しさん [2007/05/10(木) 01:00:19 ] 環境:Linux gcc X上CUIで、マッピングが施される前のキーコード(物理的キーコード)をキーが押下された際に取得したいです。 スキャンコードまで低レベルでなくてよく、xmodmap -pk や xev で調べられる KeyCode に相当するものが丁度いいのですが、 showkey のソースを参考にした方法では /dev/console を Xサーバが握ってしまっていて不可能、 xev のソースの方法ではXウィンドウを生成せねばならず、CUI上で実装する方法が見つかりません…。 ncurses の keybound なども試してみましたがこちらはマッピング後のキー情報しか得られませんでした。 最悪 xmodmap した結果をパースして利用するなりでなんとかなるとは思うのですが、 何か都合の良い方法があるのではないかと諦めきれず質問させて頂きました。 識者の方がいらっしゃいましたらご教授くださいませ。
43 名前:39 [2007/05/10(木) 01:43:10 ] >>40 レスありがとうございます。 参考にさせていただきます。
44 名前:デフォルトの名無しさん [2007/05/10(木) 11:03:54 ] std::stringのリテラルを埋め込むにはどうすりゃいいのですか
45 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 11:13:12 ] リテラルの意味が分かってるんだろうか
46 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 11:22:21 ] >>42 その種の質問はUnixプログラミング質問スレかUnix/Linux板のほうが 回答を得られやすいと思われ
47 名前:デフォルトの名無しさん [2007/05/10(木) 22:01:06 ] 環境:タブ幅4, XP, bcc5.5.1, Cpad 猫でもわかるプログラミング / C言語編 第1部 / 第69章 ttp://www.kumei.ne.jp/c_lang/intro/no_69.htm 第70章 ttp://www.kumei.ne.jp/c_lang/intro/no_70.htm 第70章について、#include <stdlib.h>,<ctype.h>,<string.h> が抜けているのはすぐに解かるのですが、 第69章から第70章になり、変数宣言などが書き換えられてから 実行結果で"A1"が入力できずに以下のように判定されてしまいます。 if (check_location(row, col) != 0) { Locate(hOut, 0, MASU + 3); printf("そこには置けません!"); goto INP; } また、後手を選択すると"A2"も入力できず同様に判定されます、このときコンピュータは"A2"に置けます。
48 名前:デフォルトの名無しさん [2007/05/10(木) 22:01:48 ] 入力した"A1","A2"に何が入っているか調べるため printf("そこには置けません! %d,%d", row, col); とすると、(0,0)、(0,1) となり問題は無いはずなのですが 何処を直したら良いのかわかりません。第70章、第71章をコピペしても同様な状態です。 ソースどす ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3962.c 以下のsけいしさんのサイトではチェックされていませんでした。 sけいし発のホームページたち / DevC++でC++入門 ttp://skeishi.web.fc2.com/dev-cpp/neko/neko.html コメントまみれで汚いですが突っ込みお願いします。
49 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 00:09:56 ] 惜しい、猫の話じゃなければ相談に乗るんだが。
50 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 00:10:27 ] >>42 つ[XLibスレ]
51 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 14:58:41 ] >>48 printf("そこには置けません! %d,%d, %d", row, col, ban[row][col] ); こうすると、A1の時にはban[0][0]になんか値が入ってるぞ。 値が入ってたら、check_locationが!0を返すのは仕方ない事だな。 で、main()の宣言直後に初期化してみたが、 // init for ( row=0; row<MASU; ++row ) for ( col=0; col<MASU; ++col ) ban[row][col] = 0; それでも現象が変わらんね。 調べるのが面倒になったから、check_locationを改変してお茶を濁す。 int check_location(int row, int col) { if (ban[row][col]!=1 && ban[row][col]!=2) return 0; else return -1; } これでA1に置けるようになったぞ。 でもなんか石を取るロジックとかバグ多くないか?w
52 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 20:30:51 ] class A { public: virtual A& a() { return *this; } }; class B : public A {}; int main() { B b = A().a(); } とするとAをBに変換できないって怒られるけど、いちいちBでもa()をオーバーライドしないとダメ? 理屈は分かるんだけど、継承してるんだから勝手に変換してくれりゃいいのに・・・ ↑みたいなことやるのに何か良い方法ないですか?
53 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 20:42:31 ] >>52 > B b = A().a(); では B(const A&) というコンストラクタが呼ばれる事になる。 だから、それを作る必要がある。
54 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 20:55:35 ] >>53 サンクス。派生するたびにいちいち面倒な・・・ Bから呼ばれたa()のthisはBのポインタなんだからBに代入できても良いと思うんだけどなぁ。 なんで勝手に virtual B& a() を定義してくれないんだろう。
55 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 20:58:34 ] 情報が足りないんだから当たり前じゃ。
56 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:03:58 ] >>54 Bから呼ばれたってどういうこと? >>52 では A() に対して a() を呼び出してるんだろ。 B& なんて返せるわけ無い。
57 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:10:59 ] virtual B& a() が勝手に定義されるなど、なんて恐ろしい((((;゚Д゚)))ガクガクブルブル
58 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:00:41 ] sizeof(A) != sizeof(B) だったらどうなると思う?
59 名前:42 [2007/05/11(金) 23:25:57 ] アドバイス・誘導をして頂いた方、ありがとうございます。 微妙なスレ違いで申し訳ありませんでした。
60 名前:デフォルトの名無しさん [2007/05/12(土) 00:10:17 ] printf("%s/n","Hello World"); 上のprintf文の%sでどのように"Hello World"を処理しているのか分かりません。 どなたかご教授して下さい。
61 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:23:25 ] XのCUIってどういうこと?xterm上で起動してたりしたら、 それを検出してX->xtermの入力を掻っ払うってはなし? ktermとかmltermとかだったり、間にscreenがはさまってたり、 したらどうするわけ?
62 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:29:52 ] 爪楊枝でとる
63 名前:デフォルトの名無しさん [2007/05/12(土) 00:34:05 ] すいません,c++勉強始めたばかりの超初心者です. とあるc++のソースをc#に書き換えるという作業をしているのですが,下記記述の意味がわかりませんでした. MyClass* mc; mc = (Myclass*) aList -> at(n); aListは List* aListで宣言してあります. なぜリスト型のポインタの前で,再度クラスのポインタを()の中に記述するのでしょうか? どうぞよろしくお願いいたします.
64 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:36:25 ] 優先順位。 mc = (Myclass*) ( aList -> at(n) );
65 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:47:46 ] >>63 それはキャスト演算。 aListは、T型のオブジェクトを要素としてやりとりするようになっているのだと思う。 (Tが何なのか俺にはわからないので、これは仮称) そしてaList->atの戻り値の型はT*。 MyClassはTから派生しており、MyClassへのポインタへダウンキャストしているのだろう。 C#はわかるというなら、aListの型がSystem.Collections.ArrayList、 T*はobject、atをインデクサだと思えば事情は大体同じ。
66 名前:63 mailto:sage [2007/05/12(土) 01:02:07 ] >>64 >>65 ありがとうございました. キャストだったんですね...ポインタにキャストできるって初めて知りました. また考えてみます.
67 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 01:18:27 ] >>60 const char* str = "Hello World"; printf("%s/n", str); こう書けばわかるか?
68 名前:デフォルトの名無しさん [2007/05/12(土) 01:53:38 ] >>67 strのポインタが指す'H'のアドレスから'\0'までの文字を%sが文字列として表示してくれる ということですか?
69 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 01:57:00 ] >>51 ban[row][col]、気がつきませんでした、値が入ってしまってますね。 初期化と改変の流れまで教えていただきありがとうございました。 ロジックは猫に習ってということで、 あとあとリバーシのアルゴリズムを勉強するときにちゃんとしたものをゴリゴリします。
70 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 10:32:53 ] >>68 「printf 書式指定」でググるか、開発環境に付いてるマニュアル読め
71 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 14:52:41 ] sprintf使ってみ
72 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 20:23:20 ] std::stringを継承して、メンバ関数を増やしたクラスを作りたいんですが、 (具体的には、中身UTF-8nに特化した文字列クラスを作りたい) class my_string : public std::string { public: my_string() : std::string() {} my_string(const char* src) : std::string(src) {} my_string(const my_string& src) : std::string(src) {} … } こんな感じでコンストラクタをずらずら書いていって、 あとは自分の好きなだけメンバ関数増やしていくだけで大丈夫ですか?
73 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 20:43:44 ] >>72 std::string はデストラクタがバーチャルじゃ無いので、 オブジェクトの削除時には注意が必要。 具体的には、 std::string *str = new my_string("('A')"); ... delete str; とやるとstd::stringのデストラクタが呼ばれてしまう。 ほとんどの場合は大丈夫だと思うのだけど、 ふとした拍子にはまることになるかもしれない。
74 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 09:14:28 ] wstringでも使っとけ
75 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 14:59:30 ] 関数の前にコロンを二つ付けるのは 何の意味があるんでしょうか?
76 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 15:21:14 ] aが1かそれ以外になるタイミングはプログラマが完全に把握でき、 処理nanntokaが頻繁に起こる場合において、 //hinnpann if(a==1){ //nanntoka } とするか //junnbi void voidfunc(){}//何もしない関数 void nanntokafunc(){ /* nanntoka */ } void(*pfunc)();//a==1ならnanntokafuncが、それ以外ならvoidfunc //hinnpann pfunc(); とするかでは、後者の方が条件判断をしない分早いんですか? それとも無駄に何もしない関数にジャンプする分だけ遅いんですか? あと歯を磨くのが面倒くさいので、 手軽に口内の歯垢を生成する菌そのものを除去するオススメの方法って知りませんか?
77 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 15:26:54 ] >>76 速度は実測が基本。 菌の除去には強酸を使うのはどうだろう? 塩酸とか硫酸とかでよーくうがいすれば、きっと菌なんて生きてられないはず。
78 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 15:27:45 ] >>75 スコープ解決演算子
79 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 15:32:41 ] やっぱりCPUによって違いますよね・・・。 「頻繁」とか、曖昧な表現をしてすみませんでした。 塩酸や硫酸は、練り歯磨き粉に入ってる分だけでも痛いのに リステインなどは泣きそうになるほど厳しいです。 ミュータンス菌も生きるために必死だから、そうそううまい話なんてありませんよね。
80 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 18:11:27 ] 水酸化ナトリウムや水酸化カリウムなんかの強塩基でも菌を破壊できます。
81 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 19:35:17 ] >>75 グローバルスコープだね。 ローカルと明示的に分ける場合に必要
82 名前:デフォルトの名無しさん mailto:age [2007/05/13(日) 20:29:41 ] // Foo.h class Foo { private: int a; public: static int GetA() const }; // Foo.cxx #include "Foo.h" int Foo::GetA const { return a; } っていうのは、なんか間違ってますか? GCCで ./include/Foo.h:6: error: static member function 'static int GetA()' cannot have cv-qualifier src/Foo.cxx:2: error: static member function 'intt Foo::GetA() const' declared with type qualifiers と怒られます。 staticメンバ関数ってconstに出来ないんでしょうか。
83 名前:82 mailto:sage [2007/05/13(日) 20:31:18 ] 簡略化して書くときに書き間違えました。 実際には、int aはstaticになっていて、 Foo.cxxの中で定義されてます。
84 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 20:34:34 ] staticはthisがないという指定なのに、 thisをconstにする指定を併用しても仕方ない
85 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 20:34:35 ] >src/Foo.cxx:2: error: static member function 'intt Foo::GetA() const' declared with type qualifiers intt? セミコロンもないし、単純ミスじゃね?
86 名前:82 mailto:sage [2007/05/13(日) 20:40:11 ] >>84 あー、なるほど。そういうことですか。 >>85 実際のコードはもっと長いので、 抜き出して書いてます。 inttとか、GetAに()がついてないのとかは、 簡略化したときの打ち間違い。 ってーことは、例えばGetAの中でa++とかやったりとかして、 const関数にしておけばコンパイラが注意してくれるのに、 っていうのは期待できないということですか。
87 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 20:44:51 ] 簡略化するときに何カ所も間違えるようなうっかりさんは、 実際のコードでもミスしてそうだな
88 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 20:48:20 ] エラーメッセージはコピペだろうから、 intt ってのはリアルで間違ってんじゃね?って思って指摘したんだけどな
89 名前:82 mailto:sage [2007/05/13(日) 21:00:52 ] 本当に申し訳ございませんでした。 皆さん、ありがとうございます。
90 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 21:56:10 ] すみません。ポインタの素朴な疑問です。 いれこの構造体enemyを固定領域に確保したいときは struct enemy { short mainface; short b; struct POS Pos[32]; }; struct POS { short X; short Y; }; struct enemy *enemy_struct; enemy_struct = (enemy*)malloc(sizeof(struct enemy)); でいいんですか? あとsizeof(struct enemy*)=4ってなるんですけど struct enemy *enemy_struct;で消費されるenemy型へのポインタの メモリ領域は4Byteってことですか? よろしくお願いします。
91 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 22:04:45 ] >struct enemy *enemy_struct; >enemy_struct = (enemy*)malloc(sizeof(struct enemy)); >でいいんですか? だめです。型違いです。 >あとsizeof(struct enemy*)=4ってなるんですけど struct enemy *enemy_struct;で消費される4byteでおけ
92 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 22:11:23 ] んんん?問題なくね?
93 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 22:17:37 ] ... = (enemy*)malloc( ...
94 名前:90 mailto:sage [2007/05/13(日) 23:18:34 ] すんません。型違いということは ..=(struct enemy *)malloc(.. と訂正すればいいんですか?
95 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 01:01:39 ] >>94 そうだね。それでおk。 実際コンパイルしてみて確認すればいいと思うよ。 入れ子であっても特に使い方に変わりはないよ。 自己参照構造体と呼ばれる特殊な入れ子は慣れるまで厄介(慣れれば便利) なんだけど、今回はそれじゃないし。 にしても、short変数とか微妙なの使うなあ。 ところでstructが省略できないって事はCを使用しているんだね。 C++では省略が許されたはず。「//」によるコメントみたいに C++で先に作られてから後になって、ANSIがCの文法として認めたものも あるから将来は>>90 のような書き方も許されるかも。 まあtypedefすれば良いだけなんだけどね。
96 名前:デフォルトの名無しさん [2007/05/14(月) 01:08:45 ] printf("1¥n"); printf("2¥n"); printf("3¥n"); としたあとに1、2、3を4、5、6と上書きしたいんですが、 CRで先頭に戻るのは分かるのですが(最終行は上書き可能)、 1行前に戻るってのはできるんでしょうか?
97 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 01:18:53 ] それは処理系依存な方法を使わないとダメ エスケープシーケンスとか、ConsoleAPIとか
98 名前:96 mailto:sage [2007/05/14(月) 01:26:38 ] >>97 すいません。環境書き忘れてました。(VT100相当) エスケープシーケンスでググって、 printf("¥x1b[3A"); で解決しました。 ありがとうございます。
99 名前:デフォルトの名無しさん [2007/05/14(月) 01:52:37 ] >>90 のやり方でもコンパイルは通るんだな。
100 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 12:50:17 ] asdf<int (int)> a; みたいな事がしたいんですが、asdfの定義はどういう風にすれば良いかはなんてググれば詳しく出てくるんでしょうか
101 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 12:53:32 ] boost::function
102 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 12:54:17 ] なるほど
103 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 13:00:06 ] asdf<int (*)(int)> a; のことか?
104 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 13:03:15 ] なんだと
105 名前:デフォルトの名無しさん [2007/05/14(月) 14:32:49 ] C言語のあるプログラムで、 Cファイルではなく、hヘッダに 関数を実装している人がいるんですけど 普通なんですか? やっぱりヘッダに実装する方がベターなんでしょうか?
106 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 14:42:46 ] はっきり言ってどっちでも良い。 技術的でない話題はマ板へ
107 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:00:45 ] どっちでも良くないよw ヘッダに実装できるのは内部リンケージの関数だけだけど、 そんなことやっちゃったら同じ関数が複数のソースに定義されて 無駄にも程がある状況になる。 ヘッダに実装する必要があるのはインライン関数だけ。 他は普通はヘッダに実装してはいけない。
108 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:11:06 ] インクルードガードやってたから気づかなかった
109 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:16:39 ] インクルードガードとは関係ない話。 a.h を a.c と b.c でインクルードすれば a.c と b.c の両方に関数定義が展開される。
110 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:17:55 ] インクルードガードしてりゃそんなけったいなことにはならんだろ。
111 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:18:54 ] と、思ったがなるな。スマン
112 名前:105 [2007/05/14(月) 15:23:06 ] そうですね。勉強になりました。 ありがとうございました。
113 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:48:21 ] C++ だとテンプレートの実装もヘッダに書く必要がある。 export なんてあってないような仕様だし。 クラスの宣言内に直接関数定義することもあるけど、 これはインライン関数になるから >>107 の範囲内。
114 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 16:55:40 ] >>a.h を a.c と b.c でインクルードすれば >>a.c と b.c の両方に関数定義が展開される。 それはへたくそなインクルードガード。 関数の重複インクにならんやり方はちょっと考えれみれ。直ぐわかるやろ。 a.h #ifndef … a.c #incliude "a.h" … b.c #incliude "a.h" … ただし、それがエエ方法やとは言うてへんど。
115 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:06:20 ] >>114 重複インクルードが問題なのではなく、同じ関数が複数リンクされることが問題。 理解できていないなら、無理にレスしなくていいからね。
116 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:38:43 ] >>重複インクルードが問題なのではなく、同じ関数が複数リンクされることが問題。 >>理解できていないなら、無理にレスしなくていいからね。 だから、「同じ関数が複数リンク]されない方法があるって言うとんじゃ、阿呆かいな。 それとも、ホンマの初心者か?
117 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:46:42 ] そういう方法があるんかしらんが、>>114 では何の解決にもなってない。
118 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:48:08 ] >>116 >「同じ関数が複数リンク]されない方法がある だったらそれを書き給え。 尤も、それならそれで>114の「関数の重複インクにならんやり方」は 一体全体なんなのかという疑問は残るが。
119 名前:≠114 mailto:sage [2007/05/14(月) 17:51:13 ] >>118 これでOK。 --a.h #ifdef NEED_FUNC void func() {} --a.c #define NEED_FUNC #include "a.h" --b.c #include "b.h" -- ただし、これをインクルードガードとは言わないと思う。
120 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:53:03 ] それだとa.cでfuncが使いたいときに困るだろ。
121 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:54:27 ] 114のインクファイル中の記述で、ちょっと工夫したら(ヒントは関数の定義じゃ)できると言うとんじゃ。 これだけ言うたら、普通のC言語1年坊主でも気が付くど。気が付かんようなら、C諦めた方がええで。 それより、こんなレベルで初心者を教えるな! 初心者も迷惑じゃ。 >>だったらそれを書き給え。 誰に向かって言うとんじゃ、ボケ。
122 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:55:50 ] すみません、喧嘩しないで頂けますか?
123 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:56:24 ] >>121 分からなくても別に誤魔化さなくていいよ。 俺だって分かんないんだもん。
124 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:58:28 ] まだわからんか? そもそも”関数名”て何や?
125 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:58:51 ] まさかstaticを付けるというオチでは・・・
126 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:59:44 ] void foo ( ナンたらこたら… ↑で "foo" は何をしとるんや?
127 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:00:37 ] #define foo ↑で foo は何をされとんねん?
128 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:00:44 ] >>121 もちろんその方法では、 * a.h に関数の実装を記述する。 * a.c, b.c でインクルードすればどちらからでも使える。 * 関数は重複してリンクされない。 が満たされるんだよな。
129 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:01:33 ] >>127 焦らさないでくれよ
130 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:01:36 ] 当たり前だのクラッカ
131 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:02:38 ] もったいぶっちゃって、どうせそんな方法ないんだろ・・・
132 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:05:42 ] void foo ( なんたらこたら … void bar (ああでもこうでも … #ifndef foo printf ( "宣言済み" ) #else printf ( "未宣言" ) #endif … これでもわからんか?
133 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:07:29 ] void foo ( なんたらこたら #undef foo int foo ( ああでもないこでもない これではどや?
134 名前:≠114 mailto:sage [2007/05/14(月) 18:08:42 ] staticつけても同じ(内容の)関数が複数リンクされることには違いないしなぁ。 双方のソースから同じ名前で参照される別物の関数と言う条件だと、 どうにもならない気がしてきた。 >>132 まさかとは思うけど、関数を定義したかどうかをディレクティブで 判定できるなんて思っちゃいないよね? そろそろ正解をどんと出してみてよ。
135 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:08:47 ] 訂正 誤:int foo ( ああでもないこでもない 正:int foo ( ああでもないこうでもない
136 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:09:19 ] >>133 俺頭悪いからわかんないんだって・・・ 意地悪しないで教えてくれよ
137 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:12:58 ] わかった。リンカディレクティブだッ(w
138 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:15:32 ] 静的メンバ関数として実装するとか? struct HOGE_unique{ static int hoge() { ... } }; #define hoge Hoge_unique::hoge
139 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:17:24 ] もはやCじゃないがな
140 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:19:45 ] // aaa.h #ifndef test int test(int i){return i + 10;} #endif // bbb.c #include "aaa.h" int test ( int i ); int foo(int i){return test(i)+10;} // main.c #include <stdio.h> #include "aaa.h" void foo(int i); int main(void){printf("%d",test(i)+foo(i);}