本章通过若干简单的代码片段,让我对C语言编程有大体上的认识.
"编写C语言程序,首先需要编写程序文本,然后成功的进行编译,并加载,运行,最后输出到某个地方." -- 需要意识到C程序存在这些重要环节.
选择了软件:Turbo C/C++ For Windows 集成实验与学习环境 作为windows下学习用代码运行环境.
保险起见windows7下安装时,按照软件说明,指定了setup.exe在xpsp3兼容模式下运行安装.
这个集成学习环境,屏蔽了手动的编译,运行等环节.作为本章遗留的问题.
问题1.1:如何在linux下,使用文本编译器编写c程序,并编译运行.
>>>1.1
下面是第一段代码:
#include "stdio.h"
main()
{
printf("hello, world");
}
这段代码的若干细节:
1.#include指令 不需要分号结束
2.main是程序入口,main之前不需要函数返回类型声明
3.printf语句必须要以分号结束
4.字符串用双引号括起
相关问题:
问题1.2:#include是引入标准库的方式,是否同样引入自定义库,是否有其他引入方式?
问题1.3:c文件一般以.c结尾,这是必须的么?.h结尾的头文件和.c结尾的文件有什么区别?
问题1.4:include引入stdio.h之后,printf等函数即可直接使用,如何知道引入的库占用了哪些函数名?如果遇到同意函数名多次定义,如何处理?如何避免命名和名称空间冲突.
>>>1.2
接下来的代码要点:
1.所有变量需要事先声明.
2.int,float,char,short,long,double这些类型的长度都和具体机器有关.
3.整数除法操作将会舍位.引入较大的计算误差.
printf("%d\t%d\n",fahr,celsius);
printf("%3.0f\t%6.1f\n",fahr,celsius)
这个语句可以看出:
1.printf函数接收可变个参数.
2.打印字符串模板,%d为整数占位符.%f为浮点数占位符,%6.1f为打印指定宽度和小数点后位数.
3.注意\t,\n这类转义符号
4.某个算术运算涉及浮点数和整数,整数会转为浮点数参与计算.
问题1.5:C语言如何开发支持可变参数的函数?
>>>1.3
在允许使用某种类型变量值的任何场合,都可以使用该类型的更复杂的表达式.
>>>1.4
#define 把符号名(符号常量),定义为一个特定的字符串.注意是字符串,运行时执行的是文本替换.注意全部字母都要是用大写,#define指令末尾没有分号.
问题1.6:符号常量的文本替换是否在编译阶段进行?
问题1.7:如何定义一个字符串常量?
>>>1.5
EOF(end of file)是一个定义在stdio.h的符号常量,不必关心具体值是什么,重要的是EOF不等于任何char值.
赋值结合次序是由右至左,语句nl = nw = nc = 0;等价于nl = (nw = (nc = 0));
>>>1.6
数组声明语句 int arr[10];
问题1.8:数组声明时是否必须指定长度?
>>>1.7
函数需要函数声明和函数原型.函数声明类似接口定义,没有函数体.
问题1.9:函数声明是否必要?
>>>1.8
一般情况下,函数参数时传值而非传引用,如果需要传引用则需要传对象的指针.另外数组传递的是第一个元素的地址.
问题1.10:如何传指针?
>>>1.9
数组为参数的函数声明:void copy(char to[], char from[]);
因为from[]为指定长度,所以copy内容需要约定一个字符串结束标志,表示以后的数组内容没有实际意义.书中是\0.
问题1.11:数组初始化未赋值时,数组各元素的值是什么?
>>>1.10
通过extern关键字,声明需要使用的外部变量.但是变量如果在extern之前定义,那可以省略.
如果程序存在于多个文件,则必须使用extern.
通常将变量和函数extern语句放在头文件中,然后通过#include指令引入进来.printf不用extern.因为已经在stdio.h内声明.
问题1.12:C程序中,多个文件如何协作?
问题1.13:C程序编译过程是否有几次解析,编译过程怎样?为什么在函数之上的全局变量不需要extern就可以使用,而之下的不行.
问题1.14:定义(define)表示创建变量,声明(declaration)表示说明变量性质,不分配存储单元.是指函数声明和函数定义这类关系么?
>>>总结
这一章对C做了大概的介绍,大致了解了C的基本语法.遗留了14个问题,需要后续解决.
浙公网安备 33010602011771号