最新バージョンのGnuplotでソースコードcommand.c
を簡単に調べたところ、この機能はサポートされていないと言えます。具体的には、該当部分は1163
(下記参照)に記載されています。パーサーはまず、if
の後にカッコで囲まれた条件が続くことを確認します。次のトークンが{
である場合、新しい構文をアクティブにし、一致するブロックの1つに囲まれたブロック全体を分離し、場合によってはelse
を検索します。ただし、{}
-enclosed句のみが続くことが許可されています。このため、簡単なスクリプトなど:
if(flag == 1){
print 1;
}else if(flag == 2){
print 2;
}
は確かにエラーメッセージexpected {else-clause}
を生成します。確かに少し冗長です
if(flag == 1){
}else{
if(flag == 2){
}else{
if(flag == 3){
}
}
}
あなたはあなたの第二の例では、 `else`を使用しないよう、あなたが必要なものを得ることができます
void
if_command()
{
double exprval;
int end_token;
if (!equals(++c_token, "(")) /* no expression */
int_error(c_token, "expecting (expression)");
exprval = real_expression();
/*
* EAM May 2011
* New if {...} else {...} syntax can span multiple lines.
* Isolate the active clause and execute it recursively.
*/
if (equals(c_token,"{")) {
/* Identify start and end position of the clause substring */
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();
}
...:などのステートメント場合は、1つの回避策は、巣になります。 –