c语言 常量表达式,Constant expressions(常量表达)

几种表达式被称为常量表达式。

预处理器常量表达式

#if 或 #elif 后面的表达式必须扩展为。

除赋值,增量,减量,函数调用或逗号之外的其他操作符,其参数是预处理常量表达式

整数常量

字符常量

特殊的预处理器操作员 defined

当在#if表达式中计算字符常量时,可以在源字符集,执行字符集或其他一些实现定义的字符集中解释字符常量。

Integer arithmetic in #if-expressions is performed using the semantics of intmax_t for signed types and uintmax_t for unsigned types.(since C99)

整数常量表达式

一个整型常量表达式是表达式。

除赋值,递增,递减,函数调用或逗号以外的其他操作符,除了转换操作符只能将算术类型转换为整数类型

整数常量

枚举常量

字符常量

浮点型常量,但前提是它们立即用作转换为整数类型的操作数

操作数不是VLA的操作符的大小(自C99起)

_Alignof operators(since C11)

_Alignof operators

(since C11)

整数常量表达式在编译时进行评估。以下上下文需要称为整型常量表达式的表达式':

位字段的大小。

枚举常量的值

caseswitch语句的标签

非VLA(自C99以来)阵列的大小

整数指针隐式转换。

The index in an array designator(since C99)

数组指示符中的索引

(since C99)

The first argument of _Static_assert   The integer argument of _Alignas(since C11)

第一个论点 _Static_assert

整数参数 _Alignas

(since C11)

静态初始化器

在具有 static 和 thread_local 存储持续时间的对象的初始化器中使用的表达式必须是可能是以下某个表达式的表达式。

1)算术常数表达式,它是由任意算术类型组成的表达式

除赋值,增量,减量,函数调用或逗号以外的其他操作符,除了转换操作符必须将算术类型转换为其他算术类型

整数常量

浮点常量

枚举常量

字符常量

操作数不是VLA的操作符的大小(自C99起)

_Alignof operators(since C11)

_Alignof 操作符

(since C11)

2)空指针常量 NULL

3)地址常量表达式,这是

一个空指针

左值指定一个静态存储持续时间的对象或一个函数指示符,并转换为指针通过使用一元地址运算符

通过将一个整型常量转换为一个指针

通过数组到指针或函数到指针的隐式转换

4)地址常量表达一些完整的对象类型,加或减一个整型常量表达式

与整型常量表达式不同,静态初始化表达式不需要在编译时进行评估; 编译器可以自由地将这些初始化程序转换为在程序启动之前调用的可执行代码。

static int i = 2 || 1 / 0; // initializes i to value 1

浮点静态初始化器的值永远不会比在运行时执行的相同表达式的值精确,但它可能会更好。

浮点常量表达式

在静态初始化器中未使用的浮点类型的算术常量表达式总是在运行时期间评估为 - 如果受到当前四舍五入的影响(如果 FENV_ACCESS处于打开状态)并报告 math_errhandling 中指定的错误。

void f(void){#pragma STDC FENV_ACCESS ON    static float x = 0.0/0.0; // static initializer: does not raise an exception

float w[] = { 0.0/0.0 }; // raises an exception

float y = 0.0/0.0; // raises an exception

double z = 0.0/0.0; // raises an exception}

注意

如果一个表达式的计算结果不能用它的类型表示,那么它就不能用作常量表达式。

参考

C11 standard (ISO/IEC 9899:2011):6.6 Constant expressions (p: 106-107)

C99 standard (ISO/IEC 9899:1999):6.6 Constant expressions (p: 95-96)

C89/C90 standard (ISO/IEC 9899:1990):3.4 CONSTANT EXPRESSIONS

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值