我有一些ALSA驱动程序代码,其中有许多行必须在两种音频配置之间进行更改:L/R立体声和单声道,但我希望有一个开关来选择L/R模式还是单声道模式我目前有两个文件,一个用于L/R,一个用于mono,但缺点是两个文件必须用相同的更新来维护最好把所有的东西都放在一个文件中,因为两者之间有很多相似之处。
例如:
L/R立体声:
regmap_read(WM88->regmapL, addr, &val_l);
regmap_read(WM88->regmapR, addr, &val_r);
pr_info("%s: reg 0x%02X, val_l 0x%02X, val_r 0x%02X\n",
__func__, addr, val_l, val_r);
单声道:
regmap_read(WM88->regmapL, addr, &val_l);
pr_info("%s: reg 0x%02X, val_l 0x%02X\n",
__func__, addr, val_l);
一种选择是有一堆ifdef-endif块,但是看起来很难看有更好的办法吗它不必是宏,但我认为这可能是最好的方法。
最佳答案
既然你指定了C:
将每个配置的代码放入单独的子例程中。
创建一个函数指针数组(在本例中有两个元素,一个用于立体声,一个用于单声道)把它命名为“功能区”
使用当前选定的配置创建数组的整数偏移量(0或1)把它命名为“ConfigurationIndex”
在主调用中,函数数组[ConfigurationIndex]给出的函数。
这基本上是一个花哨的“if”语句,但它允许您添加任意多个不同的选项。