1

我不断收到:

error: called object is not a function or function pointer

当使用这样的三元运算符时:

puts("\nx: " (0 == 1) ? "y1\n" : "y2\n");


我究竟做错了什么?

4

4 回答 4

3

您试图调用一个既不是函数也不是函数指针的对象!特别是,编译器看到字符串后面的左括号并认为(就像编译器可以说“认为”一样)您正在尝试调用函数调用。您不能像尝试那样将字符串与三元运算符连接起来。尝试:

printf("\nx: %s", (0 == 1) ? "y1\n" : "y2\n");
于 2015-03-18T12:46:05.020 回答
2
puts("\nx: " (0 == 1) ? "y1\n" : "y2\n");

这不是做你想做的事情的正确方法,因为你不能像这样连接 C 字符串。

您可以使用以下方法执行此操作puts()

puts("\nx: ");
puts((0==1) ? "y1\n" : "y2\n");

编辑:(@WilliamPursell 建议

为避免附加不需要的换行符,请使用fputs()代替puts().

fputs("\nx: ");
fputs((0==1) ? "y1\n" : "y2\n");
于 2015-03-18T12:45:41.367 回答
1

您不能按照您的方式连接字符串。

简单的解决方案是使用 printf

printf("\nx: %s", (0 == 1) ? "y1\n" : "y2\n");

或者如果你坚持使用 puts 你需要来自 string.h 的 strcat 函数

char s[256] = "\nx: ";
puts(strcat(s, (0 == 1) ? "y1\n" : "y2\n"));
于 2015-03-18T12:46:32.377 回答
0

这是你的代码

"\nx: " (0 == 1) ? "y1\n" : "y2\n"
/*     ^ this is ignored        */

所以似乎字符串文字被作为函数调用 -> "\nx: "(0 == 1),不是这样吗?

printf()你可以用这样的功能实现你想要的

printf("\nx: %s\n", (0 == 1) ? "y1" : "y2");
于 2015-03-18T12:48:35.173 回答