许多Lisp--家族语言对于允许两个以上操作数的加法或比较、if (可选地省略备用分支等)都有一点语法上的限制。要用宏实现这些操作数,需要说些什么,这将使(+ a b c)扩展到(+ a (+ b c))等;这将使实际的运行时代码更简洁、更简单、速度更快(因为每次添加一对数字时,检查额外参数的逻辑就不必运行)。然而,通常的宏展开算法是“一次又一次地展开最外层的形式,直到得到一个非宏结果”。因此,这意味着,例如,+最好不是扩展到+的<e
我正在尝试用Visual C++ 2010学习版编译一些源代码。代码是为GCC编写的,包含如下属性:...因为这不是标准的C++语法,所以Visual C++无法识别它。在struct声明之前使用这个宏,它可以很好地工作:但我不想修改这些文件。如果我在同一位置仅定义__attribute__ (不带参数),则宏的定义是正确的。请注意,生成的命