gpt4 book ai didi

c++ - C 中用 1 替换 0 的宏

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

我的程序中有几个定义,它们为数组指定了大小。现在,你不能初始化一个大小为 0 的数组。所以我需要一种方法来检查这个值,如果它是零,就放 1。我以前从未使用过任何宏,但这是我想出的:

#define MINIMUMONE(i)  do{if(i == 0){return 1;}else{return i;}}while(0)

然后像这样初始化我的数组:

int directIn[MINIMUMONE(NRDIRECTINPUTS)] = {0};

NRDIRECTINPUTS 在单独的文件中定义。现在我收到错误expected primary expression before 'do'expected '`' before 'do'expected '}' at the end of input 。因为我以前从未使用过宏,所以首先我什至不确定这是可能的。

现在,在输入这​​个问题时,我发现这完全不是宏的工作方式,但它们只是用它后面的内容替换了他定义的内容。有没有办法做我想做的事?我正在使用 Arduino,所以它是 C/C++,以防这可能有帮助。

最佳答案

既然可以使用 constexpr 函数,为什么还要使用宏?

constexpr std::size_t minimumone( std::size_t i )
{
return i == 0? 1 : i;
}

为了评论员,这里是上面代码的无分支版本:

constexpr std::size_t minimumone( std::size_t i )
{
return i + (i == 0); // Becomes at least 1 whatever value i has.
}

当然还有模板版本:

template< std::size_t N >
constexpr std::size_t minimumone()
{
return N == 0? 1 : N;
}

从 C++1y 开始,它变得更好了:

template< std::size_t N >
std::size_t minimumone = (N == 0? 1 : N);

关于c++ - C 中用 1 替换 0 的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23981510/

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