在SBCL中,我可以获得函数的文档字符串,如下所示:
(documentation #'mapcar t)
但是,我不明白如何获得宏的文档字符串。例如,给定宏:
(defmacro with-lines-in-file ((line filename) &body body)
"Runs body for each line in the file specified by filename."
(let ((file (gensym)))
`(with-open-file (,file ,filename)
(do ((,line
我在生成设置中定义了预处理器宏
FOO=BAR
我想把这个值转换成一个Objective-C字符串文字,它可以传递给一个方法。下面的#define不起作用,但它应该演示我试图实现的目标:
#define FOOLITERAL @"FOO" //want FOOLITERAL to have the value of @"BAR"
myMethodThatTakesAnNSString(FOOLITERAL);
我希望我只是错过了显而易见的东西,但我似乎找不到正确的预处理器巫毒来获得我需要的东西。
我尝试在下面的代码中使用宏SQR的定义:
#define SQR(x) (x*x)
int main()
{
int a, b=3;
a = SQR(b+5); // Ideally should be replaced with (3+5*5+3), though not sure.
printf("%d\n",a);
return 0;
}
它打印23。如果我将宏定义更改为SQR(x) ((x)*(x)),则输出将如预期的那样为64。我知道在C中对宏的调用会将调用替换为宏的定义,但我仍然不能理解它是如何计算23的。