![]() |
1
3
它实际上不是递归的,发生的是
正在扩展到
随后将包含在您的声明中。 我不知道你想怎么解决这个问题,但我想说的是,改变你的变量名/定义一些更独特的名称来避免这个问题。 |
![]() |
2
2
只是一个疯狂的想法,但如果不是这个呢
为什么不给它取个不同的名字呢?喜欢
下面是一个在GCC4.3.2下运行良好的示例程序
|
![]() |
3
1
如果您使用C++,您可能需要考虑使用引用来代替:
因为您正在编写代码生成器,所以要确保它们存在于正确的作用域中不太难:
另外,上面附加的一组内括号允许用户代码在直接使用本地指针时隐藏X。 如果你不使用C++,考虑做——C和C++之间不兼容的最大来源是缺少隐式空指针类型,我怀疑在你的输入片段中很少见。 |
![]() |
4
0
你在使用什么编译器?您的第一步可能是查看编译器参考手册,看看是否有任何关于预处理或递归替换级别的选项可以更改。 |
![]() |
5
0
我会做的
因此,再也不可能进行重复的宏观扩张。
将结构成员重命名为与
|
![]() |
6
0
如果定义必须是x和vx(with并不像您可能注意到的那样伟大),解决这个问题的一种方法是更改结构/类的成员
|
![]() |
7
0
假设:
然后一种方法是创建一个阴影结构类型。假设你的位置和速度成员是这种类型的:
然后,创建一个除成员名称外完全相同的阴影类型,以及一个包含这两者的联合,以绕过别名规则:
然后你的定义可以是:
这是一个有点黑客,但你是相当有限的。注意(&struct)->成员模式将被优化为struct.member,这样就不会有任何运行时开销。 或者,如果“local”结构的定义由您决定,您可以将“position”和“member”指针指向union类型,并消除对强制转换的需要。 |
![]() |
8
0
移除
关于与10年以上模拟的兼容性,我希望代码生成器的原始输入文件已经保存,以便您在必要时再次运行它(甚至更好,生成代码是构建过程的一部分)。如果这是某种交互式代码生成向导和/或开发人员编辑生成的代码,那么您已经处于一个受伤的世界,我想知道您是如何在一开始就对生成的代码进行任何重大更改的(手动?后处理脚本?). |
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |