是否可以定义返回文本字符串的 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
函数。
我在 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
函数。