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__);}
|