Tag: 编码风格

检查大量返回值时的好c风格

有时候我必须编写代码来处理事务和检查错误条件(例如,调用库函数,检查其返回值,继续)。 这通常导致长期运行,其中实际工作发生在if语句的条件下,例如 if(! (data = (big_struct *) malloc(sizeof(*data)))){ //report allocation error } else if(init_big_struct(data)){ //handle initialization error } else … 你们是怎么写这种代码的? 我查了几个样式指南,但他们似乎更关心变量命名和空格。 风格指南的链接欢迎。 编辑:如果不清楚,我不满意这种风格的易读性,并寻找更好的东西。

在退出时关闭文件描述符是一个好习惯

如果由于某种原因,我发现程序中有致命的情况,我想退出错误代码。 有时,致命错误的上下文超出了其他文件描述符的范围。 关闭这些文件描述符是一个好习惯。 据我所知,这些文件会在进程终止时自动关闭。

单行if语句或if语句没有括号不好的做法?

if (condition) { /* do something */ } else { /* do something */ } if (condition) /* do something */ else /* do something */ 我被告知第一次不是一个好主意。 我不知道这是否真的是这种情况(或者对于第二种情况); 它不会缩短打字数量吗? 或者是因为它只是弄得一团糟?

C中的三重指针:这是风格问题吗?

我觉得C中的三分指针被视为“坏”。 对我来说,有时使用它们是有道理的。 从基础开始, 单指针有两个目的:创建数组,并允许函数更改其内容(通过引用传递): char *a; a = malloc… 要么 void foo (char *c); //means I’m going to modify the parameter in foo. { *c = ‘f’; } char a; foo(&a); 双指针可以是2D数组(或数组数组,因为每个“列”或“行”不需要是相同的长度)。 我个人喜欢在需要传递一维数组时使用它: void foo (char **c); //means I’m going to modify the elements of an array in foo. { (*c)[0] = ‘f’; } char […]

如何使用纯C优雅地实现不同类型版本的一系列function?

我想写几个只在参数类型上有所不同的函数。 我知道C ++有很好的template可以很好地处理这个问题(虽然不是很好,但很少有编译器支持export关键字,并且查询此关键字的效率)。 举个简单的例子,我想: template T add(T a, T b){ return a+b; } 但是,在纯C中(有时我必须选择纯C,因为某些平台没有C ++编译器),不同版本的函数名称必须不同,如 double addDouble(double a, double b){ return a+b; } int addInt(int a, int b){ return a+b; } 嗯,当有两个版本时,我可以在源文件中进行复制和粘贴工作; 但是,实际上会有很多行而不是函数中的return语句,而且会有更多的版本。 那么,我的问题是,如何优雅地实现不同类型版本的一系列function? 到目前为止,我已经尝试了一些解决方案,但我认为它们远非好。 我需要你的建议,谢谢! 解决方案1: #define mytype int mytype addInt(mytype a, mytype b){ return a+b; } #undef mytype #define mytype float mytype addFloat(mytype […]

纯C(非C ++)的编码标准

我来自java背景(来自我的CS课程)和一个学期的C ++。 我刚刚为我的Co-Op完成了一个纯C的OpenCV项目,所以我提问这个问题有点晚了。 纯C的设计流程和编码标准是什么? 我熟悉面向对象的编程,设计和最佳实践。 我只是在像C这样的非面向对象语言上有点茫然。每个变量和函数似乎都是全局的。 它让我感觉真的很乱。

返回(a)与返回a

我已经看过我一直在看的C和C ++代码。 有什么不同?

定义类型的顺序

对于将变量定义为static和long/double或其他类型的顺序,是否有任何首选项/约定/规则? 例如是 static double a; 与…一样 double static a; function有什么不同吗? 以上,a是可变的。

C的编码样式检查器

我正在为一家公司工作,该公司有严格的编码风格指导,但没有自动工具来validation它们。 我环顾四周,我能找到的唯一工具是lint之类的工具,似乎旨在validation代码的作用,防止错误而不是确保编码风格是正确的。 我们应该使用什么工具,如果有的话? 注意:我正在寻找C代码的东西,尽管适用于C ++的东西也会很好。

指针和数组在结构中使用零元素之间的区别

两种实现有何不同: struct queue { int a; int b; q_info *array; }; 和 struct queue { int a; int b; q_info array[0]; };