基于对Gnuplot最新版本中
command.c
源代码的简要检查,我认为该功能不受支持。更具体地说,相关部分可以在第
1163
行找到(见下文)。解析器首先确保后面是由括号包围的条件,然后如果接下来的标记是
{
,则激活新的语法,将整个if块隔离在一对匹配的
{}
中,并可选择查找后跟一个
{}
的
else
,但其也允许只跟随一个与
{}
有关的子句。因此,一个简单的脚本如下:
if(flag == 1){
print 1;
}else if(flag == 2){
print 2;
}
确实会生成错误信息expected {else-clause}
。一种解决办法是将if语句嵌套,如下:
if(flag == 1){
}else{
if(flag == 2){
}else{
if(flag == 3){
}
}
}
可以承认,这样稍微啰嗦了一点...
void
if_command()
{
double exprval;
int end_token;
if (!equals(++c_token, "("))
int_error(c_token, "expecting (expression)");
exprval = real_expression();
if (equals(c_token,"{")) {
char *clause = NULL;
int if_start, if_end, else_start=0, else_end=0;
int clause_start, clause_end;
c_token = find_clause(&if_start, &if_end);
if (equals(c_token,"else")) {
if (!equals(++c_token,"{"))
int_error(c_token,"expected {else-clause}");
c_token = find_clause(&else_start, &else_end);
}
end_token = c_token;
if (exprval != 0) {
clause_start = if_start;
clause_end = if_end;
if_condition = TRUE;
} else {
clause_start = else_start;
clause_end = else_end;
if_condition = FALSE;
}
if_open_for_else = (else_start) ? FALSE : TRUE;
if (if_condition || else_start != 0) {
clause = new_clause(clause_start, clause_end);
begin_clause();
do_string_and_free(clause);
end_clause();
}
else
并得到你需要的结果。 - Michael