由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C语言程序静态库和动态库的创建及其应用
相关主题
open an image filec的问题
请教Matlab和IDL的处理数据能力差异C 中的typedef 一问
c语言如何pass变量的值问大家一个C语言编程的小问题
New C++ programmer, need to ask a I/O file read question求助: 有人用Analyze的程序包做图像处理的吗?
c++产生随机数怎样能把go写的稍微漂亮一点?
FILE*的问题go几天的一些感受
[合集] Why it only write the file once?在main()里面创建了几个线程,如何等待所有线程都结束?
帮忙看看这几段程序有问题吗?Valgrind报uninitialized value was created by a heap allocat (转载)
相关话题的讨论汇总
话题: fileid话题: null话题: 写入话题: goto话题: char
进入Programming版参与讨论
1 (共1页)
J*******3
发帖数: 1651
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
l*******9
发帖数: 177
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;

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

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

m*****e
发帖数: 4193
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.

B******e
发帖数: 48
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.

g*****g
发帖数: 34805
7
多重循环里面直接往最外层跳用goto很清晰。

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

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

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

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

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

1 (共1页)
进入Programming版参与讨论
相关主题
Valgrind报uninitialized value was created by a heap allocat (转载)c++产生随机数
这个结果是啥,为什么呢?FILE*的问题
help with PHP programming!!! (转载)[合集] Why it only write the file once?
fprintf in C\C++帮忙看看这几段程序有问题吗?
open an image filec的问题
请教Matlab和IDL的处理数据能力差异C 中的typedef 一问
c语言如何pass变量的值问大家一个C语言编程的小问题
New C++ programmer, need to ask a I/O file read question求助: 有人用Analyze的程序包做图像处理的吗?
相关话题的讨论汇总
话题: fileid话题: null话题: 写入话题: goto话题: char