由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教如何写这个宏
相关主题
关于文件命名Pattern matching
讨论个idea题[合集] c++的题
node callback的误解数据类型判断
A problem on string parsing (using either grep or perl)java string stream
请教一个C++中function pointer的问题。计算围棋棋盘合法图案的源代码
Pthread support on Windows XPC++里面把数转成字符串的命令是啥啊?
help on pthreads.....what's wrong with this scripts?variable passing?
Nodejs socket.io emit看不懂how to print 2 exponential digits in windows by using Perl
相关话题的讨论汇总
话题: string话题: base话题: own话题: pid话题: pthread
进入Programming版参与讨论
1 (共1页)
d**d
发帖数: 389
1
假如common_base_string = "/commonbase/dirname"
我想用宏给每个进程生成一个自己的 own_base_string = commmon_base_string_
xxxxxx, xxxxxx是根据 pthread_self()拿到的 pthread_it_t.
用的时间就是直接调用 GENERATE_OWN_BASE_STRING 宏。
{
char* own_base_string;
pthread_it_t pid=pthread_self();
own_base_string= GENERATE_OWN_BASE_STRING(pid);
}
请问如何写这个宏啊?
我用 # 和##, 但是都是直接输出 pid,而不是先evaluate pid的值,在传给宏。
非常感谢。
t****t
发帖数: 6806
2
多新鲜哪, 宏是compile-time的东西, 它怎么能知道你运行时的pid是多少

【在 d**d 的大作中提到】
: 假如common_base_string = "/commonbase/dirname"
: 我想用宏给每个进程生成一个自己的 own_base_string = commmon_base_string_
: xxxxxx, xxxxxx是根据 pthread_self()拿到的 pthread_it_t.
: 用的时间就是直接调用 GENERATE_OWN_BASE_STRING 宏。
: {
: char* own_base_string;
: pthread_it_t pid=pthread_self();
: own_base_string= GENERATE_OWN_BASE_STRING(pid);
: }
: 请问如何写这个宏啊?

l********a
发帖数: 1154
3
宏其实就是替换,在编译时就完成了,运行时的东西只能通过函数调用来evaluation
a9
发帖数: 21638
4
这样应该行吧
#define GENERATE_OWN_BASE_STRING(__pid__) {own_base_string=malloc(255);
sprintf(own_base_string,"common_base_string_%d",__pid__);}

【在 t****t 的大作中提到】
: 多新鲜哪, 宏是compile-time的东西, 它怎么能知道你运行时的pid是多少
t****t
发帖数: 6806
5
每用一次就malloc一次?

【在 a9 的大作中提到】
: 这样应该行吧
: #define GENERATE_OWN_BASE_STRING(__pid__) {own_base_string=malloc(255);
: sprintf(own_base_string,"common_base_string_%d",__pid__);}

b******n
发帖数: 592
6
and not the safe version of sprintf..

【在 t****t 的大作中提到】
: 每用一次就malloc一次?
a9
发帖数: 21638
7
这样的东西我是不这么用的,哈哈。

【在 t****t 的大作中提到】
: 每用一次就malloc一次?
a9
发帖数: 21638
8
根本不需要呀,pid就那几位长。

【在 b******n 的大作中提到】
: and not the safe version of sprintf..
p*********t
发帖数: 2690
9
如果按a9的写法写宏,那么调用的时候code改为
{
char* own_base_string;
pthread_it_t pid=pthread_self();
GENERATE_OWN_BASE_STRING(pid);
}
另外,为啥非要用宏呢,写成函数不行吗?

【在 a9 的大作中提到】
: 这样应该行吧
: #define GENERATE_OWN_BASE_STRING(__pid__) {own_base_string=malloc(255);
: sprintf(own_base_string,"common_base_string_%d",__pid__);}

1 (共1页)
进入Programming版参与讨论
相关主题
how to print 2 exponential digits in windows by using Perl请教一个C++中function pointer的问题。
[合集] 如何只用putchar来实现itoa?Pthread support on Windows XP
Mysterious PgSQL 8.3 crashhelp on pthreads.....
C语言一个passing variable的问题Nodejs socket.io emit看不懂
关于文件命名Pattern matching
讨论个idea题[合集] c++的题
node callback的误解数据类型判断
A problem on string parsing (using either grep or perl)java string stream
相关话题的讨论汇总
话题: string话题: base话题: own话题: pid话题: pthread