gpt4 book ai didi

c - 我不想预处理特定的宏。它不应该用它的值来代替它。是否可以?

转载 作者:行者123 更新时间:2023-11-30 16:03:35 25 4
gpt4 key购买 nike

示例=

#define a 100
#define b 200
main()
{
int c=a+b;
}

预处理后

输出-

#define a 100
main()
{
int c=a+200;
}

最佳答案

您可以尝试重构宏以允许外部配置,即

/* config.h */

/* set defaults for a and b */
#ifndef a
#define a 100
#endif

#ifndef b
#define b 200
#endif

/* main.c */

#include "config.h"

int main(void)
{
int c = a + b;
}

然后你可以在构建时在外部设置宏,例如这样:

$ gcc -E -Da=a main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"


# 1 "config.h" 1
# 4 "main.c" 2

int main(void)
{
int c = a + 200;
}
$ gcc -E -Db=b main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"


# 1 "config.h" 1
# 4 "main.c" 2

int main(void)
{
int c = 100 + b;
}

现在,您当然不必使用单独的配置 header ,但从维护的角度来看,我建议您使用它,这将使跟踪可用的配置设置和他们的默认值。

关于c - 我不想预处理特定的宏。它不应该用它的值来代替它。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923507/

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