【问题标题】:Are type qualifiers part of the type of an expression?类型限定符是表达式类型的一部分吗?
【发布时间】:2018-01-26 08:10:48
【问题描述】:

在 C 中,

  1. 是类型限定符,例如 constvolatilerestrict_Atomic 表达式类型的一部分?

    例如

    const int x = 3;
    

    xconst intint的类型是什么?

  2. 函数的类型是否包括其类型限定符 参数?

【问题讨论】:

    标签: c function types declaration qualifiers


    【解决方案1】:

    在 C 标准中有写(6.2.5 类型)

    26 到目前为止提到的任何类型都是非限定类型。每个不合格 type 有几个其类型的合格版本,47) 对应于 const、volatile 和 限制限定词。 类型的合格或不合格版本 是属于同一类型类别的不同类型,并且具有 相同的表示和对齐要求....

    但是根据函数参数例如这两个声明声明相同的一个函数

    void f( const int );
    void f( int );
    

    来自 C 标准(6.7.6.3 函数声明符(包括原型))

    1. ...(在确定类型兼容性和复合类型时, 用函数或数组类型声明的每个参数都被视为 具有调整后的类型和 每个参数声明为合格 类型被视为具有其声明的非限定版本 输入。)

    这是一个演示程序

    #include <stdio.h>
    
    void f( const int );
    
    int main(void) 
    {
        int x = 10;
    
        f( x );
    
        return 0;
    }
    
    void f( int x )
    {
        printf( "The argument is %d\n", x );
    }
    

    它的输出是

    The argument is 10
    

    请注意,函数的定义可能取决于是否使用限定符 const 声明其参数。

    【讨论】:

    • 谢谢。您在哪里找到“根据函数参数例如这两个声明声明相同的一个函数”?是什么原因?
    • 为了帮助我理解这一点,我记得函数参数是通过值而不是通过引用传递的,因此参数上的限定符适用于函数看到的值的副本——而不是调用者中值的来源。
    • 等等……哦,好吧,我读错了。我想我会放弃我的评论,因为它具有误导性。
    猜你喜欢
    • 1970-01-01
    • 2019-10-30
    • 2015-07-07
    • 2018-06-29
    • 2011-04-21
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多