C/C++
mkhgg
计算机科学与技术(嵌入式技术方向)专业学生!
展开
-
函数指针
刚才在看《C 语言嵌入式系统编程修炼之三:内存操作》有这么一部分,对函数指针的精辟阐述。非常明了精辟,所以就摘录下来了 函数指针 首先要理解以下三个问题:(1)C 语言中函数名直接对应于函数生成的指令代码在内存中的地址,因此函数名可以直接赋给指向函数的指针;(2)调用函数实际上等同于"调转指令+参数传递处理+回归位置入栈",本质上最核心的操作是将函数生成的目标代码的首地址赋给CPU 的PC 寄存器;(3)因为函数调用的本质是跳转到某一个地址单元的code 去执行,所以可以"调用"一个根本就不存在的函数实体,原创 2010-07-31 22:57:00 · 592 阅读 · 0 评论 -
c++常用函数所在头文件一览
<br />c++常用函数所在头文件一览<br /> <br />函数 包含 类别 功能<br /> <br />_atold math.h 数学子程序 把字符串转换为浮点数<br />_beginthread process.h 进程控制子程序 启动执行一个新线程<br />_bios_disk bios.h转载 2011-05-26 11:08:00 · 1959 阅读 · 0 评论 -
static_cast和reinterpret_cast这两个操作符有什么区别,应该怎么使用这两个操作符
尽量使用C++风格的类型转换 仔细想想地位卑贱的类型转换功能(cast),其在程序设计中的地位就象goto语句一样令人鄙视。但是它还不是无法令人忍受,因为当在某些紧要的关头,类型转换还是必需的,这时它是一个必需品。 不过C风格的类型转换并不代表所有的类型转换功能。 一来它们过于粗鲁,能允许你在任何类型之间进行转换。不过如果要进行更精确的类型转换,这会是一个优点。在这些类型转换中存在着巨大的不同,例如把一个指向const对象的指针(pointer-to-const-object)转换成指向非const对象的指转载 2011-03-22 13:39:00 · 426 阅读 · 0 评论 -
strcat_s 和 strcat 的区别
他们的作用我不说你也知道是吧。对于他们的区别,stract_s是VS2005及以后新增的具有更强"安全性"的CRT函数。这个安全性如何理解:如:char szBuf[3]={0};1> strcat_s(szBuf,3,"kdfdfj");2> strcat(szBuf,"kdfdfj");对于这两个九,你仔细看就会发现他们有缓冲区溢出的问题.而用第一个函数则不同,它会抛出一个异常。但使用第二个函数的结果则不能确定,因为它可能会错误地改变了程序中其他部分的内存的数据,有可能不会抛出异常,但会导致程序数据错误原创 2011-03-22 11:29:00 · 897 阅读 · 0 评论 -
strcat_s 和 strcat 的区别
他们的作用我不说你也知道是吧。对于他们的区别,stract_s是VS2005及以后新增的具有更强"安全性"的CRT函数。这个安全性如何理解:如:char szBuf[3]={0};1> strcat_s(szBuf,3,"kdfdfj");2> strcat(szBuf,"kdfdfj");对于这两个九,你仔细看就会发现他们有缓冲区溢出的问题.而用第一个函数则不同,它会抛出一个异常。但使用第二个函数的结果则不能确定,因为它可能会错误地改变了程序中其他部分的内存的数据,有可能不会抛出异常,但会导致程序数据错误原创 2011-03-22 11:15:00 · 1753 阅读 · 0 评论 -
#pragma once 是什么意思?
包含pragma once语句的文件只会被编译一次。 表示在编译的时候, 这个文件只被包含(include)一次 这样, 可以减少整个编译过程中打开这个文件的次数原创 2011-03-22 11:02:00 · 2611 阅读 · 1 评论 -
boost::regex简单用法
1 常用类1.2 basic_regex 类 定义:template >class basic_regex;basic_regex生成和处理一个正则表达式,这个类的用法很简单,俱体用法参考文献[2]。1.2 sub_match类这个类处理一个子表达式的匹配结果,定义如下:template class sub_match : public std::pair{public: typedef typename iterator_traits::value_type转载 2011-03-22 11:00:00 · 564 阅读 · 0 评论 -
boost::regex简单用法
1 常用类1.2 basic_regex 类 定义:template >class basic_regex;basic_regex生成和处理一个正则表达式,这个类的用法很简单,俱体用法参考文献[2]。1.2 sub_match类这个类处理一个子表达式的匹配结果,定义如下:template class sub_match : public std::pair{public: typedef typename iterator_traits::value_type转载 2011-03-22 10:32:00 · 690 阅读 · 0 评论 -
boost::regex简单用法
1 常用类1.2 basic_regex 类 定义:template >class basic_regex;basic_regex生成和处理一个正则表达式,这个类的用法很简单,俱体用法参考文献[2]。1.2 sub_match类这个类处理一个子表达式的匹配结果,定义如下:template class sub_match : public std::pair{public: typedef typename iterator_traits::value_type转载 2011-03-22 10:34:00 · 684 阅读 · 0 评论 -
C++异常处理
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我知道对你来说你喜欢用return value或者是print error message来做,你想过这样做会导致Memory Leak,系统退出,代码重复/难读,垃圾一堆…..吗?现在的软件已经是n*365*24小时的运行了,软件的健壮已经是一个很要考虑的时候了。自序:对写程序来说异常真的是很重要,一个稳健的代码不是靠返回Err转载 2011-01-15 00:47:00 · 1340 阅读 · 0 评论 -
也谈内存对齐(续)
<br />关于内存对齐的话题,始终是敏感的。稍有不慎,必将闯下大祸!最近项目稍显轻闲,自己给自己安排一天反思和总结一下,突然想到以前写过的一篇'也谈内存对齐',那篇文章谈的是内存对齐的基本知识以及一些实验的数据,想必很多人看完后,会收获一些东西,但是对内存对齐的应用还是处于懵懂状态,其实大部分时间我们是不会显式的用到'内存对齐的',但是有些时候我们需要这样做。这里做了一个小例子,希望能给大家以启发。<br />例子是这样的:我们有一种二进制文件,其中存储了多条经过特定对齐的某种记录格式的数据,我们的任务就转载 2010-10-19 21:52:00 · 413 阅读 · 0 评论 -
也谈内存对齐(续)
<br />关于内存对齐的话题,始终是敏感的。稍有不慎,必将闯下大祸!最近项目稍显轻闲,自己给自己安排一天反思和总结一下,突然想到以前写过的一篇'也谈内存对齐',那篇文章谈的是内存对齐的基本知识以及一些实验的数据,想必很多人看完后,会收获一些东西,但是对内存对齐的应用还是处于懵懂状态,其实大部分时间我们是不会显式的用到'内存对齐的',但是有些时候我们需要这样做。这里做了一个小例子,希望能给大家以启发。<br />例子是这样的:我们有一种二进制文件,其中存储了多条经过特定对齐的某种记录格式的数据,我们的任务就转载 2010-10-19 21:53:00 · 418 阅读 · 0 评论 -
也谈内存对齐
<br />在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该再透明了。<br />一、内存对齐的原因<br />大部分的参考资料都是如是说的:<br />1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平转载 2010-10-19 21:49:00 · 399 阅读 · 0 评论 -
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形式称为旧风格(old-style)的强制转型。使用标准C++的类型转换符:static_cast、dynamic_cast、re转载 2010-10-08 11:56:00 · 402 阅读 · 0 评论 -
关于关键字const
刚才在看《C 语言嵌入式系统编程修炼之三:内存操作》的时候再次看到了关键字const的重要性;以前在很多地方看到过const关键字,但是终究没有认真的看过其具体含义,后面看到多了,也看到很多人说这是一个非常重要的的知识,一定要理解。我以前对const的理解是常量的意思,可是在(不知道哪里了),说如果一个面试官问你对const关键字的理解,你答是常量的话,那面试官肯定觉得是跟一个行外人打交道,即便是说是只读的还能接受呀……呵呵……看来自己学了那么久,也就是个行外人而已,这次再次看到,所以就的求个究竟了:关键字原创 2010-08-01 00:20:00 · 478 阅读 · 0 评论 -
C语言模块化程序设计思想的理解
模块划分<br />模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。<br />C 语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,<br />牛顿定律遇到了>相对论),C 语言模块化程序设计需理解如下概念:<br />(1) 模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明;<br />(2) 某模块提供给其它模块调用的外部函数及数据需在.h 中文件中冠以原创 2010-07-30 23:58:00 · 6909 阅读 · 0 评论 -
C/C++位操作技巧 【转载】
检测一个无符号数是不为2^n-1(^为幂): x&(x+1) 将最右侧0位改为1位: x | (x+1) 二进制补码运算公式: -x = ~x + 1 = ~(x-1) ~x = -x-1 -(~x) = x+1 ~(-x) = x-1转载 2012-02-06 10:53:22 · 1868 阅读 · 0 评论