编译时添加奇怪的字符会导致错误

时间:2016-09-27 13:40:02

标签: c++ visual-studio-2013

使用Visual Studio Express 2013编译项目时,出现此错误

  

.... \ WDL \ IPlug \ IPlugVST3.cpp(199):错误C2065:'Lp':未声明的标识符[D:\ wdl-ol \ IPlugExamples \ MyFirstPlugin \ MyFirstPlugin-vst3.vcxproj]

奇怪的是文件IPlugVST3.cpp不包含Lp,只包含p

 switch (p->Type())
  {
    case IParam::kTypeDouble:
    case IParam::kTypeInt:
    {
      Parameter* param = new RangeParameter( STR16(p->GetNameForHost()), // <---- this line
                                             i,
                                             STR16(p->GetLabelForHost()),
                                             p->GetMin(),
                                             p->GetMax(),
                                             p->GetDefault(),
                                             0, // continuous
                                             flags,
                                             unitID);

      param->setPrecision (p->GetPrecision());
      parameters.addParameter(param);

为什么C ++编译器将其理解为Lp而不是p

注意:我检查了是否没有隐藏的unicode字符(这是否存在?)但是没有......

1 个答案:

答案 0 :(得分:1)

STR16很可能是一个宏,它希望将字符串文字作为参数,例如:

#define STR16(s) L##s

或类似的东西。它传递一个变量而不是一个字符串文字然后你会得到类似你正在观察的问题。