c中 __THROW __nonnull ((3));的示例代码
时间: 2024-09-18 22:04:02 浏览: 30
VC6.0Chapter2.rar_ Throw.cpp
在C语言中,`__THROW`和`__nonnull`这两个关键字通常不是标准库的一部分,它们可能是某些特定编译器如GCC的扩展特性,用于增强函数的异常安全性和参数检查。`__THROW`通常表示该函数不会抛出异常,而`__nonnull`则表示特定参数不得为NULL。
一个简单的例子可以这样展示:
```c
#include <stdio.h>
#include <errno.h> // 假设这是GCC扩展的
// 使用__THROW标记函数不会抛出异常
void throw_func(int* ptr) __THROW {
if (ptr == NULL) {
errno = ENOENT; // 设置错误代码,而不是真的抛出异常
perror("Invalid pointer"); // 或者打印错误信息
return;
}
*ptr = 42;
}
// 使用__nonnull((3))指定第三个参数不能为空
void nonnull_func(void* ptr, int* index, char* message) __nonnull__((3)) {
if (index == NULL) {
printf("Error: 'index' cannot be NULL.\n");
return;
}
// ... 其他操作
}
int main() {
int x;
throw_func(&x); // 调用throw_func,它不会抛出异常
nonnull_func(NULL, &x, "NonNull test"); // 调用nonnull_func,会检测第三个参数message是否为NULL
return 0;
}
```
阅读全文