登录/注册

c99

更多

在C99标准下编写代码时,需要注意以下关键特性(用中文解释):

1. 单行注释

// C99支持单行注释(C89只支持/* */)

2. 变量声明位置

for(int i = 0; i < 10; i++) { 
    // C99允许在for循环初始化部分声明变量(C89要求变量声明在作用域开头)
}

3. 变长数组(VLA)

void func(int n) {
    int arr[n]; // C99支持栈上动态长度数组(注意:C11后改为可选特性)
}

4. 结构体初始化

struct Point { int x, y; };
struct Point p = { .x = 3, .y = 7 }; // C99支持指定成员初始化

5. 布尔类型

#include <stdbool.h>
bool flag = true; // 需要包含stdbool.h头文件

6. 十六进制浮点常量

double hexFloat = 0x1.2p3; // 等价于 1.125 * 2^3 = 9.0

7. 复合字面量

int* ptr = (int[]){1, 2, 3}; // 创建临时数组
draw_line((struct Point){ .x=0, .y=0 }, (struct Point){10, 20});

8. 灵活的数组成员(结构体)

struct flex_array {
    int len;
    double data[]; // 必须放在最后,不占空间(C89需用data[1]技巧)
};

9. 恢复限制类型(restrict

void copy(int* restrict dest, const int* restrict src, int n) {
    // restrict 指示指针不重叠,帮助编译器优化
}

10. 标准库增强

#include <stdint.h>  // 精确宽度整数类型(int32_t等)
#include <tgmath.h>  // 泛型数学函数

完整示例代码(GCD计算)

#include <stdio.h>
#include <stdbool.h>

// 使用C99特性:单行注释、for循环声明、bool类型
int main() {
    int a = 48, b = 18;

    printf("计算 %d 和 %d 的最大公约数\n", a, b);

    // 使用复合字面量传递指针
    compute_gcd(&(int){a}, &(int){b}); 

    return 0;
}

// 使用restrict指针优化
void compute_gcd(const int* restrict pa, const int* restrict pb) {
    int x = *pa, y = *pb;
    while(y != 0) {
        int tmp = x % y; // C99中负数取余行为明确定义
        x = y;
        y = tmp;
    }
    printf("结果: %d\n", x);
}

编译命令

gcc -std=c99 -o program program.c  # 明确指定C99标准

注意事项

如果需要特定功能示例或进一步解释,请说明具体方向!

rt-thread 在mdk5中使用v6编译器编译出错怎么解决?

cpuport.c... ArmClang: error: unsupported option \'--c99\' compiling i2c_core.

2025-09-24 07:22:14

STVD是不是不支持C99?

内容如标题所示,麻烦有懂的朋友告诉下我,这个问题花费我很多时间了。 不知道STVD是不是不支持C99??

2024-05-16 08:04:07

嵌入式实时操作系统AliOS Things的编码风格介绍

本文是AliOS Things提供的一套C语言代码规范,适用的对象为符合C99标准的C语言工程。

2023-06-07 09:20:10

C语言指定初始化器解析及其应用

C90 标准要求初始化程序中的元素以固定的顺序出现,与要初始化的数组或结构体中的元素顺序相同。但是在新标准 C99 中,增加了一个新的特...

资料下载 佚名 2022-02-07 11:28:00

Protel99SE汉化包程序下载

Protel99SE汉化包程序下载

资料下载 ah此生不换 2021-08-02 11:45:22

松下产品RQ-SW99-SCH原理图下载

松下产品RQ-SW99-SCH原理图下载

资料下载 迪克来了 2021-05-20 11:46:38

使用单片机实现99累加的C语言实例免费下载

本文档的主要内容详细介绍的是使用单片机实现99累加的C语言实例免费下载。

资料下载 佚名 2020-11-12 17:33:57

使用单片机实现99累减的C语言实例免费下载

本文档的主要内容详细介绍的是使用单片机实现99累减的C语言实例免费下载。

资料下载 佚名 2020-11-12 17:33:00

调用scons—dist报c99有关错误该怎样去解决呢?

keil5环境:v5.25工程:lts-v3.1.x分支,rt-thread\\bsp\\stm32\\stm32f103-fire-arbitrary路径下调用scons —dist 报c99有关错

2023-02-02 14:39:25

C89和C99标准有什么不同?

在 1990 年, ANSI C89 标准被国际标准化组织(ISO)和国际电工委员会(IEC)采纳为国际标准,名叫ISO/IEC 9899:1990 - Programming languages

2023-01-09 09:39:32

将curl使用的C语言标准从C89升级到C99

如果要升级 C 语言标准到 C99,那就要考虑哪些 C99 特性可以改进像 curl 这样的项目。Daniel 表示自己能想到的可能给 curl

2022-11-22 14:48:27

IDE是否兼容C99语法

目前在写屏幕,想用数组类 结构体 做表,但是发现该软件不兼容C99语法,报错:DescriptionResourcePathLocationTypeincompatible pointer

2022-09-12 19:39:11

教你一种关掉 c99 的正确方法

关掉—c99的正确方法好家伙,这个问题好多年了,还在!以前是在文件夹上,现在更下一层楼了,长到了文件的身上,这真是。。。长在皮上不好?非要长肉上?值得拉出来批判!关键代码在那个该死的spi文件夹

2022-06-30 16:35:52

C51的结构体初始化编译错误

8051的结构体初始化错误,我查了下这种初始化是C99可以支持的,但在option中设置没有C99模式选项,怎么破?

2020-03-25 02:37:12

如何将c99编译器与PSOC Creator一起用于PSOC 5LP部件?

这些步骤适用于ARMGC编译器。使用以下步骤将C99编码标准与PoSo5LP部分一起使用:1。打开要使用C99编码标准的项目增量器。2。右击项目名称。三。选择生成设置。4。在设置树中展开编译器节点

2019-07-15 11:30:46
7天热门专题 换一换
相关标签