是否有一种方法可以在c中操作预处理器定义作用域?



只是好奇。想象一下,我需要一个#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,并配置你的构建系统来正确处理生成依赖。

相关内容

  • 没有找到相关文章

最新更新