奇思妙想 · 2024年 3月 29日 0

C语言是如何区分开%f和%lf的?

52 次浏览

区分开它们是实现在libc. 具体到scanf函数执行时,libc会检查格式串是否包含%符号,如果有,继续从已知的格式串中枚举,发现单个f,就把输入当成float类型大小(一般为4字节),发现是lf组合,就把输入当成double类型大小(一般8字节)。需要注意,libc是将输入的数值写入到4字节或8字节的参数地址里面。有时,需要注意传入参数的大小,避免这种行为造成越界。

但在printf输出时,libc又会将%f和%lf统一用double类型输出,前提是编译器默认先把float类型参数先转换成double, 达成统一输出的目的。