我只是想知道我是否可以做這樣的事情......我可以在ANSI C的一行中返回一個初始化的結構嗎?
typedef struct Result{
int low, high, sum;
} Result;
Result test(){
return {.low = 0, .high = 100, .sum = 150};
}
我知道這是錯誤的方式,但我能做到這一點還是我需要創建一個局部變量來接收值,然後把它返還?
我只是想知道我是否可以做這樣的事情......我可以在ANSI C的一行中返回一個初始化的結構嗎?
typedef struct Result{
int low, high, sum;
} Result;
Result test(){
return {.low = 0, .high = 100, .sum = 150};
}
我知道這是錯誤的方式,但我能做到這一點還是我需要創建一個局部變量來接收值,然後把它返還?
您可以通過使用複合文字這樣做:
Result test(void)
{
return (Result) {.low = 0, .high = 100, .sum = 150};
}
(){}
是複合文字運營商和複合文字是C99引入的一個功能。
struct Result
{
int low;
int high;
int sum;
};
then to create an instance of the struct
struct Result myResult;
Regarding your question...
prototype for the test function
void test(struct Result *myResult);
invoke the function by:
test(&myResult);
the test function:
void test(struct Result *argResult)
{
argResult->low = 0;
argResult->high = 100;
argResult->sum = 150;
}
Typedef'ing結構折舊?另外,'test(struct Result&myResult)' - 從什麼時候這成爲用C語言「調用函數」的一種方式? – AnT 2014-09-07 14:43:57
你的權利,我會改變行來調用函數 – user3629249 2015-11-14 07:15:29
我找不到原始引用typedef結構被折舊,所以我刪除了該語句 – user3629249 2015-11-14 07:23:53
該方法導致ram被編譯器分配來保存一個'Result'結構體,其中字段最初被複制到,然後再次被複制到'結果'結構體的調用者實例。這兩個副本和Result結構的分配是真正的RAM和CPU週期浪費。 – user3629249 2014-09-07 14:19:19
@ user3629249:但這些可以進行優化,並且是ABI特定的。在Linux/x86-64上,兩個字段的'struct'通常在兩個寄存器中返回。 – 2014-09-07 14:40:49