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");

または、プットの使用を主張する場合は、string.h の strcat 関数が必要です。

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