检查C中包含未定义变量的关系表达式的有效性

时间:2014-02-04 11:36:05

标签: c

C中是否有一个函数可以在不知道所涉及的变量的情况下评估关系表达式的有效性?

示例:

int x;
(x < 10 && x > 1) 

应该返回true,而不是像

这样的表达式
int x;
(x > 10 && x < 1)

应该返回false

5 个答案:

答案 0 :(得分:2)

不,没有。

对于除写入之外的任何内容使用未初始化的变量是未定义的行为。

答案 1 :(得分:1)

据我所知,c没有构建“表达式有效性函数”。你应该自己编码。

伪代码:

bool Expr_valid(char* input)
{
    array[]=parse(input);   //parse input as you like into array
    evaluate(array);        //evaluate the parts of input according to your rules
    return evaluation result;
}

答案 2 :(得分:0)

没有注意到这样的函数在没有定义变量的情况下找到关系表达式的有效性。

需要使用关系运算符来查找two entities之间的关系,{{1}}可以是常量,也可以是仅定义的变量。否则它可能是使用未定义变量的UB。

答案 3 :(得分:0)

  

C中是否有一个函数可以在不知道所涉及的变量的情况下评估关系表达式的有效性

没有

您应该做的是使用尽可能多的警告进行编译。好的编译器会发出警告,例如“条件总是真/假”。如果编译器仍然无法捕获它,请考虑使用外部静态分析工具,这很可能会发现这样的错误。

答案 4 :(得分:0)

您可以使用cppcheck

int x;

if (x > 10 && x < 0) {}

输出:

david@debian:~$ cppcheck --enable=all demo.c
Checking demo.c...
[demo.c:6]: (style) Variable 'x' is not assigned a value
[demo.c:8]: (warning) Logical conjunction always evaluates to false: x < 0 && x > 10.
[demo.c:8]: (error) Uninitialized variable: x
Checking usage of global functions..