我已经阅读了stdio.h
个函数,需要做一些小的澄清。
请花一点时间简要解释以下内容:
1) tmpnam()
:它只为我们提供了一个包含唯一文件名的字符串,但是如何处理文件扩展名呢?我们会不会每次使用strcat()
将文件扩展名添加到文件名?
2) rand()
:以下rand()
(取自cplusplusreference
)的上下文中含义如何?:
“在C中,rand使用的生成算法保证只有 通过调用此函数来提升“
我检查过它,一个接一个地为同一个种子重复调用rand()
,但它没有给出增加值!
3) getc()
: 粗体中的部分在以下{{1的参数说明>中的含义是什么意思取自同一网站(getc())?
“---参数
指向标识输入的FILE对象的指针 流。
因为某些库可能会将此函数实现为宏,并且这可能会多次评估流表达式,这应该是 没有副作用的表达。“
答案 0 :(得分:1)
rand()
返回的数字序列只会受到rand()
函数本身的调用的影响:无论您在调用rand()
之间执行什么操作,都会获得相同的输出。也就是说,只有通过调用rand()
才能提升基础功能。这并不意味着产出总是在增加。这意味着getc()
可能是一个评估其参数两次的宏。您为什么不尝试找出此代码可能带来的结果:
int i = 0;
(void)getc((++i,stdin));
printf("%d\n", i);
以下是专门针对getc()
使用宏的实现示例:AIX docs。如果我没记错的话,如果你没有将正确的指针传递给fileno
和dirfd
,那么你在AIX上也会遇到麻烦。看起来OpenSolaris也是这样定义的,虽然我没有副本(glibc,FreeBSD,不使用宏)。
#define getc(p) (--(p)->_cnt>=0? ((int)*(p)->_ptr++):_filbuf(p))