Redian新闻
>
C语言程序静态库和动态库的创建及其应用
avatar
C语言程序静态库和动态库的创建及其应用# Programming - 葵花宝典
J*3
1
在用c写程序时,很多时候需要存储一些简单的数据,如果为此而用mysql数据库就有些
大才小用了,可以把这些数据以结构的形写入文件,然后再需要时读取文件,取出数据。
如下是定义函数的源文件和头文件:
源文件struct.c:
#include "struct.h"
//第一个参数是要写入的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,
第四个参数是打开文件流的形态,返回TRUE表示写入成功,返回FALSE表示写入失败
int writeStruct(const char *fileName,char *buffer,int bufferLen,char *mode){
int ret;
FILE *fileID = NULL;
fileID = fopen(fileName,mode);
if (fileID == NULL){
perror("fopen");
goto writeEnd;
}
rewind(fileID);
ret = fwrite(buffer,bufferLen,1,fi
avatar
l*9
2
这c code 的logic写得也太差了吧!

据。
){

【在 J*******3 的大作中提到】
: 在用c写程序时,很多时候需要存储一些简单的数据,如果为此而用mysql数据库就有些
: 大才小用了,可以把这些数据以结构的形写入文件,然后再需要时读取文件,取出数据。
: 如下是定义函数的源文件和头文件:
: 源文件struct.c:
: #include "struct.h"
: //第一个参数是要写入的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,
: 第四个参数是打开文件流的形态,返回TRUE表示写入成功,返回FALSE表示写入失败
: int writeStruct(const char *fileName,char *buffer,int bufferLen,char *mode){
: int ret;
: FILE *fileID = NULL;

avatar
t*t
3
这是啥咪东东?
avatar
g*l
4
我很多年没有看见用 go to的了. 特别是C里面的,只有教科书里面提到过这种用法. 从
来没有看见真正的程序里面用 go to.

【在 l*******9 的大作中提到】
: 这c code 的logic写得也太差了吧!
:
: 据。
: ){

avatar
m*e
5
Really, I only see textbooks recommend not to use it, and real projects use
it quite commonly.

【在 g***l 的大作中提到】
: 我很多年没有看见用 go to的了. 特别是C里面的,只有教科书里面提到过这种用法. 从
: 来没有看见真正的程序里面用 go to.

avatar
B*e
6
其实production code里面用得是很多的。当然不是指乱goto,而是达到以下几个目的:
1. 每个函数单一的出口(函数尾部)
2. 每个函数单一的cleanup,这样在出错处理时,集中处理能很好地避免内存泄漏等问题
3. 逻辑简单,不容易出现if大规模地嵌套,也不需要一些状态变量来从两重以上的循
环中退出
4. 代码易维护。多加一段代码一般不会影响以前代码的执行。
举个例子, 以上这几点都体现在下面的代码里。虽略显繁琐,但确实是我非常喜欢的一
种结构。
int ReadDataFromFile(char** ppbuf)
{
int ret = 0;
char* pbuf = NULL;
FILE* fp = NULL;
assert(ppbuf);
*ppbuf = NULL;
if (!(fp=fopen(...))) {
ret = -1;
goto cleanup;
}
if (!(pbuf=malloc(...))) {
ret = -1;
goto cleanup;

【在 g***l 的大作中提到】
: 我很多年没有看见用 go to的了. 特别是C里面的,只有教科书里面提到过这种用法. 从
: 来没有看见真正的程序里面用 go to.

avatar
g*g
7
多重循环里面直接往最外层跳用goto很清晰。

【在 g***l 的大作中提到】
: 我很多年没有看见用 go to的了. 特别是C里面的,只有教科书里面提到过这种用法. 从
: 来没有看见真正的程序里面用 go to.

avatar
D*s
8
错误处理还是用得到的,不过可读性差,能不用还是不用的好。

【在 g***l 的大作中提到】
: 我很多年没有看见用 go to的了. 特别是C里面的,只有教科书里面提到过这种用法. 从
: 来没有看见真正的程序里面用 go to.

avatar
bz
9
这个就有点young and naive的意思了。。。。实际上goto用的非常多,尽管理论上
goto是可以被替代的。

【在 g***l 的大作中提到】
: 我很多年没有看见用 go to的了. 特别是C里面的,只有教科书里面提到过这种用法. 从
: 来没有看见真正的程序里面用 go to.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。