我应该在这个问题中使用内联还是 #define
Should I use inline or #define in this issue?
我使用pthreads,我想使用以下代码:
if(pthread_mutex_lock(&lock)){
cout<<"error"<<endl;
return ERROR;
}
我的问题是我应该用#define
做还是应该用内联函数做:
inline void func() {
if(pthread_mutex_lock(&lock)){
cout<<"error"<<endl;
return ERROR;
}
}
函数应该是静态的吗?例如:
static inline void func()
如果你能帮助宏,你不应该对宏做任何事情(在这里,你可以帮助它)。
如果您的函数存在并且仅在 cpp 中使用,它应该位于未命名的命名空间中......
namespace
{
void func(){/*...*/}
}
如果它是在标头中声明的,并且打算从许多其他 cpp 中使用,则它不应是静态的或位于未命名的命名空间中。
inline
无关紧要。您确实意识到,您必须使函数将对lock
类型的引用作为参数,然后允许返回类型。
所以做这样的事情:
ErrorType func(LockType &lock)
{
if(pthread_mutex_lock(&lock))
{
prtSysErr(!DIRECT_EXIT,!FATAL);
return ERROR;
}
return NOERROR;
}
然后这样称呼它:
if(func(lock)==ERROR)
{
return ERROR;
}
我将锁的类型称为LockType
和错误的类型ErrorType
供您放置在任何它们中。 我还假设没有错误的值被类似地调用NOERROR
。
是的,不要称它为func
,并像@Dave所说的那样把它放在namespace
里。
C++的
方法是以 RAII 方式获取锁,并在锁定失败时从构造函数中抛出异常。 请参阅此示例。
不,您不应该使用宏。
您可以将其标记为内联,也可以仅将其用作普通函数,如果编译器找到合适的候选函数,它将内联它。
请注意,如果将函数标记为static
则只能在声明它的翻译单元中使用它。
为什么?
使用函数,您可以对正在传递的函数参数进行类型检查,而使用宏则无法获得。
此外,使用宏,您将面临宏可能产生的愚蠢和奇怪的副作用。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- 使用 #define 进行跟踪日志记录以避免性能问题
- 为什么#Define会在标题中引起问题
- 内联与#define的C++常见问题解答示例
- 我应该在这个问题中使用内联还是 #define
- 如何解决android和ios跨平台开发的#define问题?