我可以制作非常相似的东西吗?
question ? func1(), val=5 : func2()
我想在第一个或第二个参数的位置放置一条以上的指令。 它可以解决吗?
答案 0 :(得分:1)
如果通过“指令”(当涉及到C ++的措辞时甚至不是这样的话),你的意思是“表达”,那么肯定:括号和逗号运算符来拯救!
SSCCE:
#include <cstdio>
int main()
{
int x = (1, 0) ? 2, 3 : (4, 5);
printf("%d\n", x); // prints 5
}
答案 1 :(得分:0)
是看看下面的例子:
#include <iostream>
int main()
{
int x,y,z;
double d = 2.5;
auto f = (d == 2.2) ? (x=5,y=10,z=0,2000) : (x=15,y=0,z=20,1000);
std::cout << x << " " << y << " " << z << " " << f << std::endl;
std::cin.get();
return 0;
}
不太干净所以建议让它更具可读性。
答案 2 :(得分:0)
感谢这些快速有用的答案!
所以我用C ++编写Arduino,它是完整的示例代码:
void setup() {
Serial.begin(115200);
bool b = false;
int val = 0;
b ? func1() : (func2(), val = 2);
Serial.println(val);
}
void loop() {}
void func1 (){
Serial.println("func1");
}
void func2 (){
Serial.println("func2");
}
当我从这个答案中了解到,如何正确使用括号和逗号时,我遇到了这些错误:
sketch_jul22a.ino: In function 'void setup()':
sketch_jul22a:8: error: second operand to the conditional operator is of type 'void', but the third operand is neither a throw-expression nor of type 'void'
second operand to the conditional operator is of type 'void', but the third operand is neither a throw-expression nor of type 'void'
我使用int类型函数而不是void类型,问题解决了:
int func1 (){
Serial.println("func1");
return 0;
}
int func2 (){
Serial.println("func2");
return 0;
}