在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
答案 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,但然后忽略它们。我不确定你为什么认为应该发生的事情应该发生。