学习C阶段成长的点滴

 

一.代码质量问题  "其中也包含有C++的代码规范 "  (多为摘录林锐博士 <<高质量的C++/C编程指南>>  在小卓看来 优秀的开始是从代码质量开始的 建议一起学习的兄弟们 可以试读一下这本书 )  

1.用 #include <stdio.h> 格式引用标准库的头文件(编译器将从标准库目录开始搜索)

        #include "stdio.h" 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)

目录结构

如果一个软件的头文件数目比较多(如超过十个), 通常应将头文件和定义文件分别保存于不同的目录,以便于维护

同时如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其"声明".为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录.

2.不提倡使用全局变量.

3.程序的版式  应该是追求 清晰 美观  是程序风格的重要构成因素

4.  空行起着分隔程序段落的作用.空行是我们敲代码时候的习惯 ,但是一定要明白不能多也不能少 空行得体不多不少, 会将程序的布局更加清晰  

5.

1.  一行代码只做一件事,如只定义一个变量, 或只写一条语句.  这样的代码容易阅读, 并且方便于写注释

2.if, for, while, do 等语句各自占一行, 执行语句不得紧跟在其后.  不论执行语句有多少都要加 {} .  防止书写失误. 

3.尽可能在定义变量的同时初始化该变量(就近原则) 

如果变量的引用处和其定义处相隔比较远, 变量的初始化很容易被忘记.如果引用了未被初始化的变量, 可能会导致程序错误.

6.代码行内的空格

1.关键字之后要留空格. 

2.函数名之后不要留空格 例子: void Func1( )      👈为推荐   void Func1 () 

3赋值 比较 算术 逻辑 .二元操作符前后应当加空格 

4.一元操作符如"!" , "~","++", "--" 等前后不加空格

5.像 "[ ]"  "-" "->" 这类操作符前后不加空格

6.对于表达式较长的 for语句 和 if语句,为了紧凑起见可以适当的去掉一些空格, 如 for (i=0; i<10; i++) 和 if ((a<=b) && (c<=d))

7.长行拆分

1.代码行最大长度宜控制在70至80个字符以内.代码行不要过长, 否则肉眼看不过来, 也不便于打印

2.长表达式要在低优先级操作符处拆分成新行, 操作符放在新行之首 (以便突出操作符). 拆分出的新行要进行适当的缩进, 使排版整齐, 语句可读.

8.修饰符的位置  

若将修饰符  *  靠近数据类型  例如  int* x; 从语义上讲此写法比较直观,即 x 是 int  类型的指针.

会引起误会的写法   例子: int* x, y;此处y容易被误解为指针变量.虽然将x和y分行可以避免误解,但是并不是都愿意这样做.

                最优写法  应当将修饰符 * 和  & 紧靠变量名

        例如:

                char  *name;

                int     *x,  y;  // 此处y不会被误解为指针

9. 注释

注释常用于:

(1) 版本,版权说明;

(2) 函数接口说明;

(3) 重要的代码行或段落提示.

虽然注释有助于理解代码, 但注意不可过多地使用注释. 

1.注释的花样要少.   同时  如果代码本来就是清楚的, 则不必加注释.否则多此一举, 令人厌烦.

2.边写代码边写注释, 修改代码同时 修改相应的注释, 以保证注释与代码的一致性. 不再有用的注释要删除

3.注释应当准确,易懂.

4.注释不提倡使用缩写

5.注释的位置应与被描述的代码相邻, 可以放在代码的上方或右方 ,不可以放在下方.

10.     C++中数据的书写 建议"以行为中心"的书写方式,即说先考虑类应该提供什么样的函数."这样做不仅让自己在设计类时思路清晰", 而且方便别人阅读.因为用户最关心的时接口,谁愿意先看到一堆私有数据成员

class A 
{ 
 public: 
void Func1(void); 
void Func2(void); 
… 
 private: 
int i, j; 
float x, y; 
 … 
}
 以行为为中心的版

11.标识符( 定义:标识符是程序员在程序中自定义的一些符号和名称。关键字是系统自带的,标识符是自定义的。如函数的名称等,用来区分各种事务。   ---------不能以数字开头,不可以使用关键字作为标识符, 多个单词建议使用驼峰标识(第二个字母的首字母大写)或者使用下划线链接)

https://www.cnblogs.com/wendingding/p/3674999.htmlhttps://www.cnblogs.com/wendingding/p/3674999.htmlhttps://www.cnblogs.com/wendingding/p/3674999.html

C语言关键字、标识符和注释 - 文顶顶 - 博客园https://www.cnblogs.com/wendingding/p/3674999.html

C语言关键字、标识符和注释 - 文顶顶 - 博客园https://www.cnblogs.com/wendingding/p/3674999.html

 关于标识符的认识这个链接就够了)

正文:1.切忌使用汉语拼音来命名.程序中的英文单词一般不会太复杂,用词应当准确.例子:不要把CurrentValue 写成 Now Value

2.标识符应符合 "min-length && max-information" 原则

3.程序中不要出现仅靠大小写区分相似的标识符.

如:
int x, X; // 变量 x 与 X 容易混淆 
void foo(int x); // 函数 foo 与 FOO 容易混淆 
void FOO(float x); 

4.程序中不要出现标识符完全相同的局部变量和全局变量,尽管二者的作用域不同而不会发生语法错误,但会使人误解.

5.尽量避免名字出现数字编号,如A1, A2等,除非逻辑上的确需要编号.这是为了防止产生无意义的名字

12.简单的Windows应用程序命名规则(林锐博士对"匈牙利"命名规则做了合理的简化,下述的命名规则简单易用,比较适合于Windows应用软件的开发)

