
c语言
fushiqianxun
这个作者很懒,什么都没留下…
展开
-
编程那些事儿(持续更新中)
现在在用STC12C5A60S2单片机做32*128的LED点阵,各种纠结的问题是遇到不少的。当然,其实大都是一些常识性的错误,但是这些对于初学者而言,如果没有人指导,自己又不喜欢去看书,很难找到错误的原因。我就遇到一些,现在逐渐总结出来。//问题代码一(eeprom数据写入程序):unsigned char i; for(i=0;i<256;i++) //将数据写入eeprom中原创 2012-04-21 15:21:16 · 960 阅读 · 0 评论 -
关于变量重复定义的理解
在c语言中,以下代码会被认为是重复定义:#include main(){ extern int i; int i = 1;}因为extern int i会让编译器认为外部已经定义了i,以后直接用就可以 了,可以直接对i赋值,例如i = 4。但如果外部居然没有定义i,则初始化i或对i赋值时,编译就会出现未知错误——你告诉了编译器外边定义了一个i,已经有了一个房原创 2012-09-12 21:04:48 · 3005 阅读 · 0 评论 -
C语言之详解#ifdef等宏
C语言之详解#ifdef等宏 这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程转载 2012-09-10 21:18:32 · 957 阅读 · 0 评论 -
关于在头文件中定义函数的缺点
同一个函数、变量可以在不同的c文件中根据需要有多个声明,但只能有一个定义。这就决定了如果在头文件中定义函数或变量,则该头文件只能使用一次,不能被别的c文件使用,也即限制了最好只有一个c文件,因为别的c文件已经不能再使用这些头文件;而头文件的真正用处是实现“接口”,使变量或函数供别的模块调用函数,函数类似“原子”的作用,该功能很多c文件(和头文件?)都会需要用到;而在头文件中定义,则只是起到“插入”原创 2012-09-10 00:03:33 · 10490 阅读 · 0 评论 -
函数fp()、数组a[i]和箭头符号->的由来
很多事物的由来都是有理由的,现在看似晦涩难解的符号token,背后都是有一段历史! 1. fp()只是一种简写方式fp()是一个函数指针,所以*fp就是该指针指向的函数,所以(*fp)()就是调用该函数的方式。 也就是 (*fp)() 和 fp() 是同一个意思; ANSI C 标准规定允许程序员将上式简写成 fp(),但是要记住,这只是一种简写方式罢了! 这样转载 2012-09-08 14:00:22 · 870 阅读 · 0 评论 -
在8位单片机中对16位INT型数据的操作
在8位单片机中没有16位数的操作指令,所有的int型数据都要通过两个字节分开操作,使用的方法不用,生成的代码也不相同,当然效率也不一样,通过指针对16位数进行操作可以得到高效的代码。 比如通过串行口接收数据,或者从串行的EEPROM中读取的数据,或者从大于8位的A/D读取的数据,由于8位单片机的数据线是8位的,高于8位的数据都要分成两个字节分别读取,然后写入到RAM中去再进行计算,或者把转载 2012-08-28 10:40:55 · 5293 阅读 · 0 评论 -
keil编译错误解决方法
看下面一段程序:出现这样的错误信息:src\User\main.c(11): error: #268: declaration may not appear after executable statement in block问题就出在: “ GPIO_InitTypeDef GPIO_InitStruct;” 这句,应该使用函数之前定义GPIO_InitStru原创 2012-09-03 18:12:24 · 7643 阅读 · 0 评论 -
typedef_struct_用法详解和小结
1. 基本解释typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。2. typedef &转载 2012-08-31 17:01:03 · 2416 阅读 · 0 评论 -
c语言中=和|=的区别
在配置定时器使用了如下语句:TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload 不禁疑问:这与TMOD=0x20有什么区别呢? 不都是把0x20给TMOD吗? NO。当只需要改变TMOD中的某一位时,就用 |=,如果直接用 = 赋值,会导致TMOD其它位被改变。如,TMOD=0x20就使除了位5为1,别的位都为原创 2012-08-30 23:22:45 · 3277 阅读 · 0 评论 -
全局数组变量和局部数组变量的访问越界问题
有 1 小段程序如下:?123456789101112#include int a[50]; int main(void){ inti; for(i = 0; i a[i]=i;转载 2012-05-09 10:26:06 · 5087 阅读 · 0 评论 -
按位异或运算符^
参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0 例如:10100001^00010001=101100000^0=0,0^1=1 0异或任何数=任何数1^0=1,1^1=0 1异或任何数-任何数取反任何数异或自己=把自己置0(1)按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转载 2012-04-23 12:03:36 · 519 阅读 · 0 评论 -
c语言中关于头文件重复包含
1、如果头文件A包含头文件C,同时头文件B也包含头文件C,而写的程序中包含了头文件A,头文件B,然后在编译的时候就会出现头文件C重复包含的错误这个错误 只要在自己写的头文件中这样写 #ifndef X //X为你的标识符,保持唯一,可以长点,比如 #ifndef _INCLUDE_XXXXXX_H_#define X//这里是你的头文件#endif上面的X可以随便取名(可以用来“原创 2012-09-11 19:35:33 · 19357 阅读 · 1 评论