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

9 c types declaration function qualifiers

在C中,

  1. 是类型限定符如const,volatile, restrict,和 _Atomic的表达式的类型的一部分?

    例如

    const int x = 3;
    
    Run Code Online (Sandbox Code Playgroud)

    哪种类型x,const intint

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

Vla*_*cow 9

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

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

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

void f( const int );
void f( int );
Run Code Online (Sandbox Code Playgroud)

来自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 );
}
Run Code Online (Sandbox Code Playgroud)

它的输出是

The argument is 10
Run Code Online (Sandbox Code Playgroud)

但是请注意,函数的定义可以取决于其参数是使用限定符声明const还是不使用限定符声明.