
- C 標準庫
- C 庫 - 首頁
- C 庫 - <assert.h>
- C 庫 - <complex.h>
- C 庫 - <ctype.h>
- C 庫 - <errno.h>
- C 庫 - <fenv.h>
- C 庫 - <float.h>
- C 庫 - <inttypes.h>
- C 庫 - <iso646.h>
- C 庫 - <limits.h>
- C 庫 - <locale.h>
- C 庫 - <math.h>
- C 庫 - <setjmp.h>
- C 庫 - <signal.h>
- C 庫 - <stdalign.h>
- C 庫 - <stdarg.h>
- C 庫 - <stdbool.h>
- C 庫 - <stddef.h>
- C 庫 - <stdio.h>
- C 庫 - <stdlib.h>
- C 庫 - <string.h>
- C 庫 - <tgmath.h>
- C 庫 - <time.h>
- C 庫 - <wctype.h>
- C 標準庫資源
- C 庫 - 快速指南
- C 庫 - 有用資源
- C 庫 - 討論
- C 程式設計資源
- C 程式設計 - 教程
- C - 有用資源
C 庫 - va_end() 宏
C 的stdarg 庫 va_end() 宏用於執行對由va_start 或 va_copy 初始化的ap 物件(型別為 va_list 的變數)的清理。它可能會修改 ap,使其不再可用。
在使用使用va_start 或“va_copy”的函式之後,應呼叫va_end。它不能在沒有相應的“va_start”或“va_copy”的情況下呼叫。這樣做會導致未定義的行為。
此宏用於記憶體管理,並進一步防止記憶體洩漏。
語法
以下是 va_end() 宏的 C 庫語法:
void va_end(va_list ap)
引數
此宏接受單個引數:
-
ap - 這是一個 va_list 型別的變數,它將由“va_start”初始化。此變數用於遍歷引數列表。
返回值
此宏不返回值。
示例 1
以下是演示 va_end() 用法的基本 c 示例。
#include <stdio.h> #include <stdarg.h> int sum(int count, ...) { va_list args; int tot = 0; // Set the va_list variable with the last fixed argument va_start(args, count); // Retrieve the arguments and calculate the sum for (int i = 0; i < count; i++) { tot = tot + va_arg(args, int); } // use the va_end to clean va_list variable va_end(args); return tot; } int main() { // Call the sum, with number of arguments printf("Sum of 3, 5, 7, 9: %d\n", sum(4, 3, 5, 7, 9)); printf("Sum of 1, 2, 3, 4, 5: %d\n", sum(5, 1, 2, 3, 4, 5)); return 0; }
輸出
以下是輸出:
Sum of 3, 5, 7, 9: 24 Sum of 1, 2, 3, 4, 5: 15
示例 2:計算引數個數
以下 c 示例演示了在可變引數函式中使用 va_end()。
#include <stdio.h> #include <stdarg.h> int cnt(int count, ...) { va_list args; int num_of_arg = 0; // Set the va_list variable with the last fixed argument va_start(args, count); // Retrieve the arguments and count the arguments for (int i = 0; i < count; i++) { num_of_arg= num_of_arg + 1; } // use the va_end to clean va_list variable va_end(args); return num_of_arg; } int main() { // Call the sum, with number of arguments printf("Number of arguments: %d\n", cnt(4, 3, 5, 7, 9)); printf("Number of arguments: %d\n", cnt(5, 1, 2, 3, 4, 5)); return 0; }
輸出
以下是輸出:
Number of arguments: 4 Number of arguments: 5
示例 3:查詢最大數
讓我們看另一個例子,我們使用 va_end() 在找到最大數後清理 va_list 變數。
#include <stdarg.h> #include <stdio.h> int Largest_num(int n, ...) { va_list ap; va_start(ap, n); int max = va_arg(ap, int); for (int i = 0; i < n - 1; i++) { int temp = va_arg(ap, int); max = temp > max ? temp : max; } // use va_end to clean up va_list variable va_end(ap); return max; } int main() { printf("%d\n", Largest_num(2, 1, 2)); printf("%d\n", Largest_num(3, 1, 2, 3)); printf("%d\n", Largest_num(4, 6, 2, 3, 4)); return 0; }
輸出
以下是輸出:
2 3 6
廣告