2013年3月12日
要点记录:
1.C与C++哪一个更好?
取决于所面向的用户,C++可以自动做大量的事情,如变量自动调用构造函数和析构函数,但同时也使得静态检查变得困难
2.Ubuntu下如何编译C程序
g++ hello.cc -o hello
./hello
说明:hello.cc为程序的源代码
hello为输出的文件
3.获取Unix帮助
man subject(subject 为要查询的函数)
4.C程序中代码主题部分一般会有如下语句
return 0;
词段代码表示如果程序正常退出,则返回Status=0
非0的Status表明程序有错误,返回的值越大,说明错误越严重
5.代码调试时日志“null effect”的警告信息,表明代码中存在编写正确但是没有起作用的语句
6.代码
#include<stdio.h>
main()
{
float a;
a=1/3;
printf("a =%f",a);
}
代码输出结果为0.0000,与真正的值存在较大差异,这涉及到除法运算,1/3,由于1和3都为int型数据,所以先进行整数的除法,输出结果为0,然后在进行类型转换,变为float
型数据0.0000,输出,如果想要输出正确的值,应该写为:
a=1.0/3.0;
这样就能输出正确的结果了。这在涉及到整数和浮点数的混合运算时尤其需要注意
至此已看到第四章,在这四章中,真正对未毕业或者刚刚毕业的coder们有价值的是第三章,对编码风格的讲解,后续会考虑单独写一篇BLOG对编码规范进行一定的讲解
2012年3月19日
1.数组的声明“int data_list[3];"声明了一个含有3个int型的数组data_list,但是在进行赋值时需要注意的是不能写成“data_list[3]=3;”这是因为C语言中数组的编号是从0开始,这点尤其要注意
2.char name[40];
int main()
{
name = "Sam";
return 0;
}
上面的对字符串赋值的方法是错误的,C语言中不允许把一个数组赋值给另外一个数组,可以通过以下两种方法实现:
a)char name[40]="Sam";
b)strcp(name,"Sam");
3.strcat(String1,String2); 含义是将字符串String2连接到字符串String1的后面
4.fgets(name,sizeof(name),stdin); 从键盘读取字符串的方法,fgets默认包括结束行“\n”的字符串,因此使用strlen来对有fgets输入的字符串的大小时,比实际字符串长度+1
5.C语言对数组的维数没有限制
6. 默认为带 符号类型(signed):
short int 16位
ing 16/32位
long int 32位
7. 默认类型signed/unsigned有编译器决定:
char 8位
8. float 32位
double 64位
9.const float PI=3.1415927;
常量必须在初始定义时就对其进行赋值,且在后续的使用中不要进行更改
10.C语言中涉及到自加的运算符++x和x++,在实际编程过程中建议使用++x,同时为了避免在编程时出现问题并且保持简单(KISS原则,Keep It Simple,Stupid),最好将这种自加自减语句单独放在一行
11.避免使用strcmp函数进行字符串的比较
12.switch语句的基本语法:
switch(表达式){
case 常量1:
语句
...
break;
case 常量2:
语句
...
break;
case 常量3:
语句
...
break;
default:
break;
}
switch语句中最好加上default语句,即使这个语句不是必须的,也最好加上词条语句
至此已看到第八章,在这次看的几章中,真正对未毕业或者刚刚毕业的coder们有价值的是第七章,主要讲的是实际工作中程序设计过程的几个步骤,有助于帮助快速适应coder的工作
2013年3月20日
1.预编译的文件主要包括命名的常量、宏和引用文件,预处理器在对其进行编译时指令到其行末就结束了,不像C语言中以分号来表示一段语句的结束,可以在行末加\来表明预编译处理的这一行尚未结束
2.#define MAX 10 正确
#define MAX = 10 错误
3.#include "**.h" 中的.h文件所在目录可以是相对路径,也可以是绝对路径,但是推荐使用相对路径,这是因为绝对路径可移植性较差
4.包含文件可以存在一定的嵌套,这一特性在使用上时可能会存在一定的问题,例如,假设data.h和io.h中都包含const.h,当把data.h和io.h放到同一个文件中时,就有可能会产生错误,为了避免出现错误,一般会在代码中加入一定的保护,如
#ifndef _CONST_H_INCLUDE_
#def _CONST_H_INCLUDE_
#endif
5.带参数的宏:
#define SQR(x) ((x)*(x))
需要注意的是宏名SQR与"("之间不能有空格,而且宏的参数必须有括号,否则计算结果会出错,例如
#include <stdio.h>
#define SQR(x) (x*x)
int main(){
int a=3;
printf("%d",SQR(a+1));
}
他的输出结果为3+1*3+1=7,而不是我们所预想的16
6.在使用宏时宏中的参数最好不要含有++或--等运算符
7.位运算内容比较简单,只是需要注意">>",但符号位右移后填充的为与“符号位”相同的值