C Code
lovebeyond1014
这个作者很懒,什么都没留下…
展开
-
extern“c”在项目头文件中的使用
被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。 未加extern “C”声明时的编译方式,C++中对类似C的函数是怎样编译的? 作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,某个函数的原型为: void foo( int x, int y );原创 2012-03-06 21:02:33 · 2011 阅读 · 0 评论 -
析构函数定义为虚函数
析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。#include#includeclass CPerson{public: virtual ~CPerson();转载 2013-12-05 11:41:57 · 816 阅读 · 0 评论 -
“#if 0/#if 1 ... #endif”的注释作用
1、先说“#if 0/#if 1 ... #endif”的作用,楼上诸位或多或少都说到了一点,但都没有说到关键的地方。我们知道,C标准不提供C++里的“//”这样的单行风格注释而只提供“/* */”这样的块注释功能,我们通常使用它写代码中说明性的注释文字(注释作用)以及在调试时关闭某段代码对编译器的可见性(屏蔽作用),当然,这里所谓的“注释作用”和“屏蔽作用”是我们从功能上下的主观定义,对预处理器转载 2013-06-21 21:38:24 · 1638 阅读 · 0 评论 -
C语言编译过程中的组成部分
C语言编译过程详解 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号转载 2013-05-29 21:26:12 · 1346 阅读 · 0 评论 -
Warning - “Old Style Function Definition"
刚用PSoC Designer5.0写Timer16_1_ISR中断服务函数,出现warning,按之前4.3的版本是没有警告的,google了下,找到资料解决。Question: When I compile a project with new version of PSoC Designer, I get warning “Old Style Func原创 2012-09-24 14:59:35 · 11298 阅读 · 1 评论 -
__packed 结构与单个 __packed 字段
对于一个ARM系统来说,32位数据如int的访问必须是4字节对齐的,16位就要2字节对齐(struct 结构中都是int16_t,int32_t可不需要添加__packed,如果有偶数个char型也可以不添加,因为可以按半字对齐,如str中有5个char型,不加则为6,加则为5,但也破坏了边界对齐的形态,会增加读取效率),否则就会有Data-Abort的异常。因此在一个struct当中,并不能保证转载 2012-09-11 15:05:26 · 1474 阅读 · 0 评论 -
va_list、va_start、va_arg、va_end的原理与使用
概述由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论.定义大家先看几宏.在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:#define _INTSIZEOF(n) ((sizeof(n)转载 2012-09-11 12:57:03 · 555 阅读 · 0 评论 -
变长参数应用
1、Fifo.h: #include "stdarg.h"…… #define FIFOSizeMax 50 #define FIFOFunPointerMax 10 typedef int32_t (*fifoproc)(int32_t argc,...); typedef uint8_t DataType; /*FIFO的数据可以是特定的结构体*/ typedef __p原创 2012-09-11 12:52:16 · 877 阅读 · 0 评论 -
0xFFFF的Debug
for(i=0;i 参数只需2个字节 */{ if((int16_t)0xffff == *((int16_t *)(GyroParaSectorAddr+i))) /* 校验是否可写*/ { break; }} 以上程序,i=GyroParaSectorSize跳出,即使Flash未写入,默认值为全F,也不能成立。因为编译器中0xFFFF是默认无符号数,但是后者却转换成有符号原创 2012-05-08 21:56:15 · 1610 阅读 · 0 评论 -
网口芯片SMI接口实现
最近在用P178G,需要对内部寄存器进行控制,实现各个PHY的开关与VLAN配置,为了替代最初模拟开关实现的“伪”开关,通过ds得知可以使用SMI接口进行读写寄存器,控制IC工作状态。时序与格式如图:该芯片前置码与其他很多芯片的32Bit高电平不同,按32bit实现也可以通用。常规SMI各个位域说明如下:PRE:帧前缀域,为32个“1”比特,这帧前缀域不是须要的,某些物原创 2014-07-21 10:59:57 · 4199 阅读 · 1 评论