當我嘗試按原樣運行此代碼時,收到編譯器消息「error:incompatible types in return」。我在代碼中標記了錯誤的位置。如果我把這條線出來,那麼編譯器很高興。從結構函數返回不兼容的類型 - C
問題是我想返回一個值表示無效輸入到函數(在這種情況下調用f2(2)。)我只想要一個結構返回的數據,如果函數調用時不使用2作爲參數。
我覺得只有兩條路走是要麼:
使函數返回一個結構指針,而不是死的結構,但隨後我調用函數看起來有趣,因爲我必須改變yb到y-> b,並且由於在存儲器中獲取數據的額外步驟,操作可能會更慢。
分配額外內存,零字節填充它,並將返回值設置爲內存中該位置的結構。 (例如:
return x[nnn];
而不是return x[0];
)。這種方法將使用更多的內存和一些處理來填充零字節。
最終,我正在尋找一種解決方案,從長遠來看,它將是最快和最乾淨的(在代碼方面)。如果我必須堅持使用->
來解決元素的成員,那麼我想這是要走的路。
有沒有人有一個解決方案,使用最少的CPU功率?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
long a;
char b;
}ab;
static char dat[500];
ab f2(int set){
ab* x=(ab*)dat;
if (set==2){return NULL;}
if (set==1){
x->a=1;
x->b='1';
x++;
x->a=2;
x->b='2';
x=(ab*)dat;
}
return x[0];
}
int main(){
ab y;
y=f2(1);
printf("%c",y.b);
y.b='D';
y=f2(0);
printf("%c",y.b);
return 0;
}
什麼是標量成員?從物理學的角度來說,我知道標量是一個只有量值而不是方向的值。編程中的標量是什麼? –
細節在ABI中給出。但是'int','double'和'char *'都是標量類型 –