gpt4 book ai didi

c - 在使用#ifndef 的#undef 之后#define 没有按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 05:37:30 25 4
gpt4 key购买 nike

我写了一个简单的程序把加法改成乘法

#include<stdio.h>

#define ADD(X,Y) X+Y

void fun()
{
#ifndef ADD(X,Y)
printf("entered #ifndef");
#define ADD(X,Y) X*Y;
#endif

int y=ADD(3,2);
printf("%d",y);
}

int main()
{
#undef ADD(X,Y)
fun();

return 0;
}

我期望的输出是 3*2 但代码仍然输出 3+2 即 5 。
代码没有输出:"entered #ifndef",这意味着 #undef 不工作?这里有什么问题?

编辑:感谢@deviantfan

正确代码如下:

#include<stdio.h>

#define ADD(X,Y) X+Y

void fun();

int main()
{
#undef ADD(X,Y)
fun();

return 0;
}

void fun()
{
#ifndef ADD(X,Y)
printf("entered #ifndef");
#define ADD(X,Y) X*Y;
#endif

int y=ADD(3,2);
printf("%d",y);
}

最佳答案

预处理器(处理 #define)不知道
功能或类似的东西。它严格地从上到下处理文件,
独立于实际代码执行在运行时如何跳转。

一旦它碰到您的 #undef#ifndef 就会被遗忘很久,不会再次计算。

关于c - 在使用#ifndef 的#undef 之后#define 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461103/

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