当前位置:编程学习 > C/C++ >>

求C语言入门详细讲解?

简单上手,有注释,并且要详细,我是初学者,要让我能看懂~~

补充:要求函数那详细讲解下,不怎么懂~
答案:x=f(2);这就是函数 x值为2

int f(int);

main()

{

printf("%d\n",f(3)); 结果为9

}

int f(int n);

}

return n+n+n; //3+3+3 ,return是关键字,意思返回本函数f;

}

//程序是从上到边扫描边执行printf("%d",f(3),当扫描的f()时,由于当前已经声明int f(int)是函数了,所以调出主函数,找到f()函数,f函数开始执行 ,当CPU扫描的return 关键字时就调出f()函数 边返回 int类型的值。为什么是int 因为先已经声明了int f(int) 函数定义为int了,所以就有一个int返回值。接着找到上次跳出main()函数的地址,继续执行后面9); 加上前面的就是printf("%d",9)输出为9。

其实很简单#include"stdio.h"这个就是printf()函数;

输出的,你可以自定义为如 #include"sum.c" //该函数处理求和;自己设一个add()具体我不细说。看下面:

main()

{

printf("%d",add(3,5)); 结果为8;

}

高中数学函数学懂后应付编程问题完全小问题~~快点学习哦!

C语言现在因为其可读性,移植性,效率较高等特点越来越受到欢迎,但是还有一些人因为不了解C里面的一些操作,而坚持用汇编,所以有必要介绍一下在嵌入式C编程的一些技巧.


在汇编里面位造作用 SEI PORTA 3,把PORTA的第三位置1 ,
在C里面,可以用&与|表达:
PORTA=PORTA|0x08, 简写为PORTA|=(0x08);
PORTA=PORTB&(0xF7) 简写为PORTA&=0xF7

以上是对寄存器的某一位操作,当然也可以同时操作几个位, |0x0F ,则低四位置1;



在很多地方,如ATMEL的文档里我们会看到像TCCR1A|=(1<<COM1A0);//A比较匹配,

这样的操作,这是怎么回事呢?

首先要知道<< ,>>的意思,这是左移,右移操作,(A<<3)是把A的二进制数向左移3位,即乘以2的三次方.

COM1A0是TCCR1A的第6位,这是ATMEL给TCCR1A寄存器第6位取的名字, 在ICCAVR编译器的头文件iom16v.h里可以找到这样的定义"#define OCR1A0 6" ,所以TCCR1A|=(1<<OCR1A0)的意思是把TCCR1A寄存器的第6位置1, 如果TCCR1A|=(1<<OCR1A0)|(1<<WGM10),那么WGM10同时也被置1;

而TCCR1A&=~(1<<OCR1A0)把第6位清零. 之所以我们要这样写而不写作TCCR1A|=0x40我想一是便于记忆,只记每一位的名字,不记在哪位,这样不容易错,便于对照DATAsheet检查程序.此外还更好移植,从一个系列的一个单片机到另一个单片机,只要控制某功能的位的名字不变,例如OCR1A0不管在哪个位置,此语句都实现OCR1A0置一的功能.

以上是某一个或几个位置一或清零操作,当然可以直接赋值,例如PORTA=0X0F,则是把低四位置1,高四位清零,这样看起来最简单但是对于我们想要改变某些位而不影响其它位的场合是不行的,例如1602液晶操作E和RS,还有数据等等,有严格的时间顺序,彼此要独立,按4data线统统接到PORTA,则无法用=直接赋值.



ICCAVR 的macros.h里定义了一些有用的宏,如SEI(),其实是"asm("SEI") ", 此外还有CLI(),NOP() 等等,大家可以去看看,顺便说说,ICCAVR嵌入汇编的格式是asm("汇编指令");

C 里面我们把一些宏定义,函数的声明等写到.h头文件,而.c则是函数具体实现,当程序比较大时可以把一般函数和main函数分开,一起ADD到Project里面,便于管理.



ICCAVR里面的中断用#pragma interrupt_handler INTTERRUPT_NAME:INTERRUPT_NUM, INTERRUPT_NAME是自己取的中断函数名,

INTERRPT_NUM是所选中断的中断号,在DATAsheet里有..在这之后就可以写自己的中断函数体了.



在嵌入式的C程序编写里边,尽量少用float,double等等数据类型,可以用整数运算,到最后一步再除以10的多少次方得到所要的数.此外像sin, log这样的高级函数,虽然C编译器自动给你生成,不想汇编那样自己用加减移位来编写,但是对于这样的函数,C编译器会比较大的代码,所以尽量少用.除法运算若被除数是2的次方,可以用移位操作代替.

上一个:c语言的32个关键字?
下一个:学习c语言需要什么基础

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,