只是好奇。想象一下,我需要一个#define A
它是n个数的和,这n个数有一个明确的含义,但只是为了A
的计算,为了提高可读性,而不是写n个宏或只是写#define A <result_of_the_sum>
.
有没有一种方法,我可以限制这n个#define
指令的范围,只是a的定义?就像在C语言中一样:
int a = 0;
{
int b = 1;
int c = 2;
int d = 3;
a = b + c + d;
} // end of b,c,d scope.
我的意图是在编译时定义A
,但没有定义用于计算A
的其他n
定义,因为这些只会有助于更好地理解代码。
编辑:
假设我有这些宏:
#define MEANINGFUL_NUMBER_1 1
#define MEANINGFUL_NUMBER_2 2
#define MEANINGFUL_NUMBER_3 3
我有一个宏,A
是它们的总和,我喜欢有人读我的代码来理解a的值,而不仅仅是看到它直接定义,即#define A (MEANINGFUL_NUMBER_1 + ... + MEANINGFUL_NUMBER_N)
,这样在编译前只有a被替换,而MEANINGUL_NUMBER_*
没有。
是否有方法在C中操作预处理器定义作用域
号
是否有一种方法可以将这些n# define指令的范围限制为只定义a ?
号
注意,宏在使用时会对求值。这意味着在使用宏时,所有内容都必须是可见的。您可以在所有用法之后#undef
所有宏,从而"限制范围"。
在C中,没有命名空间。在C语言中使用前缀。你可以这样做:
#define LIB_PRIV_B 1
#define LIB_PRIV_C 2
#define LIB_PRIV_D 3
#define LIB_A (LIB_PRIV_B + LIB_PRIV_C + LIB_PRIV_D)
如果你真的不希望这些数字泄漏到C语言中,那么使用一些东西来生成C源代码,这也给了你更多的权力给预处理器端。使用jinja2, m4, php或python,并配置你的构建系统来正确处理生成依赖。