【发布时间】:2011-05-01 12:31:53
【问题描述】:
我一直在查看用于定义宏的 GCC docs,看起来我想要的东西是不可能的,但我想如果是的话,这里有人会知道。
我要做的是定义这个宏:
synchronized(x) {
do_thing();
}
扩展为:
{
pthread_mutex_lock(&x);
do_thing();
pthread_mutex_unlock(&x);
}
在 C++ 中,我可以创建一个 SynchronizedBlock 对象,该对象在其构造函数中获取锁并在析构函数中解锁,但我不知道如何在 C 中执行此操作。
我意识到我可以使用 synchronized(x, &myfunction); 形式的函数指针,但我的目标是让一些 C 代码看起来尽可能像 Java。是的,我知道这是邪恶的。
【问题讨论】:
-
在尝试使一种语言看起来像另一种语言之前,您真的应该三思而后行。看起来像您所要求的语法的宏对于将其读取为 C 的人来说会非常混乱。
-
R.这是正确的,这可能会使事情变得难以阅读,因为不容易看出这是一个宏。我认为最好的做法是遵守宏应该是大写的约定,并且名称应该是真正的信息。我会选择
MUTUALY_EXCLUDE之类的东西。 -
^
And yes, I know this is evil.