[英]Does a function prototype convert your actual parameters in C?
如果你读过任何功能的Linux手册页和原型使用关键字像static
或restrict
任何形式参数,不C编译器自动转换您的变种,如果该类型仍然匹配?
例如:
函数原型: int function_name(int* restrict param1, static int param2);
程序:
int *my_var1;
int my_var2;
//initialization
(..)
function_name(my_var1, my_var2);
(..)
请问function_name()
转换或者把我的变量,如他们与申报restrict
和static
在每种情况下,由于该类型仍然是一样的吗?
一个int
参数不能为static
,没有任何意义。 请提供实际的实际示例,以确保我们在谈论同样的事情。
当涉及restrict
,它用来表示受其restrict
的指针是指向该特定对象的唯一指针(或多或少,我正在简化)。 因此,谈论将指针“转换”为restrict
是没有意义的,限定符是否真正适用取决于指针的使用方式。
通常,在可能的情况下,将转换参数以匹配函数期望的参数。
首先, int function_name(int* restrict param1, static int param2);
是无效的。 在gcc 8.3下编译时,您会收到以下错误:
<source>:1:52: error: storage class specified for parameter 'param2'
int function_name(int* restrict param1, static int param2);
转换就像是通过分配
...
在函数调用表达式中,对于具有原型的函数,每个参数表达式的值都将转换为相应参数的非限定声明类型的类型
...
指向非限定类型的指针可以隐式转换为指向该类型的限定版本的指针(换句话说,可以添加const,volatile和strict限定符。原始指针和结果比较相等)。
您可以转换一个int*
类型:
int *p;
进入volatile const int * restrict volatile const
:
volatile const int * restrict volatile const other_p = p;
没有任何错误。
由于类型仍然相同,function_name()是否会像在变量和约束中声明的那样对我的变量进行转换或处理?
是。 变量被“隐式转换”为功能参数列表中的类型。 它们将被视为在函数内部声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.