标量变量 c语言,Scalar initialization(标量类型初始化)

初始化标量类型的对象时,初始化程序必须是单个表达式。

标量的初始化器(包括布尔值和枚举类型的整数类型对象,包括复数和虚数的浮点类型以及包含指向函数的指针类型)必须是单个表达式,可以使用大括号括起来:

= expression(1)= {  expression }(2)

对表达式进行评估,并且其转换后的值(如同通过分配给对象的类型一样)将成为初始化对象的初始值。

注意

由于适用于转换的规则就像通过赋值一样,所以在确定将表达式转换为哪种类型时,将忽略声明类型的const和volatile限定符。

请参阅不使用初始化程序时适用的规则的初始化。

与所有其他初始化一样,在初始化静态或线程局部存储持续时间的对象时,expression必须是常量表达式。

表达式不能是逗号运算符(除非用括号括起来),因为顶层的逗号将被解释为下一个声明符的开始。

当初始化浮点类型的对象时,具有自动存储持续时间的对象的所有计算都将执行为 - 如果在执行时并且受当前舍入影响; 按照math_errhandling中的指定报告浮点错误。对于静态和线程局部存储持续时间的对象,如果在编译时计算完成,并且不会引发异常:

void f(void){#pragma STDC FENV_ACCESS ON    static float v = 1.1e75; // does not raise exceptions: static init

float u[] = { 1.1e75 }; // raises FE_INEXACT

float w = 1.1e75;       // raises FE_INEXACT

double x = 1.1e75; // may raise FE_INEXACT (depends on FLT_EVAL_METHOD)

float y = 1.1e75f; // may raise FE_INEXACT (depends on FLT_EVAL_METHOD)

long double z = 1.1e75; // does not raise exceptions (conversion is exact)}

#include int main(void){

bool b = true;    const double d = 3.14;

int k = 3.15; // conversion from double to int

int n = {12}, // optional braces       *p = &n,   // non-constant expression OK for automatic variable       (*fp)(void) = main;    enum {RED, BLUE} e = RED; // enumerations are scalar types as well}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值