在C语言中,default
关键字在结构体中的使用是特定于C11标准的。它用于指定结构体成员或联合体的默认初始化行为。这在你定义一个结构体类型并希望为某些字段提供默认值时非常有用。
以下是一个使用default
关键字的例子:
#include <stdio.h>
#include <stdbool.h>
typedef struct {
bool is_active;
int priority;
const char* name;
} Task;
Task createTask(const char* name, bool is_active, int priority) {
Task task = {0}; // 初始化所有成员为0或NULL
task.name = name;
task.is_active = is_active ? true : false; // 使用条件运算符设置默认值
task.priority = priority ? priority : 1; // 使用条件运算符设置默认值
return task;
}
int main() {
Task task1 = createTask("Task1", true, 5);
printf("Task1: %s, Active: %s, Priority: %d\n", task1.name, task1.is_active ? "Yes" : "No", task1.priority);
Task task2 = createTask("Task2", false, 0);
printf("Task2: %s, Active: %s, Priority: %d\n", task2.name, task2.is_active ? "Yes" : "No", task2.priority);
return 0;
}
在这个例子中,createTask
函数创建一个Task
结构体实例,并根据传入的参数初始化它。如果未提供某个参数的值,那么该字段将使用默认值。注意,这里我们使用了条件运算符(?:
)来在未提供参数值时设置默认值。
然而,需要注意的是,default
关键字本身并不直接出现在上述代码中。实际上,default
关键字在C11标准中被引入,用于指定结构体成员或联合体的默认初始化行为。在上面的例子中,我们通过条件运算符和显式地初始化成员变量来实现类似的效果。
要直接使用default
关键字,你可以编写类似下面的代码:
#include <stdio.h>
typedef struct {
bool is_active DEFAULT(false);
int priority DEFAULT(1);
const char* name DEFAULT(NULL);
} Task;
int main() {
Task task;
printf("Task: Active: %s, Priority: %d, Name: %s\n", task.is_active ? "Yes" : "No", task.priority, task.name);
return 0;
}
在这个例子中,如果未为Task
结构体的成员变量提供值,它们将使用DEFAULT
指定的默认值。