我很难理解C预处理器是如何在下面的上下文中应用重写规则的。我有以下宏:
#define _A(x) "A" _##x
#define _B(x) "B" _##x
#define X(x) _##x
其思想是,这些宏中的每一个都使用连接来创建一个新表达式,该表达式本身可以是一个宏--如果它是一个宏,我希望对其进行扩展:
现在,以下内容和我所期望的一样扩展了:
X(x) expands to _x
X(A(x)) expands to "A" _x
X(A(B(x))) expands to "A" "B&
我有一个小的复制项目,无法编译。这个项目可以在这里下载:。错误是:
error[E0659]: `proc_macro_call` is ambiguous (macro-expanded name vs less macro-expanded name from outer scope during import/macro resolution)
我在项目中有3个库和1个可执行文件:
Lib 1-解析器-解析proc宏调用。
Lib 2- proc_two -返回文字字符串作为proc宏调用。
Lib 3- proc_one -将宏转发给proc_two (尽管它不依赖于pro
我想知道C定义预处理器是如何处理循环依赖的(of #)。这是我的程序:
#define ONE TWO
#define TWO THREE
#define THREE ONE
int main()
{
int ONE, TWO, THREE;
ONE = 1;
TWO = 2;
THREE = 3;
printf ("ONE, TWO, THREE = %d, %d, %d \n",ONE, TWO, THREE);
}
下面是预处理器的输出。我不明白为什么输出是这样的。我想知道预处理器在这种情况下采取的各种步骤,以提供以下输出。
我正在将C代码块转换为Java,我遇到了一些我不太理解的语法。第一个函数使用#define创建函数。我个人从未见过#define来创建函数。我也在这篇文章中发现这真的是一个macro。下面,您将看到我试图用Java解释这段代码的内容。下面是C代码:
#define mat_elem(a, y, x, n) (a + ((y) * (n) + (x)))
然后我在Java中将其转换为:
public double mat_elem(double a, int y, int x, int n){
return (a + ((y) * (n) + (x)));
}
现在真正的问题是,这段代码也