询问C23中#embed嵌入文件后sizeof file的结论正确性
C语言#embed与sizeof相关问题解答
你的结论是正确的,具体分析如下:
sizeof file是编译时常量
根据C23标准,#embed指令会把指定文件的字节内容作为数组的初始化器,用[]声明的数组会由初始化器的长度自动确定大小,属于完整类型。对于完整类型的数组,sizeof的结果是编译期可计算的常量,完全符合C语言中常量表达式的要求,所以能用来定义copy数组的大小。sizeof file等于嵌入文件的实际大小
#embed会原封不动地嵌入文件的所有字节(包括二进制数据、换行符等),数组file的大小恰好是嵌入文件的字节总数,不会额外添加终止字符(除非文件本身包含),因此sizeof file的值就是文件的实际大小。
另外你提到用GCC 13和Clang 18编译失败,是因为这两个版本默认没开启C23标准支持,需要手动添加编译选项:
- GCC编译时加
-std=c23或-std=gnu23(带GNU扩展) - Clang编译时同样加
-std=c23或-std=gnu23
示例编译命令:
gcc -std=c23 your_code.c -o output
或者
clang -std=c23 your_code.c -o output
内容的提问来源于stack exchange,提问作者Madagascar
相关产品推荐
相关产品推荐

