[英]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.