编译时添加了奇怪的字符,导致错误
Posted
技术标签:
【中文标题】编译时添加了奇怪的字符,导致错误【英文标题】:Strange character added while compilation, leads to an error 【发布时间】:2016-09-27 13:40:02 【问题描述】:使用 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 字符(是否存在?)但没有...
【问题讨论】:
STR16 是宏吗?你能提供它的代码吗? 我希望STR16
是宏,它需要一个字符串文字作为参数,例如#define STR16(s) L##s
或类似的。
@PaulR 真的!如果您将其发布为答案,我会接受。
在回答此问题之前,您需要出示您的minimal reproducible example。
@Basj:当然 - 评论现在转换为答案。
【参考方案1】:
STR16
很可能是一个宏,它需要一个字符串文字作为参数,例如
#define STR16(s) L##s
或类似的东西。如果您传递一个变量而不是字符串文字,那么您将得到类似于您正在观察的问题的内容。
【讨论】:
以上是关于编译时添加了奇怪的字符,导致错误的主要内容,如果未能解决你的问题,请参考以下文章