更多互联网新鲜资讯、工作奇淫技巧关注原创【飞鱼在浪屿】(日更新)
defer机制的参考实现的论文概述,已在SAC'21上发表:。它介绍了C语言机制的实现端,该机制和Go编程语言中的defer类似,用于错误处理和延迟清除。这是使用这种功能的简单示例:
guard { void * const p = malloc(25); if (!p) break; defer free(p); void * const q = malloc(25); if (!q) break; defer free(q); if (mtx_lock(&mut)==thrd_error) break; defer mtx_unlock(&mut); // all resources acquired // use p, q, and mut until the end of the block ...
该机制提高了现有语言功能的接近度,可见性,可维护性,健壮性以及清理和错误处理的安全性。本文描述的功能的库实现可通过获得。
该功能正在考虑纳入C标准中,并且已经在上次WG14会议上进行了讨论。主要介绍可以在论文中找到:
GCC的__cleanup__机制
GCC也有个清理资源机制,详见:
#include <; / *演示代码,清理变量。参见: * / / * cleanup函数 *参数为int地址 * / void clean_up (int * final_value ) { printf (“清理\ n ” ); printf (“最终值:%d \ n ” ,* final_value ); } int main (int argc , char ** argv ) { / *连同初始化一起声明cleanup属性 如果没有cleanup属性,则等效 于: int avar = 1; * / int avar __attribute__ ((__cleanup__ (clean_up ))) = 1 ; avar = 5 ; return 0 ; }