为什么LZZ告诉我typedef enum _foo { a } foo;
行有语法错误?
Test.lzz:1:19: Syntax error before '{'.
Test.lzz:1:1: Discarding 'typedef'.
Test.lzz:1:28: Syntax error before ';'.
Test.lzz:1:28: Inserting '<identifier>' before ';'.
答案 0 :(得分:3)
与真正的C ++解析器不同,Lzz不维护类型和模板名称数据库。 Lzz仅解析使用上下文信息。但是,因为C ++语法含糊不清,所以这种策略在几种情况下都是不合适的。幸运的是,Lzz可以跳过其中的大多数。
此工具不接受C ++作为输入;它接受一种看起来像C ++模糊的简化语言,产生C ++作为输出。如果你想使用它,你将不得不学习它自己的语言,并希望它适合你想要编写的代码。就个人而言,我建议你坚持使用标准C ++,因为这种语言有很好的文档记录并且被广泛理解。
答案 1 :(得分:2)
你从C中转移的代码中看到了很多。你不能只做
enum foo { a }
Lzz文档确实说不支持类定义之后的声明符(请参阅受支持的结构下的类定义),并给出了一些示例。这同样适用于枚举,但没有明确说明。
注意Lzz将允许没有尾随分号的类(或枚举)定义。