我正在研究资源紧张的嵌入式平台。 我想要一个宏来捕获函数调用错误并将它们记录到固定大小的缓冲区。
我的愿望是能够做类似
的事情returnType retval;
CAPTURE_ERRORS(retval, function_name, argument1, moreArgsMaybe);
if (retval) { other_error_handling(); }
哪里
#define N 12
#define CAPTURE_ERRORS(retval, func, ...) \
do { retval = func(__VA_ARGS__); \
if (retval!=0) write_log_entry(#func[0:N],(int)retval); \
} while (0)
显然,Python切片语法不起作用。有没有办法获得字符串化宏参数的前N个字符?
(我不想在write_log_entry
内进行截断,因为这样整个长函数名称将存储在可执行映像中,以后才会丢弃。)
答案 0 :(得分:1)
我不知道任何方式作为字符串。 (有人知道,请赐教!)
编辑我知道的最简单的方法是让所有的函数名称长度不超过N
个字符!考虑使用N=6
的所有Fortran代码。 :)
我知道的第二个最简单的方法是将附加参数传递给CAPTURE_ERRORS
:
#define N 12
/* vvvv */
#define CAPTURE_ERRORS(retval, func, tag, ...) \
do { retval = func(__VA_ARGS__); \
if (!retval) write_log_entry(#tag,(int)retval); \
} while (0) /* ^^^^ */
和
CAPTURE_ERRORS(retval, function_name, function_nam, argument1, moreArgsMaybe);
^^^^^^^^^^^^
这是一个足够受限制的表单,您可以使用在编译之前运行的Python(甚至是sed!)脚本自动填充tag
现有的CAPTURE_ERRORS
调用。
修改
N
。