在C宏的&符号

时间:2012-01-07 14:28:34

标签: macros c-preprocessor

2347 #define F_GFX3D(f, s, m, n) \
2348         { \
2349                 .freq_hz = f, \
2350                 .src_clk = &s##_clk.c, \
2351                 .md_val = MD4(4, m, 0, n), \
2352                 .ns_val = NS_MND_BANKED4(18, 14, n, m, 3, 0, s##_to_mm_mux), \
2353                 .ctl_val = CC_BANKED(9, 6, n), \
2354                 .mnd_en_mask = (BIT(8) | BIT(5)) * !!(n), \
2355         }
2356 static struct clk_freq_tbl clk_tbl_gfx3d[] = {
2357         F_GFX3D(        0, gnd,  0,  0),
2358         F_GFX3D( 27000000, pxo,  0,  0),
2359         F_GFX3D( 48000000, pll8, 1,  8),
2360         F_GFX3D( 54857000, pll8, 1,  7),
2361         F_GFX3D( 64000000, pll8, 1,  6),
2362         F_GFX3D( 76800000, pll8, 1,  5),
2363         F_GFX3D( 96000000, pll8, 1,  4),
2364         F_GFX3D(128000000, pll8, 1,  3),
2365         F_GFX3D(145455000, pll2, 2, 11),
2366         F_GFX3D(160000000, pll2, 1,  5),
2367         F_GFX3D(177778000, pll2, 2,  9),
2368         F_GFX3D(200000000, pll2, 1,  4),
2369         F_GFX3D(228571000, pll2, 2,  7),
2370         F_GFX3D(266667000, pll2, 1,  3),
2371         F_GFX3D(320000000, pll2, 2,  5),
2372         F_END
2373 };
2374 

我试图了解F_GFX3D宏的作用,但是&符号在宏中意味着什么?是否与在变量前放置&符号相同?

2 个答案:

答案 0 :(得分:4)

在宏的上下文中并不意味着什么特别。

与往常一样,预处理器将宏主体复制并粘贴到实例化的任何位置(除了替换宏参数和##等)。

答案 1 :(得分:2)

宏由预处理器处理; &将不会被触及,因此最终代码将会显示为像这样:&gnd_clk.c