免费做国际网站有哪些,青岛城阳软件网站开发,wordpress用户集成,网站页面优化包括C99 标准开始引入了 // 单行注释。在此之前#xff0c;C语言只支持 /* ... */ 多行注释。
具体说明#xff1a;
// 单行注释#xff1a;在C99标准#xff08;ISO/IEC 9899:1999#xff09;引入之前#xff0c;C语言中没有单行注释。C99标准借鉴了C的注释风格#xff0…C99 标准开始引入了 // 单行注释。在此之前C语言只支持 /* ... */ 多行注释。
具体说明
// 单行注释在C99标准ISO/IEC 9899:1999引入之前C语言中没有单行注释。C99标准借鉴了C的注释风格引入了这种单行注释。/* ... */ 多行注释自C语言的早期版本包括C89和ANSI C以来就已经存在。
示例
在C99之前例如使用ANSI C标准的编译器
int main() {/* 这是一个多行注释 */int a 10;/* 这是一个多行注释 */return 0;
}在C99及之后
int main() {// 这是一个单行注释int a 10;// 这是另一个单行注释return 0;
}在现代C编译器中C99及之后可以混合使用这两种注释
int main() {// 这是一个单行注释int a 10; /* 这是一个多行注释 */return 0;
}总结
// 单行注释是从C99标准开始引入的。/* ... */ 多行注释从C语言的早期版本包括C89和ANSI C就已经存在。 C89也称为ANSI C和C99是两个主要的C语言标准它们之间有许多显著的区别。以下是一些关键区别及相应的示例
1. 单行注释
C89不支持 // 单行注释。C99支持 // 单行注释。
示例
// 这是一个C99支持的单行注释
int a 10; // 这是一个单行注释2. 变量声明
C89变量必须在函数块的开头声明。C99变量可以在代码块中的任意位置声明。
示例
// C89
void example() {int a 10;/* 必须在这里声明所有变量 */int b 20;a a b;
}// C99
void example() {int a 10;a a 10;int b 20; // 可以在任意位置声明变量a a b;
}3. 复合字面量
C89不支持复合字面量。C99支持复合字面量。
示例
// C99
struct Point {int x, y;
};
struct Point p (struct Point){.x 1, .y 2}; // 复合字面量4. 变长数组
C89不支持变长数组。C99支持变长数组。
示例
// C99
void example(int n) {int arr[n]; // 变长数组for (int i 0; i n; i) {arr[i] i;}
}5. 内联函数
C89不支持 inline 关键字。C99支持 inline 关键字。
示例
// C99
inline int add(int a, int b) {return a b;
}6. 数据类型扩展
C89没有 long long 数据类型。C99引入了 long long 数据类型至少64位。
示例
// C99
long long bigNumber 123456789012345LL;7. __func__ 预定义标识符
C89没有 __func__ 预定义标识符。C99引入了 __func__ 预定义标识符用于获取当前函数的名称。
示例
// C99
#include stdio.hvoid example() {printf(Function name: %s\n, __func__);
}8. 初始化增强
C89初始化结构体和数组时必须按顺序进行。C99允许使用指定初始化器designated initializers。
示例
// C99
struct Point {int x, y;
};
struct Point p {.y 2, .x 1}; // 指定初始化器这些示例展示了C99对C89的多方面增强使C语言变得更为灵活和功能强大。 C11 是 C 语言的一个标准全称为 ISO/IEC 9899:2011相对于 C99 进一步引入了一些新特性和改进。以下是 C11 相对于 C99 和 C89 的一些主要区别及相应的示例
1. _Generic 选择表达式
C89/C99不支持 _Generic 选择表达式。C11引入了 _Generic 选择表达式用于泛型编程。
示例
// C11
#include stdio.h#define type_of(x) _Generic((x), \int: int, \float: float, \double: double, \default: other)int main() {int i 0;float f 0.0;printf(i is %s\n, type_of(i)); // 输出i is intprintf(f is %s\n, type_of(f)); // 输出f is floatreturn 0;
}2. 匿名结构体和联合体
C89/C99不支持匿名结构体和联合体。C11支持匿名结构体和联合体。
示例
// C11
struct {union {int i;float f;};
} u;int main() {u.i 10;printf(%d\n, u.i); // 输出10u.f 5.5;printf(%f\n, u.f); // 输出5.500000return 0;
}3. 静态断言
C89/C99不支持静态断言。C11引入了 _Static_assert 关键字用于在编译时进行静态断言。
示例
// C11
#include assert.h_Static_assert(sizeof(int) 4, int size is not 4 bytes);int main() {return 0;
}4. 线程支持
C89/C99不提供标准化的线程支持。C11引入了 threads.h提供对多线程的标准支持。
示例
// C11
#include stdio.h
#include threads.hint thread_func(void *arg) {printf(Hello from thread!\n);return 0;
}int main() {thrd_t t;thrd_create(t, thread_func, NULL);thrd_join(t, NULL);return 0;
}5. 对齐支持
C89/C99不提供对齐支持。C11引入了 _Alignof 和 _Alignas 关键字用于指定和查询类型对齐要求。
示例
// C11
#include stdio.h
#include stdalign.hstruct S {char c;_Alignas(16) int i;
};int main() {printf(Alignment of char: %zu\n, alignof(char)); // 输出1printf(Alignment of int: %zu\n, alignof(int)); // 输出4printf(Alignment of struct S: %zu\n, alignof(struct S)); // 输出16return 0;
}6. 预定义宏
C89/C99不支持新的预定义宏。C11引入了新的预定义宏例如 __STDC_VERSION__。
示例
// C11
#include stdio.hint main() {#if __STDC_VERSION__ 201112Lprintf(C11 or later\n);#elseprintf(Before C11\n);#endifreturn 0;
}7. 可选特性宏
C89/C99不支持可选特性宏。C11引入了可选特性宏例如 __STDC_NO_THREADS__。
示例
// C11
#include stdio.hint main() {#ifdef __STDC_NO_THREADS__printf(Threads are not supported\n);#elseprintf(Threads are supported\n);#endifreturn 0;
}8. 更严格的类型检查
C89/C99类型检查不如 C11 严格。C11引入了更严格的类型检查和标准库改进。
C11 标准通过引入这些新特性和改进使得 C 语言变得更加现代化、灵活和安全特别是在泛型编程、静态断言、多线程和内存对齐等方面提供了显著的增强。