我想在#define指令中传递值。我是c编程的新手。例如,我们在printf函数printf中使用%s或%d(“hello%d”,into);如何在#define指令中使用相同的代码。我的代码是#define URL“www.my website.com”我试图使用以下代码传递值#define URL“my website.com%d”,int但我得到了没有结果
答案 0 :(得分:2)
您可以使用Macro参数:
#include <stdio.h>
#define URL(i) "www.mywebsite.com"#i
int main() {
printf(URL(5)); // Will print www.mywebsite.com5
return 0;
}
#
称为粘贴运算符。它将两个令牌粘贴在一起。
或者你可以这样做......
#include <stdio.h>
#define URL(i) "www.mywebsite.com %d", i
int main() {
printf(URL(5));
return 0;
}
在第一个解决方案中,预处理器只需将i
的任何值粘贴到&#34; www.mywebsite.com&#34;。它不一定是数据。它可以是任何东西。
如果你传入URL(ABC)
(注意:ABC
不是字符串。它没有引号。它只是一个简单的标记。),你的输出将是www.mywebsite.comABC
。
如果您传递URL("ABC")
(&#34; ABC&#34;带引号),则输出结果为www.mywebsite.com"ABC"
。
简而言之,预处理器不关心数据类型并不重要。它只是将它视为一个简单的标记,并用www.mywebsite.com
粘贴它。在这里,您的"ABC"
并未被预处理程序视为字符串,而是作为任何其他令牌。
在第二种解决方案中,预处理器不进行任何粘贴。它只是将您的printf
语句评估为printf("www.mywebsite.com%d", i)
。因此,您需要传递一个整数URL(5)
或除5
之外的任何其他整数。如果您传递任何其他数据类型的数据,它将给您一个警告。您无法通过URL(ABC)
。它会给出错误。因为ABC
不是数据。但是如果你将"ABC"
作为字符串传递(即带引号),它会发出警告,但你的代码会编译,结果输出为www.mywebsite.com96882598