1.类名和函数名用于大写字母开头的单词组合而成.

例如:
 class Node; // 类名 
 class LeafNode; // 类名 
 void Draw(void); // 函数名 
 void SetValue(int value); // 函数名 

2.常量全用大写的字母,用下划线分割单词.

:
 const int MAX = 100; 
 const int MAX_LENGTH = 100; 

3.静态变量加前缀s_(表示static).

例子:

void Init(…) 
{ 
 static int s_initValue; // 静态变量
 … 
} 

4.如果不得已需要全局变量,则使全局变量加前缀g_(表示global).

例子:

int g_howManyPeople; // 全局变量
int g_howMuchMoney; // 全局变量

13.运算符优先级

如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级,同时也是为了产生歧义并提高可读性,应当用括号确定操作顺序.


if ((a | b) && (a & c)) 

14.for 循环语句中 应该将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数. 

例子: 代码为保持原文的优质性 是复制的代码所以 可能不太美观 此处仅仅表达效率问题 不为高质量考虑

例如示例 4-4(b)的效率比示例
4-4(a)的高。 
 
for (row=0; row<100; row++) 
{ 
for ( col=0; col<5; col++ ) 
{ 
sum = sum + a[row][col]; 
} 




} 
for (col=0; col<5; col++ ) 
{ 
for (row=0; row<100; row++) 
{ 
 sum = sum + a[row][col]; 
} 
} 
示例 4-4(a) 低效率:长循环在最外层 示例 4-4(b) 高效率:长循环在最内层

建议for语句的循环控制变量的取值采用"半开半闭区间"写法.

	for (int x=0; x<N; x++)   //这种写法为更优  因为这种写法更为直观 
	{
		
	}
	
	for (int x=0; x<=N-1; x++)
	{
		
	}

switch中 不要忘记break 和 default  这并非多此一举,而是为了防止别人误以为你忘了default处理

摘录截至到第五章常量部分 之后陆续补充

第二. 掉过的坑

向右对齐

%4d输出不足时空格补充 同时 向右对齐   超过4列时就原样输出  

做题注意

做题发现逻辑错误 一定一定一定要再多读几遍题  一个字一个字的去读 不要一目十行切记

属于结果以0开头

输出以0开头的结果   例如 0001  :  printf("%04d", x);  这样就可以实现了

 辗转相除法求公约数:

     核心代码 : c = a%b;

                       while (c!=0)

                        {

                                a = b;

                                b = c;

                                c = a%b;

                        }

                        此时b为最大公约数

  递归函数

在函数内调用自己叫递归调用,也叫递归函数

 栗子:  long Fact (int n)

{

        if (n < 0)

       {

          return  -1;

      }

        else if (n=0 || n=1)

        {

                return 1;

        }

        else

        {

                return n*Fact(n-1);

        }

}

  mian的报错

(13条消息) 出现undefined reference to 'WinMain@16'的可能情况_Chuck的博客-CSDN博客https://blog.csdn.net/chuck_0430/article/details/8824762来自大佬对报错(undefined reference to 'WinMain@16'的可能情况)的神预判     

动态变量与静态变量(待补充)

动态变量:

{

 定义在某函数中,即局部变量 平时没有用关键字修饰,默认的也就是动态变量(存储空间是在此函数体执行完成后释放)

定义在全局时,即全局变量(整个程序均可使用,可以适用于每个函数体,虽然每个函数体结束,存储空间也随之释放)

}

静态变量(statc修饰):

{

       定义在某函数中,即局部静态变量 (存储空间也是随着此函数执行完,不会随之释放内存.同时这些变量也不会消失,每次调用此函数,变量值不变)

        定义在全局时,即全局变量(整个程序结束后才被释放,生命周期也是从程序执行道程序退出)

}

\0是空字符,ASCII码值为0,用在字符串中作为结束标志

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ActiViz是一个基于C#的开源数据可视化库,它提供了一系列用于创建和呈现2D和3D图形的功能。如果你想学习ActiViz,以下是一些学习点滴: 1. 理解ActiViz的基本概念:开始学习之前,了解ActiViz的基本概念是很重要的。了解ActiViz的工作原理、主要组件和使用方式,可以帮助你更好地理解和应用它。 2. 安装和配置ActiViz:在开始使用ActiViz之前,你需要将其安装到你的开发环境。阅读官方文档或教程,按照指示进行安装和配置。 3. 学习ActiViz的API:ActiViz提供了丰富的API,用于创建和操作图形对象。学习这些API的用法和功能,可以帮助你更好地使用ActiViz来实现你的需求。 4. 创建基本图形对象:开始学习ActiViz时,从创建一些基本的图形对象开始是一个不错的选择。尝试创建点、线、多边形等基本图形对象,并学习如何对它们进行操作和渲染。 5. 了解数据可视化技术:ActiViz最常用的用途之一是数据可视化。学习如何使用ActiViz来可视化不同类型的数据,如二维数据、三维数据、图像数据等,可以帮助你更好地应用ActiViz来分析和展示数据。 6. 阅读官方文档和示例代码:ActiViz有详细的官方文档和示例代码,可以帮助你更深入地了解和使用ActiViz。阅读官方文档和运行示例代码,可以帮助你学习一些高级功能和技巧。 7. 参与开源社区:ActiViz是一个开源项目,有一个活跃的社区。参与到ActiViz的开发和讨论,可以帮助你与其他开发者交流和学习,同时也可以为ActiViz的发展做出贡献。 希望这些学习点滴对你有帮助!祝你学***

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值