C語言筆記-用__VA_ARGS__ 完成free_all() 函式向量化
free()是一個長見的函式,不過他一次只能接受一個參數
因此常常在函式尾巴必須加上一堆釋放記憶體的工作:
這樣的程式碼很不美觀,很冗長,寫成這樣:
完成方法:
第5行:
提高安全性,
第6行:
需要一個終止符,卻保不與任何使用中的指標匹配,包括任何的NULL指標。
因此我們使用複合常量形式定義醫包含整數的陣列,並定義一個指向這個陣列的指標。
for迴圈的終止條件所觀察的是指標本身,而不是他指向的東西
因此常常在函式尾巴必須加上一堆釋放記憶體的工作:
free(ptr1); free(ptr2); free(ptr3);
這樣的程式碼很不美觀,很冗長,寫成這樣:
free_all(ptr1,ptr2,ptr3);
完成方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> #include <stdlib.h> #define Fn_apply(type,fn,...){\ void *stopper_for_apply=(int[]){0};\ type **list_for_apply=(type*[]){__VA_ARGS__,stopper_for_apply};\ \ for(int i=0;list_for_apply[i]!=stopper_for_apply;i++)\ fn(list_for_apply[i]);\ } #define Free_all(...) Fn_apply(void, free,__VA_ARGS__); int main(void) { int *x=malloc(1000); int *y=malloc(1000); int *z=malloc(1000); Free_all(x,y,z); } |
第5行:
提高安全性,
第6行:
需要一個終止符,卻保不與任何使用中的指標匹配,包括任何的NULL指標。
因此我們使用複合常量形式定義醫包含整數的陣列,並定義一個指向這個陣列的指標。
for迴圈的終止條件所觀察的是指標本身,而不是他指向的東西
留言
張貼留言