是否可以定义返回文本字符串的 CAPL 函数?

Is it possible to define a CAPL function returning a text string?

我在 Vector CANoe 中开发 CAPL 脚本,我需要定义几个返回文本字符串的函数。在 C 中,我会这样写:

char * ErrorCodeToMsg(int code)

char [] ErrorCodeToMsg(int code)

在 CAPL 中,两个定义都失败了 parse error。到目前为止我想出的唯一可行的解​​决方案是:

variables {
  char retval[256];
}

void ErrorCodeToMsg(int code) {
  char [] msg = "Hello word";
  strncpy(retval, msg, 256);
}

当然这很丑陋,因为每次调用ErrorCodeToMsg都需要两条语句而不是一条。有没有更好的方法?

您必须像处理基于字符串的函数那样执行此操作:

 void ErrorCodeToMsg(char buffer[], int code){
 buffer = myListOfCodes[code];
 }

该值将使用其参考值存储在缓冲区中。在 Capl 中 return 字符串是不可能的。这就是为什么您不能使用 @ 选择器访问字符串系统变量的原因。

我已经为 return 字符串常量的函数实现了一个解决方法。它包括定义一个可能的 return 值数组 char errorMsg[][] 和定义一个函数 int ErrorCodeToMsg(errno) 是 returns 和该数组中的索引,所以它被这样调用:

write("Error: %s", errorMsg[ErrorCodeToMsg(errno)]);

请注意,这种方法在手动编码时容易出错,因为修改后很容易导致函数和数组不同步。在我的例子中,错误代码是在规范(XML 文件)中定义的,因此会自动生成错误消息数组和 ErrorCodeToMsg 函数。