c***k 发帖数: 1589 | 1 比方说想把所有的foo(3),替换成bar,但是foo(1), foo(2), foo(4), .... foo(x)都
不变 |
b******n 发帖数: 592 | 2 (a==3)?bar:a ?
用括弧啊,安全的问题自己就考虑了
【在 c***k 的大作中提到】 : 比方说想把所有的foo(3),替换成bar,但是foo(1), foo(2), foo(4), .... foo(x)都 : 不变
|
c***k 发帖数: 1589 | 3 pre-processor啊,不是run-time替换
比如#define foo(3) bar之类的。 |
b******n 发帖数: 592 | 4 i don't think you get different code using 'if' with optimisation anyway
【在 c***k 的大作中提到】 : pre-processor啊,不是run-time替换 : 比如#define foo(3) bar之类的。
|
c***k 发帖数: 1589 | 5 早知道把问题说明白就好了
VC有个compiler extension:declspec(selectany)
declspec就是一个声明之类的东西,括号里面可以是各种东西
gcc没这个,但有一个类似的
__attribute__((weak))
因为有太多这样的东西了 (> 10000),所以我需要一个macro
#define declspec(selectany) __attribute__((weak))
但这样是不行的,因为macro里,括号表示argument
这样所有的declspec(阿猫阿狗)都会被替换了 |
b******n 发帖数: 592 | 6 早说么。。。
没法
【在 c***k 的大作中提到】 : 早知道把问题说明白就好了 : VC有个compiler extension:declspec(selectany) : declspec就是一个声明之类的东西,括号里面可以是各种东西 : gcc没这个,但有一个类似的 : __attribute__((weak)) : 因为有太多这样的东西了 (> 10000),所以我需要一个macro : #define declspec(selectany) __attribute__((weak)) : 但这样是不行的,因为macro里,括号表示argument : 这样所有的declspec(阿猫阿狗)都会被替换了
|
X****r 发帖数: 3557 | 7 你其它那些阿猫阿狗准备怎么办?
要是阿猫阿狗的种类不多的话,你可以这么办:
#define declspec(x) declspec_##x
#define declspec_selectany __attribute__((weak))
#define declspec_dllimport declspec(dllimport)
#define declspec_dllexport declspec(dllexport)
其它阿猫阿狗同理。
不过你真的想要declspec(阿猫阿狗)维持原样?不是__declspec(阿猫阿狗)?
【在 c***k 的大作中提到】 : 早知道把问题说明白就好了 : VC有个compiler extension:declspec(selectany) : declspec就是一个声明之类的东西,括号里面可以是各种东西 : gcc没这个,但有一个类似的 : __attribute__((weak)) : 因为有太多这样的东西了 (> 10000),所以我需要一个macro : #define declspec(selectany) __attribute__((weak)) : 但这样是不行的,因为macro里,括号表示argument : 这样所有的declspec(阿猫阿狗)都会被替换了
|
t****t 发帖数: 6806 | 8 t很好很强大.
【在 X****r 的大作中提到】 : 你其它那些阿猫阿狗准备怎么办? : 要是阿猫阿狗的种类不多的话,你可以这么办: : #define declspec(x) declspec_##x : #define declspec_selectany __attribute__((weak)) : #define declspec_dllimport declspec(dllimport) : #define declspec_dllexport declspec(dllexport) : 其它阿猫阿狗同理。 : 不过你真的想要declspec(阿猫阿狗)维持原样?不是__declspec(阿猫阿狗)?
|
c***k 发帖数: 1589 | 9 看来这是唯一的法子了:)
谢谢
【在 X****r 的大作中提到】 : 你其它那些阿猫阿狗准备怎么办? : 要是阿猫阿狗的种类不多的话,你可以这么办: : #define declspec(x) declspec_##x : #define declspec_selectany __attribute__((weak)) : #define declspec_dllimport declspec(dllimport) : #define declspec_dllexport declspec(dllexport) : 其它阿猫阿狗同理。 : 不过你真的想要declspec(阿猫阿狗)维持原样?不是__declspec(阿猫阿狗)?
|
N********n 发帖数: 8363 | 10 Theoretically impossible if you consider the cases where there might be a
whole bunch "#ifdef" and "#ifndef" in your code. You won't even know what
the content of the C code really is.
It's crazy macros like these making C-kind languages un-refactorable and
badly designed languages in general.
【在 c***k 的大作中提到】 : 比方说想把所有的foo(3),替换成bar,但是foo(1), foo(2), foo(4), .... foo(x)都 : 不变
|
c***k 发帖数: 1589 | 11 Legacy code啊,我也很头疼……
【在 N********n 的大作中提到】 : Theoretically impossible if you consider the cases where there might be a : whole bunch "#ifdef" and "#ifndef" in your code. You won't even know what : the content of the C code really is. : It's crazy macros like these making C-kind languages un-refactorable and : badly designed languages in general.
|
b******n 发帖数: 592 | 12 is it possible like this:
#define selectany )) void dummy(); __attribute__((weak
strictly depends on how it is used.
【在 X****r 的大作中提到】 : 你其它那些阿猫阿狗准备怎么办? : 要是阿猫阿狗的种类不多的话,你可以这么办: : #define declspec(x) declspec_##x : #define declspec_selectany __attribute__((weak)) : #define declspec_dllimport declspec(dllimport) : #define declspec_dllexport declspec(dllexport) : 其它阿猫阿狗同理。 : 不过你真的想要declspec(阿猫阿狗)维持原样?不是__declspec(阿猫阿狗)?
|