gpt4 book ai didi

c - 预处理常量数的指数

转载 作者:行者123 更新时间:2023-12-03 15:41:13 27 4
gpt4 key购买 nike

我的问题:我想获得一个包含 N_DIGITS 数字的 id,并且我希望 N_DIGITS 在预处理时可以自定义。我的 id 是一个整数,所以我想定义 10^N_DIGITS 作为这个数字的最大值。
换句话说:是否可以用宏作为指数预处理数字?
这是我的终极尝试:

#include <stdio.h>

#define N_DIGITS 5
#define MAX_N 10e ## N_DIGITS

int main()
{
printf("%d\n", MAX_N);
return 0;
}
当然,这不起作用,错误是 error: exponent has no digits .
我不明白为什么这个原则不能实现,因为编译器知道一切,但我可​​能是错的。
无论如何我的语法不正确,我可以在这里得到一些帮助吗?

最佳答案

标记粘贴是在宏展开之前完成的,所以你会得到10eN_DIGITS这不是有效的 token 。
您可以做的是具有两个级别的类似函数的宏 - 一个级别进行宏扩展,然后另一个级别进行粘贴:

#define N_DIGITS 5
#define MAKE_EXPONENT2(exp) 10e ## exp
#define MAKE_EXPONENT(exp) MAKE_EXPONENT2(exp)
#define MAX_N MAKE_EXPONENT(N_DIGITS)
这使得 MAX_N扩展到 10e5 .
其他事宜:
  • 10e5 是 double常量所以需要打印 %f ,不是 %d .
  • 如果你想要 10 的 5 次方,那么你需要 1e5 而不是 10e5。
  • 使用浮点常量处理整数数据可能会导致精度损失。
  • 关于c - 预处理常量数的指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66222860/

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