被叫对象不是使用三元的函数或函数指针

时间:2015-03-18 12:38:23

标签: c io ternary-operator puts

我经常收到:

error: called object is not a function or function pointer

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

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


我做错了什么?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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");

答案 2 :(得分: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"));

答案 3 :(得分:0)

这是你的代码

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

所以好像字符串文字被称为函数 - > "\nx: "(0 == 1),看起来不是这样吗?

您可以使用printf()功能实现您想要的功能

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