printf() 和格式说明符链接
printf() and format specifier linking
我非常了解 printf() 和格式说明符的工作原理
注意:- 我正在使用 Turbo c/c++ 编译器,你知道 gcc、g++ 等要好得多,但问题仍然存在
代码:-
void main()
{
clrscr();
printf("%d %d %d");
getch();
}
输出:- 0 344 0
现在,
代码:-
void main()
{
clrscr();
printf("%f %f %f");
getch();
}
输出:- printf:浮点格式未 linked
程序异常终止。
现在,另请注意,我已经在大约 200 个系统上尝试过此方法。
问题:-我相信输出中显示的那些格式说明符数字不是垃圾,因为每个系统都会获得相同的结果,并且它们在 printf() 之间有一些 link通过文件处理或指针的函数和格式说明符。那么现在有人终于可以说出它可能是什么了吗?
注意:-结果可能从 IDE 到 IDE 不等,但对于每个系统上的编译器都是相同的,因为我也在代码块 IDE 上尝试过。
So can anyone now finally tell what it might be?
来自C11 Standard (draft) for the library function fprintf()
:
7.21.6.1/2
[...]
If there are insufficient arguments for the format, the behavior is
undefined.
代码调用未定义行为后任何事情都可能发生。
output:- printf : floating point formats not linked Abnormal program termination.
Turbo C 和 一些 编译器不 link 浮点支持,除非在用户代码中检测到浮点代码。 "%f %f %f"
需要 FP 支持才能工作,但编译器在 compile 时无法识别它。相反,程序在 运行 时间失败。
添加 FP 代码并消除其他误用 printf()
;
#include <stdio.h>
#include <math.h>
int main() {
clrscr();
double a = sqrt(2.0):
printf("%f %f %f\n",a,a,a);
getch();
}
我非常了解 printf() 和格式说明符的工作原理
注意:- 我正在使用 Turbo c/c++ 编译器,你知道 gcc、g++ 等要好得多,但问题仍然存在
代码:-
void main()
{
clrscr();
printf("%d %d %d");
getch();
}
输出:- 0 344 0
现在,
代码:-
void main()
{
clrscr();
printf("%f %f %f");
getch();
}
输出:- printf:浮点格式未 linked 程序异常终止。
现在,另请注意,我已经在大约 200 个系统上尝试过此方法。
问题:-我相信输出中显示的那些格式说明符数字不是垃圾,因为每个系统都会获得相同的结果,并且它们在 printf() 之间有一些 link通过文件处理或指针的函数和格式说明符。那么现在有人终于可以说出它可能是什么了吗?
注意:-结果可能从 IDE 到 IDE 不等,但对于每个系统上的编译器都是相同的,因为我也在代码块 IDE 上尝试过。
So can anyone now finally tell what it might be?
来自C11 Standard (draft) for the library function fprintf()
:
7.21.6.1/2
[...]
If there are insufficient arguments for the format, the behavior is undefined.
代码调用未定义行为后任何事情都可能发生。
output:- printf : floating point formats not linked Abnormal program termination.
Turbo C 和 一些 编译器不 link 浮点支持,除非在用户代码中检测到浮点代码。 "%f %f %f"
需要 FP 支持才能工作,但编译器在 compile 时无法识别它。相反,程序在 运行 时间失败。
添加 FP 代码并消除其他误用 printf()
;
#include <stdio.h>
#include <math.h>
int main() {
clrscr();
double a = sqrt(2.0):
printf("%f %f %f\n",a,a,a);
getch();
}