13/02/06 15:27:59.42
マクロでどうにかしてみる
254:デフォルトの名無しさん
13/02/06 15:45:26.48
c++のclassの関数のオーバライドはちょっと違うんじゃね
255:デフォルトの名無しさん
13/02/06 16:26:56.14
>>247
まともな回答がほしければokwaveとかY!知恵遅れあたりへどうぞ
256:デフォルトの名無しさん
13/02/06 21:23:26.14
シンボル衝突時にどっちを採用するか(またはエラーとするか)はリンカ次第じゃないの?
257: ◆QZaw55cn4c
13/02/06 21:23:56.08
>>247
つ>>253
#define で違う名前に変換こんな感じ
#define xmalloc(x, y) malloc(x)
#define xfree(x, y) free(x)
#define xrealloc(x, y, z) realloc(x, y)
258:デフォルトの名無しさん
13/02/06 22:21:54.62
#include <stdio.h>
void hoge(int a) {printf("OK\n");};
#define hoge(a) \
if (a==1) printf("NG1\n");\
else if (a==2) (hoge)(a);\
else if (a==3) printf("NG2\n");
int main()
{
hoge(1);
hoge(2);
hoge(3);
return 0;
}
259:デフォルトの名無しさん
13/02/06 22:24:07.41
inline使えよw
260:デフォルトの名無しさん
13/02/06 22:36:13.07
ライブラリ関数の中から呼ばれる関数はどうやって対応すんの?ってことでしょ
例えばライブラリ関数say_hello()からsay()が呼ばれるけどsay()の挙動がおかしいと。
このときsay()を自前のに置き換えるにはどうすんのかね?
261:デフォルトの名無しさん
13/02/06 22:45:08.41
オープンソース、というのだから同じく >>257 でいけばいいんじゃない?
すげかえ#define を .h にかいておき、ライブラリのすべての .c でその .h を #include
262:デフォルトの名無しさん
13/02/06 22:45:40.98
バイナリエディタでsay()の名前を変更
自作関数でsay()を作成
263:デフォルトの名無しさん
13/02/06 22:47:55.41
名前残ってないんじゃね?
264:デフォルトの名無しさん
13/02/06 22:50:59.53
ライブラリなら名前残ってるだろ
265:デフォルトの名無しさん
13/02/06 22:55:04.76
ライブラリ=so
なら残るだろうが
質問者が想定してるのはもっと広義なライブラリなきがする
266:デフォルトの名無しさん
13/02/06 22:57:35.47
patchあてろ。
まで理解した
というわけで誰かあてかた教えて
267:デフォルトの名無しさん
13/02/06 23:28:09.09
ライブラリの問題なのか俺々実装の問題なのかをよく考えませう。
268:デフォルトの名無しさん
13/02/07 00:04:44.95
バイナリをなんとかしようとするのはそもそも無理ゲーなのでは?
オープンソースっていうのだから、最小限のソース変更で切り抜ければいいのでは?
269:デフォルトの名無しさん
13/02/07 00:10:36.74
>ライブラリのコードを変更することなく、
だからなあ
270:デフォルトの名無しさん
13/02/07 00:21:56.25
じゃあリンカを改造するしかないね
271:デフォルトの名無しさん
13/02/07 01:15:54.25
置き換えたいのは標準関数なの?
272:デフォルトの名無しさん
13/02/07 04:09:21.82
UNIX系ならこんなこと出来るらしいが
URLリンク(www.ibm.com)
273:デフォルトの名無しさん
13/02/07 04:19:08.25
お引取り願いたいanyにvoid any()__declspec(selectany){...}しちまえばいいんじゃないかな
void any()__attribute(ナントカ){}とか