繁体   English   中英

C 中的特殊 #define 选项

[英]Special #define option in C

我有一个结构 A 使得 A 具有字段 v0 和 v1。 有一个 A 的数组:

A St[3];

我想这样定义 B :

#define B[x] St[x].v0 

我无法插入 x 作为要定义的参数。 有没有办法在C中做到这一点? 我的目的是能够用 B[x] 替换 St[x].v0 的每个实例。

替代参数的宏称为类函数宏,C 标准仅提供使用括号而非方括号的类函数宏。

您可以使用以下方法:

#define B(x) St[x].v0 

根据该C基准中,把定义#define

#define <identifier>[( parameters, ... )] [replacement-list]

您不得在<identifier>使用方括号(请参阅C99 标准),因此预处理器将无法正确处理您建议的解决方案。

什么会起作用的是

#define B(x) St[x].v0 // note the brackets

您将在其中向宏传递附加参数(使用括号)。 但是,这会混淆您的代码,并且很可能会使您的代码的用户/读者感到困惑。 另请参阅为什么要小心使用宏

你可以有

#define B(x) St[x].v0

ant 然后用B(x)替换St[x].v0每个实例。

恐怕用[]是不可能的,为此您需要运算符重载(如 C++ 中的重载)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM