宏定义中的编译器错误"错误:程序中杂散的'\'"
Compiler error "error: stray '' in program" in macro definition
在尝试使用SCons编译此程序时,我们遇到了以下错误:
build/opt/zsim_harness.cpp:315:5: error: stray '' in program
build/opt/zsim_harness.cpp:315:5: error: stray '#' in program
build/opt/zsim_harness.cpp: In function 'int main(int, char**)':
build/opt/zsim_harness.cpp:310:24: error: 'ZSIM_BUILDVERSION' was not declared in this scope
build/opt/zsim_harness.cpp:315:5: error: expected ')' before 'n'
build/opt/zsim_harness.cpp:315:5: error: 'ZSIM_BUILDVERSION' was not declared in this scope
出现此错误的行是:
info("Starting zsim, built %s (rev %s)", ZSIM_BUILDDATE, ZSIM_BUILDVERSION);
ZSIM_BUILDVERSION
是在SConstruct 中定义的宏
if os.path.exists(".git"):
env.Command(versionFile, allSrcs + [".git/index", "SConstruct"],
'echo "#define ZSIM_BUILDDATE \""`date`\""\\n#define ZSIM_BUILDVERSION \""`python misc/gitver.py`\""" >>' + versionFile)
else:
env.Command(versionFile, allSrcs + ["SConstruct"],
'echo "#define ZSIM_BUILDDATE \""`date`\""\\n#define ZSIM_BUILDVERSION \""no git repo\""" >>' + versionFile)
SCons的版本为2.1.0。我该怎么解决?
SCons似乎会生成一个文件,version.h,看起来像:
#define ZSIM_BUILDDATE "Sat Apr 19 11:07:38 CET 2014"n#define ZSIM_BUILDVERSION "master:10:a8c417b:1fc 1+ 1- 6b4f4490"
问题是Python代码的这一行中有太多反斜杠:
'echo "#define ZSIM_BUILDDATE \""`date`\""\\n#define ZSIM_BUILDVERSION \""no git repo\""" >>' + versionFile)
这是由代码所期望的少一个程序解析的,因此"\\n"在文件中以两个字符"\"answers"n"结束,而不是被解析为一个换行符。该代码试图避免Python插入换行符(这会破坏shell命令),而是将转义序列传递给shell,以便it更改为换行符。Python以原始字符串的形式提供了一种更简单的方法:
r'echo "#define ZSIM_BUILDDATE ""`date`""\n#define ZSIM_BUILDVERSION ""no git repo""" >>' + versionFile)
当它这样放的时候,你可以更清楚地看到错误:shell看到转义序列"\",所以它打印一个\,后面跟着一个n,而不是转义序列"n",这会导致它在文件中放一个换行符。
相关文章:
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 重载方法的方式会在使用临时调用时生成编译器错误
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 有没有办法让编译器在我放置字符串而不是 nlohmann::json 对象时抛出错误?
- 致命错误 C1001 :vs2017 15.8.4 的内部错误(编译器文件"msc1.cpp",第
- C++2440错误-编译器认为字符串是常量字符
- Clang 错误 – 编译器错误或缺少一些细节?
- 视觉C++ 2017 错误?编译器优化表达式
- 配置:错误:C++编译器无法创建可执行文件
- PHP PDO_ODBC配置:错误:C 编译器无法创建可执行文件
- 致命错误 C1001:内部编译器错误(编译器文件"MSC1.cpp",第 1794 行)
- 错误:编译器限制达到简单hello world程序的堆限制
- c++链接错误:编译器找不到函数的定义
- 生成 CImg 时出现致命错误(编译器限制)
- 抛出对齐类型时出现 Clang 运行时错误.编译器错误