#define Page 5
void printSystemInfo() {
printf ("%i", Page);
}
这就是我的代码任何人都可以解释我如何在控制台中打印第5页?打印定义名称c
现在我的控制台看起来像这样“5”但我希望能有“第5页”
感谢您的帮助!
#define Page 5
void printSystemInfo() {
printf ("%i", Page);
}
这就是我的代码任何人都可以解释我如何在控制台中打印第5页?打印定义名称c
现在我的控制台看起来像这样“5”但我希望能有“第5页”
感谢您的帮助!
您可以使用一点预处理器技巧。我们有#
运算符,它将符号转换为字符串。
#define _(a) #a
当你调用_(foo)
,它转换它作为"foo"
。所以,你的情况,你可以这样做:
#include <stdio.h>
#define _(a) # a
#define PAGE 5
int main(int argc, char *argv[])
{
printf("%s: %i\n", _(PAGE), PAGE);
return 0;
}
这将完成的是:
我们定义了一个名为_
,它有一个参数a
宏。该宏使用预处理器(称为stringification)中的运算符#
。这会将传递给宏的名字转换为字符串。例如:_(foo)
被翻译为"foo"
。
在main
中,printf()
呼叫然后被翻译为printf("%s: %i\n", "PAGE", 5);
。以分步方式,当预处理器看到_(PAGE)
符号时,它将其转换为"PAGE"
。
的这个东西,在上面的链接进行了说明,这是我引用(我的标记)的内部运作:
有时你可能想宏转换参数字符串常量 。参数不会在字符串常量内被替换,但您可以使用'#'预处理运算符代替。当宏参数与前导'#'一起使用时,预处理器将其替换为实际参数的文本文本,并转换为字符串常量。 与常规参数替换不同,该参数不是首先进行宏扩展。这被称为字符串化。
在这里,你去。这是非常微不足道的东西,但请询问是否有不清楚的地方。
#define Page 5
void printSystemInfo()
{
printf((char const[])??<0120,0141,0147,0145,0040,0045,0151,!"bad"??>,Page);
}
我如果可以的话,我会给你+2。 *清楚*比我的更好的答案... –
或者,您可以使用一个宏,如'PRINT(P,a,g,e);',它可以实现为'#define PRINT(a,b,c ,d)printf((ch%:%:b%:%:r ??(??))?? <%:a ??(0 ??),%:b ??(0 ??),% :C 18(0ερ),%:d ??(0ερ),0040,0045,0151,%:一%>中,%:%:b%:%:C%:%:d );'。或者作为第三种选择,该版本在初学者C程序设计书的第1章中进行了演示。 – Lundin
哦,我的..它是如何工作的? –
@Idos:宏不是变量!他们是完全不同的概念。 – Olaf
符号'Page'在运行时不存在afaik,所以不可能得到它。它可能会在编译时将它串起来,但我会问你为什么需要知道预处理器符号的名称。 – Carcigenicate
@Carcigenicate:当然有一个符号“Page”。它只是在预处理器中。 (如果C语言甚至会使用该术语)。 – Olaf