如何在c中传递#define指令中的值?

时间:2017-01-14 19:19:57

标签: c parameter-passing

我想在#define指令中传递值。我是c编程的新手。例如,我们在printf函数printf中使用%s或%d(“hello%d”,into);如何在#define指令中使用相同的代码。我的代码是#define URL“www.my website.com”我试图使用以下代码传递值#define URL“my website.com%d”,int但我得到了没有结果

1 个答案:

答案 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