由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C pre-compiling 如何用macro替换括号?
相关主题
弱问c++里有没有NULL这个keyword?最基本的C语言编程问题请教
又一个初级问题: C++中多如牛毛的#define格式怎样include一个函数
c++ define 一问a simple question about constructor
C#程序调用Windows C++ DLL的问题另一个Fortran 问题
MATLAB编译的dll怎么被C#调用呢线程中可以循环延时吗?
问一个排序的问题macro and std:: function name clashing
Help C++ Template function link error .c++,这种做法不行?
两个class的交叉引用问题基础问题:在header里面define function
相关话题的讨论汇总
话题: declspec话题: foo话题: __话题: define话题: 阿猫阿狗
进入Programming版参与讨论
1 (共1页)
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(阿猫阿狗)?

1 (共1页)
进入Programming版参与讨论
相关主题
基础问题:在header里面define functionMATLAB编译的dll怎么被C#调用呢
问个两个.h文件互相include的问题问一个排序的问题
forward declarationHelp C++ Template function link error .
弱问C++一个问题 一直不解两个class的交叉引用问题
弱问c++里有没有NULL这个keyword?最基本的C语言编程问题请教
又一个初级问题: C++中多如牛毛的#define格式怎样include一个函数
c++ define 一问a simple question about constructor
C#程序调用Windows C++ DLL的问题另一个Fortran 问题
相关话题的讨论汇总
话题: declspec话题: foo话题: __话题: define话题: 阿猫阿狗