打印不同结构的 char *desc 结构成员

时间:2021-03-11 08:14:49

标签: arrays c struct

我有一个完全不同的结构,只有一个公共成员 char *desc,我想打印它们:

#include <stdio.h>

struct foo {
    float foo;
    char *desc;
};

struct bar {
    int barint;
    char *desc;
};

int main(int argc, char *argv[]) {

    struct foo ff[] = {
        { 1.1, "desc foo 1"}, { 2.2, "desc foo 2"}, { }
    };

    struct bar bb[] = {
        {1, "desc bar 1"}, {2, "desc bar 2"}, {3, "desc bar 3"}, { }
    };

    const struct foo *f = ff;
    const struct bar *b = bb; 
    int i;

    for (i = 0; f[i].desc; i++)
        printf("f[%d].desc: '%s'\n", i, f[i].desc);

    for (i = 0; b[i].desc; i++)
        printf("b[%d].desc: '%s'\n", i, b[i].desc);

    return 0;
}
$ ./a.out
f[0].desc: 'desc foo 1'
f[1].desc: 'desc foo 2'
b[0].desc: 'desc bar 1'
b[1].desc: 'desc bar 2'
b[2].desc: 'desc bar 3'

我想要一个宏/函数,它可以将这些结构中的任何一个作为参数(可能不止这两个),并打印 desc 成员。

编辑:定义宏很容易:

#define PRINT_DESC(obj) do { \
    for (i = 0; obj[i].desc; i++) \
        printf("obj[%d].desc: '%s'\n", i, obj[i].desc); \
} while (0)

但我需要更通用的东西。我想将 const struct bar *bconst struct foo *f(或任何其他结构)分配给另一个内部库结构成员,然后进行打印通过这个库结构成员的库。该成员可能是 void *,但如何指定将该指针强制转换为哪个结构?

具体示例(抱歉,不是 MCVE):计划在 LTP 中使用它。

tst_test.h 中有 struct tst_test,我想在其中添加 void * 指向 struct 的指针,其大小与 int test_variants 成员相同。然后在 tst_run_tcases() 中循环打印特定成员的 *desc

for (tst_variant = 0; tst_variant < test_variants; tst_variant++) {
    if (tst_test->test_variants_desc)
        // TODO: print .desc for tst_test->test_variants_desc[tst_variant]

struct tst_test 在测试中定义,例如futex_wait02,其中 struct futex_test_variants 将被传递,因为它有 char *desc 成员(在 futextest.h 中定义)。

其他测试有不同的结构,这就是它不能指向 struct futex_test_variants 的原因。

0 个答案:

没有答案