被调用对象不是使用三元的函数或函数指针
called object is not a function or function pointer in use of ternary
我不断收到:
error: called object is not a function or function pointer
像这样使用三元运算符时:
puts("\nx: " (0 == 1) ? "y1\n" : "y2\n");
我做错了什么?
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");
您试图调用一个既不是函数也不是函数指针的对象!特别是,编译器看到字符串后的开放括号,并认为(就像编译器可以说 "think" 一样)您正在尝试调用函数调用。您不能像您尝试的那样将字符串与三元运算符连接起来。尝试:
printf("\nx: %s", (0 == 1) ? "y1\n" : "y2\n");
您不能按照您的方式连接字符串。
简单的解决方案是使用 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"));
这是您的代码
"\nx: " (0 == 1) ? "y1\n" : "y2\n"
/* ^ this is ignored */
所以看起来好像字符串文字被作为函数调用 -> "\nx: "(0 == 1)
,它看起来像吗?
你可以用这样的printf()
函数实现你想要的
printf("\nx: %s\n", (0 == 1) ? "y1" : "y2");
我不断收到:
error: called object is not a function or function pointer
像这样使用三元运算符时:
puts("\nx: " (0 == 1) ? "y1\n" : "y2\n");
我做错了什么?
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");
您试图调用一个既不是函数也不是函数指针的对象!特别是,编译器看到字符串后的开放括号,并认为(就像编译器可以说 "think" 一样)您正在尝试调用函数调用。您不能像您尝试的那样将字符串与三元运算符连接起来。尝试:
printf("\nx: %s", (0 == 1) ? "y1\n" : "y2\n");
您不能按照您的方式连接字符串。
简单的解决方案是使用 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"));
这是您的代码
"\nx: " (0 == 1) ? "y1\n" : "y2\n"
/* ^ this is ignored */
所以看起来好像字符串文字被作为函数调用 -> "\nx: "(0 == 1)
,它看起来像吗?
你可以用这样的printf()
函数实现你想要的
printf("\nx: %s\n", (0 == 1) ? "y1" : "y2");