不使用分号计算表达式

时间:2009-12-17 05:04:38

标签: c++ obfuscation

考虑到68 + 32等输入的表达式,我们必须在程序中不使用分号进行评估。如果它将在if或for循环中? 参考:https://www.spoj.pl/problems/EXPR2/

2 个答案:

答案 0 :(得分:6)

你可以使用这样的结构:

if (i++) {}

但是,仍然没有回答如何声明变量。但是,你可以做的一个技巧是:

#include <iostream>

int main(double x, double y) {
    if ((x = 1)) {}
    if ((y = 2)) {}
    if (std::cout << x << ", " << y << std::endl) {}
}

当然,你会收到在主参数列表中使用错误类型的警告,但它会起作用。

答案 1 :(得分:6)

您可以使用if和comma运算符,如下所示:

if( expr1, expr2, expr3, ... ) {}

这相当于

expr1;
expr2;
expr3;
...

要使用没有任何警告的变量,您可以定义一个函数来接收您从main调用所需的数据类型,如下所示:

void myFunc(int a, double b) {
    if ( expr1, expr2 ) { }
}
int main() {
    if ( myFunc(0, 0), 0 ) { }
}

请注意,您需要在main中添加, 0,否则会引发错误,因为不会忽略void返回。