Tag: 编码风格

#include 与C ++程序中的#include

在C ++程序中包含前者而不是后者需要考虑哪些因素? 我总是包括math.h , stdlib.h和从不cmath , cstdlib等我不明白后者甚至存在的原因,有人可以请赐教吗?

你应该在头文件中包含源代码吗?

我正在努力将一些源代码移植到linux系统,正如预期的那样,一些东西被打破了。 有一件事就是给我一个错误,就是有人有一个.h和一个.cpp文件都使用fclose() 编译器抱怨fclose()在头文件中未声明。 这是头文件中的函数声明: void closeFile() { if (fp) fclose(fp); } 现在,我认为这是一种糟糕的风格,但是 – 他们之前是如何做到这一点的呢? 他们的编译器版本是否允许这种行为? 我应该通过在标题中包含stdio来修复此问题,还是将整个内容移动到cpp?

C中主要function的样式

可能重复: 什么是主要的适当声明? 我正在研究我的C技能,我注意到了这一点 int main(int argc,char * argv []) 和 返回(EXIT_SUCCESS) 代替 int main()并返回0 为什么是这样?

使用逗号来防止需要支撑对

有时,当我有一个多案例if或非常简单for只有两个陈述时,我会放弃大括号,而不是使用逗号。 这是对该function的糟糕利用,是不是丑陋和糟糕的forms? 或者这是节省时间和空间的可接受方式? 例如: if (something) b = y, c = z–; 代替: if (something) { b = y; c = z–; }

有没有直接返回结构是好的做法?

IMO所有直接返回结构的代码都可以修改为返回指向结构的指针。 何时直接返回结构是一种好习惯?

将const指针定义为const字符串

乌尔里希·德雷珀(Ulrich Drepper)的醉酒,看到了两个看似令人困惑的参赛作品。 在第一个 (全局空间中的字符串)中,Ulrich声明该字符串应定义为: const char _pcre_ucp_names[] = “blabla”; 虽然已经在第二个 (函数中的字符串),他认为它应该声明为: static const char _pcre_ucp_names[] = “blabla”; 你能解释什么是更好的名称来解析一个字符串? UDP: 首先,我删除了C ++标记 – 这个问题对C和C ++都有效。 所以我不认为解释类/函数/文件范围中静态意义相关的答案。 在回答之前阅读文章。 文章涉及内存使用 – 存储实际数据的位置(在.rodata或.data部分中),应该重新定位字符串(如果我们讨论的是unix / linux共享对象),是否可以更改字符串与否。 UDP2在第一个中,它表示对于全局变量的forms: (1) const char *a = “…”; 不太好 (2) const char a[] = “…” 为什么? 我一直认为(1)更好,因为(2)实际上复制了我们分配它的字符串,而(1)只指向我们分配的字符串。

在C中对struct数组进行部分初始化时会发生什么?

这段代码是什么意思? struct foo_t { int a; int b; } foo[10] = {{0,0}} foo [0]是{0,0} ,但其余的呢? C标准如何处理这个问题? 添加。 我在这里找到了一个详尽的答案。 我想我的问题应该删除。

为什么使用常量被认为比使用文字更好的编程风格?

为什么使用常量被认为比使用文字更好的编程风格? 先验优于后者的确切优势是什么?

为什么某些函数声明extern和头文件不包含在Git源代码的源代码中?

我想看看真实世界应用程序的源代码,以了解良好的编程实践等。所以我选择了Git并下载了1.8.4版本的源代码。 在随机浏览各种文件之后,我在这两个文件中引起了我的注意: strbuf.h strbuf.c 这两个文件显然使用此文档定义了API。 我有两个问题: 为什么第16,17,18,19行的函数声明和’strbuf.h’第6行的全局变量声明为extern? 为什么“strbuf.h”在strbuf .c中不是#included? 我作为新手程序员总是学会在.c文件中编写函数定义,而函数声明,宏,内联等都写在.h文件中,然后在每个.c文件中都包含#includedfunction等 有人可以解释一下吗?

应该什么时候C函数返回新分配的内存?

在其他地方的回复中,我找到了以下代码段: 一般来说,让C调用者分配内存而不是被调用者更好 – 因此在我看来strcpy是一个“更好”的函数,而不是strdup。 我可以看到这是一个有效的模式,但为什么它会被认为更好? 遵循这种模式是否有优势? 或不? 例 最近我写了大量的代码看起来像: struct foo *a = foo_create(); // do something with a foo_destroy(a); 如果foo不仅仅是一个扁平结构,那么我想我可以将所有初始化完成一步。 另外,假设结构应该在堆上。 为什么这样做会更好: struct foo *a = malloc(sizeof(foo)); foo_init(a); // do something with a foo_destroy(a)