gpt4 book ai didi

c - #define func(t, a, b){ t temp;温度=a; a=b; b=温度;}

转载 作者:行者123 更新时间:2023-11-30 21:13:57 30 4
gpt4 key购买 nike

谁能告诉我下面的代码是如何工作的,

#define func(t, a, b){  t temp; temp=a; a=b; b=temp;}

int main()
{

int a=3, b=4;
float c=4.5, d=5.99;

func(int, a, b);
func(float, c, d);

printf("%d %d\n", a,b);
printf("%.2f %.2f\n",c,d);

return 0;
}

这将给出如下交换的输出

4 3
5.99 4.50

我的问题是

1)is "#define func("是一个带有可变参数的函数..??

2)为什么是“t temp;”没有给出任何错误??

3)是否可以将数据类型作为参数发送??

我不知道它是如何工作的,我只知道发送变量,结构,指针和值,但我不知道我们如何发送数据类型,为什么需要发送数据类型,

最佳答案

我不知道那是什么类型的“c”,但看起来(如果代码编译、运行并产生预期结果):

#define func(t, a, b){  t temp; temp=a; a=b; b=temp;}

#definepre-processor指令通常用于创建别名(宏)。func(...) 是一个类似函数的宏名称,预处理器将在您的代码中查找并替换为后面的内容强>.

()内定义参数:tab 。每当您编写 func(1,2,3) 时,这些逗号分隔的值将被分配给参数:t 将变为 1, a = 2b = 3。然后宏体将被处理以生成具有这些值的内联代码。因为这种替换发生在编译之前(这就是预处理所代表的意思),所以没有检查或错误,您的源代码将被修改,然后才进行编译(可能是产生编译时错误)。

当您编写 func(int, a, b); 行时,在预处理过程中它将被修改为

{  t temp; temp=a; a=b; b=temp;}

其中t = inta = ab = b ,所以变成了

{  int temp; temp=a; a=b; b=temp;}

然后这将被编译。正如您所看到的,这是完全有效的代码。

特别针对您的问题,您没有在宏中发送任何类型的内容。宏使用纯文本进行操作,就像您键入文本来生成源代码一样。

关于c - #define func(t, a, b){ t temp;温度=a; a=b; b=温度;},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911792/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com