C\C++语言学习
丁老师的技术随笔
公众号:丁老师的技术随笔
展开
-
向一个数组中输入5数,并计正数的个数,并求他们之和
源程序:#include #include main(){ int a[5]; int i; int count=0,sum=0; printf("Please input 5 number: \n"); for(i=0;i<5;i++) { scanf("%d",&a[i]); if(a[i]>0) { count++;原创 2012-07-17 10:30:56 · 2421 阅读 · 0 评论 -
C语言嵌入式系统编程修炼之背景篇(序言)
C语言嵌入式系统编程修炼之背景篇作者:宋宝华出处:天极网责任编辑: 方舟[ 2005-06-14 14:45 ]本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,归因于汇编语转载 2012-07-26 19:46:28 · 1069 阅读 · 0 评论 -
可重入代码
转自:http://hi.baidu.com/benzus/blog/item/6bfe300aca4e9036b0351d7a.html若一个程序或子程序可以安全的被并行执行,则称其为可重入(reentrant或re-entrant)的;即,当该子程序正在运行时,可以再次进入并执行它。若一个函数是可重入的,则该函数:不能含有静态(全局)非常量数据。不能返回静态(全局)非常量数据的地址转载 2012-07-26 21:32:52 · 2343 阅读 · 0 评论 -
C语言头文件避免重复包含
假定有以下几个头文件及其包含关系为: 假定有以下几个头文件及其包含关系为: File1.h,file2.h,file3.h,file4.h,file5.h,main.c 那么:file3.h包含file1.h,file2.h,file4.h包含file1.h,file2.h,file5.h包含file3.h,file4.h。如许就会导致在file5中对file原创 2012-08-24 11:43:19 · 2625 阅读 · 0 评论 -
NDEBUG
头文件assert.h定义的宏受NDEBUG的影响.如果预程序在处理这个头文件时已经定义了NDEBUG,assert宏的内容就定义为空,这意味着assert宏不在起作用.所以,可以在最终发布程序的时候可以使用-DNDEBUG关闭断言功能或者把#define NDEBUG加到每个源文件中,但这条语句必须放在#include 之前.#include #define NDEBUG/转载 2012-08-25 16:27:52 · 9417 阅读 · 2 评论 -
宏定义的函数在程序中的调用
#include #define Min(X,Y) ((X)>(Y)?(Y):(X))这个宏在程序中怎么调用?它是有返回值的原创 2012-08-25 21:08:14 · 2174 阅读 · 0 评论 -
TRACE宏 ASSERT宏 VERIFY 宏
一、TRACE宏 当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了。但在程序的Release版本中,它们是被完全禁止的。下面是一个典型的TRACE语句: … int nCount =9 ; CStringstrDesc("total" ); TRACE("转载 2012-08-25 16:55:27 · 2073 阅读 · 0 评论 -
逐个字符读字符串
因为 scanf 函数和 gets 函数都有风险且不够灵活,C 程序员经常会编写自己的输入函数。通过每次一个字符的方式来读入字符串。下面是自己编写的读取字符串的函数 read_line():int read_line(char strp[], int n){ char ch; int i = 0; while((ch = getchar()) != '\n')转载 2012-08-25 20:28:29 · 3121 阅读 · 0 评论 -
字符串拷贝
char * strcpy (char *strDest,const char *strSrc){ assert ((strDest!=NULL)&&(srtrSrc!=NULL)); char *strDestCopy=strDest; while ((*strDest++=*strSrc++)!='\0'); return s原创 2012-08-25 11:46:44 · 782 阅读 · 0 评论 -
C语言嵌入式系统编程修炼之性能优化
C语言嵌入式系统编程修炼之性能优化作者:宋宝华出处:天极网责任编辑: 方舟[ 2005-06-27 11:12 ]在C语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法使用宏定义在C语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。写一个"标转载 2012-07-26 16:46:17 · 1117 阅读 · 0 评论 -
static关键字
C/C++中的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类的问题。A. 面向过程程序设计中的static关键字1) 静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。静态全局变量定义和使用类似: #include转载 2012-07-26 20:58:15 · 786 阅读 · 0 评论 -
野指针需要注意
另外一个要注意的问题:不要返回指向栈内存的指针或引用(即局部变量的地址),因为栈内存在函数结束时会被释放。一般来说,野指针形成的原因有以下几种:1、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的。2、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。3、指针操作超越了变量的作用范围,这种情况让人防不胜防转载 2012-07-26 20:21:48 · 1050 阅读 · 0 评论 -
要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,每种面值至少1张,编程输出所有可能的换法,程序应适当考虑减少重复次数
源程序:要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,要求换成30张小钞票,每种面值的至少一张,编程输出所有可能的换法,程序应适当考虑减少重复次数。#include #include main(){ int x5,x2,x1,x;for(x5=1;x5<=9;x5++){for(x2=1;x2<=21;x2++){for(x1=1;x1转载 2012-07-17 11:45:59 · 19965 阅读 · 2 评论 -
求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。例如若n为1000时,函数值应为:s=153.909064。
源程序:#include #include #include #include double get_s(int m){ int i; double s; int sum=0; for(i=0;i<m;i++) { if((i%3==0)&&(i%7==0)) sum+=i; } printf("%d\n",sum); s=sqrt(sum);//原创 2012-07-17 16:24:09 · 14892 阅读 · 1 评论 -
利用指针实现将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中各单元的值。
源程序:#include #include main(){ int a[5],b[5]; int *pa=a; int *pb=b; int i;for(i=0;i<5;i++){ scanf("%d",pa+i); *(pb +4-i)=*(pa+i);}for(i = 0; i < 5;i++) {//printf("%d ",b[i]转载 2012-07-17 11:21:40 · 10018 阅读 · 0 评论 -
C语言嵌入式系统编程修炼之软件架构篇
作者:宋宝华出处:天极网责任编辑: 方舟[ 2005-06-17 15:31 ]模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求 模块划分模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依转载 2012-07-26 19:39:46 · 1287 阅读 · 0 评论 -
C语言嵌入式系统编程修炼之键盘操作
C语言嵌入式系统编程修炼之键盘操作作者: 宋宝华出处: 天极网责任编辑: 方舟[ 2005-06-24 16:31 ]处理功能键功能键的问题在于,用户界面并非固定的,用户功能键的选择将使屏幕画面处于不同的显示状态下。例如,主画面如图1:图1 主画面当用户在设置XX上按下Enter键之后,画面就切转载 2012-07-26 16:50:24 · 1011 阅读 · 0 评论 -
错误: 可变大小的对象不能被初始化
c语言中定义了32个关键字。#include #include void main(){ const int SIZE = 3; char a[SIZE]={'a','b','f'}; /* 非法:编译阶段不能用到变量 */ printf("输出为:%c \n",a[0]); }编译:qust@qust-K42JZ:~/test$ gcc t原创 2012-07-26 17:54:48 · 3707 阅读 · 0 评论 -
C语言嵌入式系统编程修炼之内存操作 关键字volatile
C语言嵌入式系统编程修炼之内存操作作者:宋宝华出处:天极网责任编辑: 方舟[ 2005-06-23 14:08 ]在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力 数据指针在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C+转载 2012-07-26 19:19:47 · 1450 阅读 · 0 评论 -
位域--C语言中的一种数据结构
今天看程序看到一种很奇怪的结构体声明方式,形式如下:Typedef struct{ Int a:2, b:1, c:3;}struct1; 请教了一下高人,才知道原来type *:*;的这种用法是C语言里边为了节省存储空间并使处理简单而提供的一种数据结构,称之为“位域”或“位段”。转载 2012-07-26 19:59:20 · 1340 阅读 · 0 评论 -
C语言宏定义方法总结
宏的单行定义 #define A(x) T_##x #define B(x) #@x #define C(x) #x 我们假设:x=1,则有: A(1)------〉T_1 B(1)------〉 '1 ' C(1)------〉 "1 " .如何定义宏、取消宏 //定义宏 #define [Macro转载 2012-08-25 16:56:35 · 20400 阅读 · 0 评论