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标准
注意事项
- 变长数组(VLA)在栈上分配,大数组可能导致栈溢出
//注释在部分传统编译器(如VC6)不支持- 复合字面量是左值,其生命周期为当前作用域
- C99不支持C++风格的
//注释与变量混合声明(需保持C89兼容时避免)
如果需要特定功能示例或进一步解释,请说明具体方向!
rt-thread 在mdk5中使用v6编译器编译出错怎么解决?
cpuport.c... ArmClang: error: unsupported option \'--c99\' compiling i2c_core.
C语言指定初始化器解析及其应用
C90 标准要求初始化程序中的元素以固定的顺序出现,与要初始化的数组或结构体中的元素顺序相同。但是在新标准 C99 中,增加了一个新的特...
资料下载
佚名
2022-02-07 11:28:00
调用scons—dist报c99有关错误该怎样去解决呢?
keil5环境:v5.25工程:lts-v3.1.x分支,rt-thread\\bsp\\stm32\\stm32f103-fire-arbitrary路径下调用scons —dist 报c99有关错
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
教你一种关掉 c99 的正确方法
关掉—c99的正确方法好家伙,这个问题好多年了,还在!以前是在文件夹上,现在更下一层楼了,长到了文件的身上,这真是。。。长在皮上不好?非要长肉上?值得拉出来批判!关键代码在那个该死的spi文件夹
如何将c99编译器与PSOC Creator一起用于PSOC 5LP部件?
这些步骤适用于ARMGC编译器。使用以下步骤将C99编码标准与PoSo5LP部分一起使用:1。打开要使用C99编码标准的项目增量器。2。右击项目名称。三。选择生成设置。4。在设置树中展开编译器节点
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览