这在C ++中的函数参数中是什么意思

时间:2018-07-20 03:33:30

标签: c++

template<typename Mutex>
class CMutexLock
{

public:
    CMutexLock(Mutex& mutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) : lock(mutexIn, boost::defer_lock)
    {
        if (fTry)
            TryEnter(pszName, pszFile, nLine);
        else
            Enter(pszName, pszFile, nLine);
    }
};

typedef CMutexLock<CCriticalSection> CCriticalBlock;    
#define LOCK(cs) CCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__)

我正在学习开源代码,不知道,#cs中的#是什么意思,并且如果可能的话,它在该代码中做了什么? 在#define LOCK(cs) CCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__)中使用它,它是从CMutexLock模板定义LOCK(cs)来构造CMutexLock类的,它在CMutexClass构造函数上的第二个参数上接收指向空终止字符串的指针

1 个答案:

答案 0 :(得分:2)

#define宏中,在符号前的#意味着对符号“进行字符串化”,这意味着继续执行该符号的符号会被引用。

例如,给定此宏:

#define STR(x) #x

像这样使用:

char *p = STR(hello);

替换为:

char *p = "hello";