繁体   English   中英

如何在C编程中打开没有名称冲突的嵌套结构?

[英]How to open nested structure without name clash in C programming?

我想以这种方式直接打开一个结构并使用成员名称:

typedef struct{
    int n;
    int m;
    int *A;
    int *B;
    type1 *slave;
} type2;

#define n this->n
#define m this->m
#define A this->A
#define B this->B

void routine2(type2 *this){
    n = slave->n;
    m = n + 1;
    A = (int *)malloc(n * sizeof(int));
}

大多数情况下,它工作得很好,我的代码很容易阅读。 但是,上面的代码无法编译,因为slave->n将由预处理器扩展为slave->this->n 我正在寻找有关如何克服这一困难的建议。 根据我的理解,如果上面的结构是一个类,那么C ++允许用户这样做,而routine2()是一个成员函数。 我怎样才能在C中实现同样的目标?

选一个:

  • 不要那样做。 这是对C宏系统的滥用,这种风格是非常不寻常的,你会疏远任何试图理解你的代码的人。

  • 使用C ++。 如果您发现C ++为例如成员访问提供的语法糖是那么引人注目的,那么只需用C ++编写代码即可。

  1. 做这样的事情是一个非常非常危险的想法。 它几乎可以保证很难找到错误。
  2. 如果你坚持,一个明显的方法是引入唯一的名称,例如struct tm do - 一切都以tm_前缀开头。 或者为capital_letter名称引入例如CAPITAL_LETTER宏。 但它可能不是你想要的。

暂无
暂无

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

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