以下代码编译时没有问题:

int main() {
    printf("Hi" "Bye");
}

然而,这并不能编译:

int main() {
    int test = 0;
    printf("Hi" (test ? "Bye" : "Goodbye"));
}

这是什么原因呢?

推荐答案

根据C标准(5.1.1.2翻译阶段)

1翻译语法规则的优先顺序由

  1. 相邻的字符串文字标记被连接起来.

只有在那之后

  1. 分隔标记的空白字符不再重要.每个

在这个建筑中

"Hi" (test ? "Bye" : "Goodbye")

没有相邻的字符串文字标记.所以这个 struct 是无效的.

C++相关问答推荐

为什么这个select()会阻止?

想了解 struct 指针和空指针转换

C strlen on char array

Mise()在虚拟内存中做什么?

Ebpf内核代码:permission denied:invalid access to map value

如何创建由符号组成的垂直结果图形?

具有交换链获取和命令缓冲区提交的同步-危险-读后写错误

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

C代码在字符串中删除不区分大小写的子字符串的问题

当b是无符号字符时,int a=(b<;<;2)>;>;2;和int a=b&;0x3F;之间有什么区别?

链接到底是如何工作的,我在这里到底做错了什么

按长度对argv中的单词进行排序

将回调/基于事件的C API转换为非回调API

如何对现有的双向循环链表进行排序?

从CentOS 7到Raspberry PI 2B的交叉编译-无法让LIBC和System Include标头一起工作

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

free后内存泄漏?

变量的指针右对齐,函数的指针左对齐

如何向 execl 创建的后台程序提供输入?

我怎样才能用c语言正常运行这两个进程?