当前位置:网站首页>C专家编程 第1章 C:穿越时空的迷雾 1.6 它很棒,但它符合标准吗
C专家编程 第1章 C:穿越时空的迷雾 1.6 它很棒,但它符合标准吗
2022-08-03 16:09:00 【weixin_客子光阴】
什么东西能被语言接受,什么东西不能被语言接受。前两个术语涉及不可移植的代码
(unportable code)
不可移植的代码(uportable code)
由编译器定义的(implementation-defined):由编译器设计者决定采取何种行动(就是说,
在不同的编译器中所采取的行为可能并不相同,但它们都是正确的),并做好了文档记录。
例如,当整型向右移位时,要不要扩展符号位。
未确定的(unspecified):在某些正确的情况下,标准并未规定应该怎样做。
例如,参数求值的顺序。
不可移植的代码(unportable code)
unportable code:implementation-defined(由编译器定义的)
例如,当整数向右移位时,要不要扩展符号位
未确定的(unspecified):在某些正确的情况下的做法,标准并未明确规定怎样做。
例如,参数求值的顺序
坏代码(bad code)
未定义的(undefined):在某些不正确的情况下的做法,标准并未规定应该怎样做。
例如,当一个有符号整数溢出时应该采取什么行动。
约束条件(a constraint):这是一个必须遵守的限制或要求。如果不遵守,那么你的
程序的行为就是上面说的未定义的行为。
标准规定:编译器只有在违反语法规则和约束条件的情况下才能产生错误信息。
例如,%操作符要求操作数必须属于整数
不属于约束条件规则的例子:所有在c语言标准头文件中声明的标识符均保留
flyback transformer 回扫变压器
可移植的代码(portable code)
严格遵循标准的(strictly-conforming):一个严格遵循标准的程序应该具有如下特点:
*只使用已确定的特性
*不突破任何由编译器实现的限制
*不产生任何依赖由编译器定义的或未确定的或未定义的特性的输出。
这样的规定的主要目的就是最大限度地保证可移植性。这样,不论在什么平台上运行严格标准的程序,都会产生相同的输出。
/*不是严格遵循标准的程序*/
#include<limits.h>
#include<stdio.h>
int main() {
(void)printf("biggest int is %d", INT_MAX); return 0;
}
/*并不严格遵循标准,其输出结果使用编译器定义的*/
/*为了保证可移植性,在现实代码中,应该始终加上必要的类型转换,返回值等*/
/*遵循标准的(conforming):一个遵循标准的程序可以依赖某种编译器特有的不可移植的特性*/
/* 输出:
*/
边栏推荐
猜你喜欢
随机推荐
[Deep Learning] Today's bug (August 2)
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01
使用 PowerShell 将 Windows 转发事件导入 SQL Server
When mobile applications go overseas, is your "network optimization" holding back?
leetcode:189. 轮转数组
Analysis of ffplay video playback principle
opencv 读取和写入路径有汉字的处理方法
Introduction to spark learning - 1
GTK实现旋转加载动画
【翻译】关于扩容一个百万级别用户系统的六个课程
基于DMS的数仓智能运维服务,知多少?
#夏日挑战赛# HarmonyOS 实现一个绘画板
mysql delete execution error: You can't specify target table 'doctor_info' for update in FROM clause
leetcode:202. 快乐数
Some optional strategies and usage scenarios for PWA application Service Worker caching
基于DMS的数仓智能运维服务,知多少?
为教育插上数字化的翅膀,网易云信发布「互联网+教育」整体解决方案
攻防世界----bug
CPU个数_核心数_线程数之间的关系
Yuan xiaolin: Volvo focus on travel security, and put it perfectly