Ale*_*lex 15 c++ c-preprocessor
我正在努力建造Amaya.当构建失败时
错误:在'('标记之前的预期unqualified-id
我在没有编译的文件上只使用预处理器(用-E替换-c选项)运行g ++以查看发生了什么.这产生了一个80,000行文件,向我显示'Blue'已被(2 << 8)取代,这清楚地解释了错误.如果我纠正这个,文件编译正常.我想我可以忍受,但我想知道为什么会这样.
有没有办法可以跟踪预处理器如何替换特定字符串,在本例中为"Blue"?
=================更新===================
好吧,我找到了罪魁祸首:
> headers=`g++ [omited for brevity] -M \
../../thotlib/dialogue/AmayaClassicNotebook.cpp`
> for file in $headers ; do grep -s -H Blue $file | grep "(2 << 8)";done
/usr/local/include/gc.h:#define Blue (2 << 8)
Run Code Online (Sandbox Code Playgroud)
所以添加#undef Blue解决了这个问题.因此,使用-M和grep的这种组合似乎没问题,但有时候C++预处理器定义可能是真正的森林; 我很好奇是否有更好的方法,一些聪明的GNU工具可能.
Emp*_*ian 11
我发现跑步了
g++ ... -dD -E $file > $file.ii
Run Code Online (Sandbox Code Playgroud)
在解决预处理问题时非常有用.来自man g++:
-dD Dump all macro definitions, at the end of preprocessing,
in addition to normal output.
Run Code Online (Sandbox Code Playgroud)
如果没有人提出更好的方案(基于预处理文件中的源行信息),您可以使用 -M 选项来获取源文件包含的标头列表,并在其中搜索“Blue”。我预计某种混淆可能意味着找不到您要查找的内容,但通常您会在某处找到定义。
| 归档时间: |
|
| 查看次数: |
5100 次 |
| 最近记录: |