类型限定符是表达式类型的一部分吗?

时间:2017-08-17 19:02:17

标签: c function types declaration qualifiers

在C中,

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

    例如

    const int x = 3;
    

    xconst intint的类型是什么?

  2. 函数的类型是否包含其类型的限定符 参数Δ

1 个答案:

答案 0 :(得分:9)

在C标准中有书面(6.2.5类型)

  

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

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

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

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

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

这是一个示范程序

#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声明还是没有它。