如何获取除两元组的最后一个元素之外的元素?

时间:2012-06-27 22:26:23

标签: c tuples

在C中,当我制作任何n元组并尝试使用它时,我只能使用它的最后一个元素。即使是类型显然是元组的最后一个元素而不是元组本身。我怎样才能获得除最后一个元素之外的元素?我仔细查看了规范并没有看到它。

示例:

#include <stdio.h>

int f() {return 2;}
char* g() {return "dudebro";}

int main() {
    printf("%d\n", (f(),g(),3)); /* Should print the address of the tuple (unless it's by-value, in which case it should be a compile error) but prints the last element?*/
    return 0;
}

运行它:

$ gcc -ansi -pedantic -Wall -Wextra tt.c -o tt
$ ./tt
3

2 个答案:

答案 0 :(得分:5)

C中没有元组这样的东西。你有comma operator的用法。

如果要在C中整理相关数据,则需要定义和使用结构。如果要打印出所有数据项,则需要为每个数据项显式调用printf(或使用多个格式说明符)。

e.g。

typedef struct Foo {
    int a;
    char *b;
};

Foo foo;
foo.a = 5;
foo.b = "hello";

printf("%d %s\n", foo.a, foo.b);

答案 1 :(得分:2)

当你在这样的逗号中放入一堆值时,C将丢弃所有值,但最右边的值。它将评估F和G,但然后忽略它们。我不确定你为什么认为应该发生的事情应该发生。