[C.C++] C语言 - GNU C 和 ANSI C 之间的差异

728 0
Honkers 2025-9-26 13:55:48 来自手机 | 显示全部楼层 |阅读模式

目录

一:C语言版本:

二:ISO C 和 GNU C 与 ANSI C 的关系:

三:GNU C 与 ANSI C的差异:


一:C语言版本:

   C 语言有以下几个标准版本:     

  • C89 / C90

    • C89:由美国国家标准协会(ANSI)于 1989 年制定的标准,通常称为 ANSI C。
    • C90:国际标准化组织(ISO)在 1990 年将 C89 标准采纳为 ISO 9899:1990,称为 C90。
  • C99

    • 于 1999 年发布的标准(ISO 9899:1999),引入了许多新特性,包括:
      • 可变长度数组(VLA)
      • 复合字面量
      • inline 关键字
      • 新的数据类型,如 long long 和 bool 类型
      • 增强的预处理器功能
  • C11

    • 于 2011 年发布的标准(ISO 9899:2011),进一步增强了 C 语言,包括:
      • 多线程支持(_Thread_local 关键字)
      • 原子操作(
      • 断言(static_assert)
      • 对 Unicode 支持的增强
  • C18

    • 于 2018 年发布的标准(ISO/IEC 9899:2018),主要是对 C11 的修订,修复了一些错误和不一致之处,没有引入新的特性。
  • C23(预计):

    • 这是正在进行中的标准化工作,旨在引入一些新特性和改进,具体内容尚未最终确定。

二:ISO C 和 GNU C 与 ANSI C 的关系:

        ANSI C:标准化的 C 语言,确保了代码的可移植性和一致性。包括 C89 和 C90 标准。

        ISO C: 这个标准是对 ANSI C 的国际认可,确保了 C 语言在全球范围内的一致性。

        GNU C:基于 ANSI C 的扩展版本,由 GNU 编译器集合(GCC)实现,增加了许多 GNU 特有的功能。

三:GNU C 与 ANSI C的差异:

        1. GNU C 支持嵌套函数

  1. #include <stdio.h>
  2. void outer() {
  3. void inner() {
  4. printf("Inner function\n");
  5. }
  6. inner();
  7. }
  8. int main() {
  9. outer();
  10. return 0;
  11. }
复制代码

        2. GNU C 支持可变长数组 

  1. #include <stdio.h>
  2. void print_array(int n) {
  3. int arr[n]; // VLA
  4. for (int i = 0; i < n; i++) {
  5. arr[i] = i;
  6. printf("%d ", arr[i]);
  7. }
  8. printf("\n");
  9. }
  10. int main() {
  11. print_array(5);
  12. return 0;
  13. }
复制代码

        3. GNU C 支持编译属性设置

  1. void my_function() __attribute__((noreturn));
  2. void my_function() {
  3. // 该函数不会返回
  4. while (1);
  5. }
复制代码

        4. GNU C 支持内联汇编

  1. #include <stdio.h>
  2. int main() {
  3. int result;
  4. asm ("movl $42, %0" : "=r" (result)); // 内联汇编
  5. printf("Result: %d\n", result);
  6. return 0;
  7. }
复制代码

        5. GNU C 支持零长度数组,多用于表示这是一个动态数组

  1. struct example {
  2. int size;
  3. char data[0]; // 零长数组
  4. };
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行