我的程序中有几个定义为数组提供大小.现在,你不能初始化一个大小为0的数组.所以我需要一种方法来检查这个值,如果它是零,则放1.我以前从未使用任何宏,但这是我提出的:
#define MINIMUMONE(i) do{if(i == 0){return 1;}else{return i;}}while(0)
Run Code Online (Sandbox Code Playgroud)
然后像这样初始化我的数组:
int directIn[MINIMUMONE(NRDIRECTINPUTS)] = {0};
Run Code Online (Sandbox Code Playgroud)
与NRDIRECTINPUTS在单独的文件中定义.现在,我得到了错误之前,"做"预期的主要表现,之前"做"预期"`"和在输入预计年底"}".由于我之前从未使用过宏,所以我首先不确定这是否可行.
现在,在输入这个问题的时候,我得知的是,这完全不是宏的工作方式,而是简单地用它后面的内容取代了他的定义.有办法做我想做的事吗?我正在使用Arduino,所以它是C/C++,以防这可能有用.
为什么在使用constexpr-functions 时使用宏?
constexpr std::size_t minimumone( std::size_t i )
{
return i == 0? 1 : i;
}
Run Code Online (Sandbox Code Playgroud)
为了评论员的缘故,这里是上面代码的无分支版本:
constexpr std::size_t minimumone( std::size_t i )
{
return i + (i == 0); // Becomes at least 1 whatever value i has.
}
Run Code Online (Sandbox Code Playgroud)
当然还有模板版本:
template< std::size_t N >
constexpr std::size_t minimumone()
{
return N == 0? 1 : N;
}
Run Code Online (Sandbox Code Playgroud)
从C++开始,它变得更好:
template< std::size_t N >
std::size_t minimumone = (N == 0? 1 : N);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |