我正在实现perror()相当于我正在使用的API.
perror()ISO C标准doc说:
perror()函数不得更改标准错误流的方向.
但以编程方式,它意味着什么?
我现在正在使用fprintf(stderr, .. ).用它是个错误吗?如果是真的,为什么?如果我的实施中有一些错误(见下文),请给我点.
根据我的解释查看我的C代码:
void
fooapi_perror(const char *s)
{
char *emsg;
if(s != NULL && *s != '\0')
fprintf(stderr, "%s: ", s);
emsg = fooapi_strerror(GetLastErrorCode());
fprintf(stderr, "%s\n", emsg);
free(emsg);
}
Run Code Online (Sandbox Code Playgroud)
每个C流都有一个属性 - "方向"或"面向宽"或"面向字节",这是由对该蒸汽的第一次操作决定的.当流没有"方向"时,可以改变蒸汽的方向.调用任何方向与流方向冲突的函数会导致未定义的行为.
例如,printf将使蒸汽变为字节导向,而wprintf导致蒸汽变为宽向.
就你的问题而言,perror不应改变其流的方向.
所以在你的代码中,如果perror使用的流已经有了一个方向,你应该确保你没有调用一个方向与流的当前方向冲突的函数.
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |