新發(fā)基金的好處和壞處是什么?新基金的封閉期一般是多久?
新發(fā)基金的好處和壞處是什么?新發(fā)基金的優(yōu)點:1、認(rèn)購費率低:一般
2023/07/06
【資料圖】
簡單的宏定義我們都會用,比如獲取較小值:
#define MIN(a, b) ((a) < (b) ? (a) : (b))
但是,如果一個函數(shù)被封裝在了宏定義中,并且,還要在宏定義之外 獲取這個函數(shù)的返回值,應(yīng)當(dāng)如何做呢?
有兩種實現(xiàn)方法:
在宏定義中使用在宏定義之外預(yù)先定義的變量;利用宏定義的特殊格式——({x; y; z;})
。我們可以 預(yù)先定義一個變量,在宏定義函數(shù)中直接使用。
#include < stdio.h >#include < stdlib.h >#include < string.h >#include < stdint.h >#define MACRO_ADD(a, b) do { sum = add(a, b); }while(0)staticint32_t add(int32_t a, int32_t b){ return a + b;}int main(int argc, char *argv[]){ int32_t sum = 0; MACRO_ADD(1, 2); printf("sum:%dn", sum); return 0;}
這種方式最大的缺點就是 很不靈活,每次調(diào)用宏定義的時候都需要在宏定義之外定義一個固定類型,固定名稱的變量,就像上面代碼中的 int32_t sum = 0
。所以,我 推薦使用下面的方法。
#include < stdio.h >#include < stdlib.h >#include < stdint.h >#define MACRO_ADD_1(a, b) ({add(a, b);})#define MACRO_ADD_2(a, b) ({ int32_t _s = 0; _s = add(a, b); _s; })static int32_t add(int32_t a, int32_t b){ return a + b;}int main(int argc, char *argv[]){ int32_t sum = 0; sum = MACRO_ADD_1(1, 2); printf("sum 1:%dn", sum); sum = 0; sum = MACRO_ADD_2(1, 2); printf("sum 2:%dn", sum); return 0;}
這種方式就很完美了, 無需定義其余變量,直接調(diào)用宏定義即可。
#define xxx(a, b, c) ({x; y; z;})
格式的宏定義,最終返回的是 z
的執(zhí)行結(jié)果,z
可以是一個函數(shù),也可以是一個變量,就像上面代碼中的 MACRO_ADD_1()
和 MACRO_ADD_2()
;({x; y; z;})
中, (
、{
、 }
、)
一個都不能少。如果不確定被宏定義包裝后的函數(shù)是否被“翻譯”正確,可以生成預(yù)編譯文件來查看。
對于單文件來說,使用 gcc -E x.c -o x.c.i
即可生成 x.c對應(yīng)的預(yù)編譯文件 x.c.i。比如,對于上面的代碼,預(yù)編譯文件中的 main()
函數(shù)內(nèi)容如下:
如果工程的文件比較多的話,推薦使用[cmake:我這樣查看源碼的預(yù)編譯信息
Linux內(nèi)核源碼真有用。
標(biāo)簽: