•  
  •  
  • 首页
  •  
  •  

日历

数据统计

正在加载数据...
 

我的日志

发表新日志
2010
04-27
标签: C++

C语言测试:想成为嵌入式程序员应知道的0x10个基本问题

C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。
从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案是“是”的话,那么我知道我得认真考虑我是否应该去做这份工作。
从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机...

点击此处查看原文


2010
04-27
标签: keyword

要使用C++语言,时时刻刻都在使用关键字,很好的理解语言的关键字,我们的程序在代码组织,编程风格,编程技巧,程序移植,执行效率等方面都会有很大的提高。微软对关键字进行了扩展,因为我使用VC++,就让我们一起来看看VC++对C++关键字的实现。

首先我们通过MSDN把关键字都列出来,并把微软的这个说明也附在这里,然后我们对关键字进行分类讲述。

 

点击此处查看原文


     Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。最后,你可以用所学知识编写自己的 Windows 服务。
  当初我写第一个 NT 服务时,我到 MSDN 上找例子。在那里我找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,这篇文章附带一个 C++ 例子。虽然这篇文章很好地解释了服务的开发过程,但是,我仍然感觉缺少我需要的重要信息。我想理解通过什么框架,调用什么函数,以及何时调用,但 C++ 在这方面没有让我轻松多少。面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,它不利于学习服务程序的基本知识。这就是为什么我觉得 C 更加适合于编写初级服务程序或者实现简单后台任务的服务。在你对服务程序有了充分透彻的理解之后,用 C++ 编写才能游刃有余。当我离开原来的工作岗位,不...

点击此处查看原文


4.    static有什么用途?(请至少说明两种)
1.限制变量的作用域
2.设置变量的存储域
7.    引用与指针有什么区别?
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
2) 不存在指向空值的引用,但是存在指向空值的指针。 8.    描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性
9.    全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
全局变量储存在静态数据库,局部变量在堆栈
10.   什么是平衡二叉树?
左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1
11.   堆栈溢出一般是由什么原因导致的?
没有回收垃圾资源
12.   什么函数不能声明为虚函数?
constructor
13.   冒泡排序算法的时间复杂度是什么?
O(n^2)
14.   写出float x 与“零值”比较的if语句。
if(x>0.000001&&x16.   Internet...

点击此处查看原文


标签: 指针 C语言

C中的指针是最方便和灵活的,也是最头疼的
。在链表的建立过程中,大家一般都用指针,那么请看
下面一段程序:

        struct item_t {
                typename        Someinfo;
                item_t  *       Next; //下一个结构的指针。
        }

        int     built (item_t * head) //以head为头建立一个链表
        {
                item_t *        Temp;

                temp    =Head;
                for     (int i=0;i                        temp    =(item_t *) malloc (sizeof (item_t));
                        if      (te...

点击此处查看原文


标签: 管理 内存

C 风格的内存分配程序
C 编程语言提供了两个函数来满足我们的三个需求: 

malloc:该函数分配给定的字节数,并返回一个指向它们的指针。如果没有足够的可用内存,那么它返回一个空指针。
free:该函数获得指向由 malloc 分配的内存片段的指针,并将其释放,以便以后的程序或操作系统使用(实际上,一些 malloc 实现只能将内存归还给程序,而无法将内存归还给操作系统)。

物理内存和虚拟内存
要理解内存在程序中是如何分配的,首先需要理解如何将内存从操作系统分配给程序。计算机上的每一个进程都认为自己可以访问所有的物理内存。显然,由于同时在运行多个程序,所以每个进程不可能拥有全部内存。实际上,这些进程使用的是虚拟内存。

只是作为一个例子,让我们假定您的程序正在访问地址为 629 的内存。不过,虚拟内存系统不需要将其存储在位置为 629 的 RAM 中。实际上,它甚至可以不在 RAM 中 —— 如果物理 RAM 已经满了,它甚至可能已经被转移到硬盘上!由于这类地址不必反映内存所在的物理位置,所以它们被称为虚拟内存。操作系统维持着...

点击此处查看原文


标签: 文件 binary text

这里并不是要说文本文件和二进制文件有什么区别,这两种文件之间的界限本来就很模糊
,事实上,把所有文件当成二进制文件就可以了。在这个层次上,一个文件和一块内存没
有什么区别,都是一个字节序列,一个字节就是一个介于0x00~0xFF之间的值

但是在Windows/DOS下,用fopen等函数打开文件的时候,最后一个参数里可以加上一个
"b"或者"t",用来告诉程序这个文件应该用什么方式打开。关于他们的区别,在MSDN上是
这样说的:

t
Open in text (translated) mode. In this mode, CTRL+Z is interpreted as an
end-of-file character on input. In files opened for reading/writing with "a+",
fopen checks for a CTRL+Z at the end of the file and removes it, if
possible. This is done...

点击此处查看原文


// Tree.cpp : Defines the entry point for the console application.
//
/**********************************************************************/
/*
 * Author      : Leaf_KA  [LiWen.Zhang]                                                     
 * Function    : 二叉数操作                
 *
/***********************************************************************/
#include "stdafx.h"
#include
#include
#include #define LINE "-------------------------------------------...

点击此处查看原文


标签: shell 编写

这个版本的Shell支持管道功能和I/O重定向. 下一个版本将增加对内建(buildins)命令的支持,如if ..then else等控制语句的支持. -------------CODE-------------------   #include
#include
#include
#include
#include #define OPEN_MAX 10
#define MAXNAME 100
#define FALSE 0
#define TRUE 1 char *readcmd( FILE *fp );                   //读入命令行字符串
char **getarg(char *argv);                    //把命令行字符串分解成字符数组指针
void getfile(char *name);                      //获得重定向文件名
void freearg(char **arg);                    ...

点击此处查看原文


标签: C语言 性能

使用宏定义

  在C语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。

  写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个:

  错误做法:

#define MIN(A,B)  ( A
  正确做法:

#define MIN(A,B) ((A)
  对于宏,我们需要知道三点:

  (1)宏定义"像"函数;

  (2)宏定义不是函数,因而需要括上所有"参数";

  (3)宏定义可能产生副作用。

  下面的代码:

least = MIN(*p++, b);
  将被替换为:

( (*p++)
  发生的事情无法预料。

  因而不要给宏定义传入有副作用的"参数"。

  使用寄存器变量

  当对一个变量频繁被读写时,需要反复访问内存,从而花...

点击此处查看原文