【发布时间】:2021-07-18 19:12:17
【问题描述】:
我最近在阅读 C prime plus 并且有一个问题:
void foo1(int n, char ar[n])
{
int i = 0;
while ((ar[i] = getchar()) && !isblank(ar[i++]) && i < n)
continue;
}
void foo2(int n, char ar[n])
{
int i = 0;
do
ar[i] = getchar();
while (!isblank(ar[i++]) && i < n);
}
似乎它们在测试时具有相同的输出,但我仍然想知道:
这两个函数是等价的吗?
在编译时,它们是否生成相同的编译代码?
如果不是,哪个更高效?
【问题讨论】:
-
提示:如果文件包含空字符怎么办?
-
请注意,如果出现文件结尾或读取错误,两个版本都会出现异常。
-
您需要空终止输出吗?调用代码如何知道读取了多少个字符?
-
此外,它们都会导致负字符的未定义行为(
isblank的参数必须是非负数)
标签: c while-loop do-while