Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

C语言中的带参数宏

C语言中的带参数宏

一.带参数的宏1.带参数的宏定义不是简单的字符串替换,还要进行参数替换定义格式为:#define 宏名(参数表) 字符串1>字符串包含括号中所有指定的参数eg: #define S(a,b) ((a)*(b)) area=S(3,2)2>编译系统处理带参数的宏名时,按程序行中指定的字符串,括号内的内容,从左到右进行处理,若遇到形参则以实参代替,非形参字符原样保留,就形成了替换后的内容,这期间没有任何计算。《在宏定义中的参数称为形参,在宏调用中的...
嵌入式C语言编程小知识总结

嵌入式C语言编程小知识总结

1. 流水线被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅指单周期指令)。如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线再次填满。因此,尽量少的使用跳转指令可以提高程序执行效率,解决发案就是尽量使用指令的“条件执行”功能。2. 在LPC2200系列中:可以通过过下面的程序延迟10毫秒:for(i=0;i<200;i++) { for(j=0;j<200;j++); }3. 同过下面语句将一个16位的变量放在两个...
C语言中随机函数应用

C语言中随机函数应用

1前言:有些程序每次执行时不应该产生相同的结果,如游戏和模拟,此时随机数就非常有用。下面这两个函数合在一起使用能够产生伪随机数(pseudo-random number):通过计算产生的随机数,可能有重复出现,所以并不是真正的随机数。int rand(void);void srand(unsigned int seed);1>rand返回一个范围在0和RAND_MAX(至少为32767)之间的伪随机数。当它重复调用时,函数返回这个范围内其他数。为了得...
Linux下静态库生成和使用

Linux下静态库生成和使用

Linux下静态库生成和使用一.静态库概念1.库是预编译的目标文件(object files)的集合,它们可以被链接进程序。静态库以后缀为”.a”的特殊的存档(archive file)存储。2.标准系统库可在目录/usr/lib与/lib中找到。比如,在类Unix系统中C语言的数序库一般存储为文件/usr/lib/libm.a。该库中函数的原型声明在头文件/usr/include/math.h中。3.C标准库本身存储为/usr/lib/libc.a,它包...
Linux之gcc的一些常见用法

Linux之gcc的一些常见用法

1.gcc编译器对程序的编译,分为四个阶段:1>预编译(pre-processing):在预处理阶段,输入的是C语言的源文件,通常为*.c。它们一般带有*.h之类的头文件。这个阶段主要处理源文件中的#ifdef,#include,#define预处理命令。该阶段会生成一个中间文件*.i文件。这个阶段使用命令: gcc –E tiger.c –o tiger.i它通过对源文件tiger.c使用-E选项来生成中间文件tiger.i2>编译和优化(c...
Linux下动态库生成和使用

Linux下动态库生成和使用

Linux下动态库生成和使用一.动态库的基本概念1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址是相对地址,不是绝对地址,其真实地址在调用动态库的程序加载时形成。2.动态链接库的名称有别名(soname), 真名(realname)和链接名(linker name)。别名由一个前缀lib,然后是库的名字,再...
Linux之#pragma的用法

Linux之#pragma的用法

预编译指令#pragma的用法最近在看开源项目中的代码时,发现许多地方都用到了#pragma的程序。因此,就问了下谷歌老师,总结了下#pragma预编译指令的常用用法,现在和大家分享下。一.#pragma最常用的方法1. #progma pack(n)1>功能:使用#progma pack预编译指令可以改变编译器的默认值(不是绝对的,有些编译器只能是固定的数据对齐方式)。2>说明大多数情况下,我们写程序时候并不考虑对齐的问题,因为编译器会替我们...
Linux中用C语言写系统日志

Linux中用C语言写系统日志

我门在做一些大型项目时候,在编写程序中时会考虑到,如果出现一些异常的时候是直接抛出异常呢,还是将异常写入到日志文件中,提供给系统管理员来查看。以下就针对这两种情况分别介绍在Linux中如何将异常写入日志或者是直接抛出异常。一.抛出异常在C语言中抛出异常,是用的最多,也是最简单的。因为我们先来talk下它的使用方法。1.使用exit()函数来实现抛出异常1>头文件:#include<stdlib.h>2>当在程序中碰到异常情况时,可以...
C语言复习之结构体基础知识

C语言复习之结构体基础知识

一.基础知识1.聚合数据类型(aggregate data type)能够同时存储超过一个的单独数据。C提供了两种类型的聚合数据类型,数组和结构。(1)数组是相同类型的元素的集合,它的每个元素是通过下标引用或指针间接访问来选择的。(2)结构也是一些值的集合,这些值称为它的成员(member),但一个结构的各个成员可能具有不同的类型。2.数组元素可以通过下标访问,这只是因为数组的元素长度相同。3.由于一个结构的成员可能长度不同,所以不能使用小标来访问它们。相...
C语言复习之位段

C语言复习之位段

1.位段的声明和结构类似,但它的成员是一个或多个位的字段。这些不同长度的字段实际上存储于一个或多个整型变量中。2.位段的声明和任何普通的结构成员声明相同,但有两个例外。1>位段成员必须声明为int,singed int 或unsigned int类型。2>其次,在成员名的后面是一个冒号和一个整数,这个整数指定该位段所占用的位的数目。eg:struct CHAR { unsigned int ch : 7; unsigned int font :...
C语言复习之动态内存分配

C语言复习之动态内存分配

前言1.数组的元素存储于内存中连续的位置上。当一个数组被声明时,它所需要的内存在编译时就被分配。2.但是我们也可以使用动态内存分配在运行时为它分配内存。3.为什么使用动态内存分配1>当使用数组时,必须用一个常量来指定数组的长度。但是,有时候,数组的长度常常在运行时才知道。因此,在某些情况下,我们通常采取声明一个较大的数组,它可以容纳可能出现的最多元素。2>该方法的优点是:简单。3>它的缺点是:? 这种声明在程序中引入了人为的限制,如果程序...
C语言复习之字符串常量

C语言复习之字符串常量

1.当一个字符串常量出现于表达式中时,它的值是一个指针常量。编译器被这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第一个字符的指针。(数组名用于表达式中时,它的值也是指针常量)2.”xyz”+1因为字符串常量实际上是个常量指针,这个表达式计算“指针值加上1”的数值。它的结果是个指针,指向字符串中的第2个字符:y。3.*”xyz”因为“xyz”是一个指针常量,指向字符串的第一个字符。因此对其间接操作,其值是字符x。4.”xyz”[2]则表示指向z...
C语言复习之预处理器

C语言复习之预处理器

一.前言1.编译一个C程序涉及很多步骤。其中第一步骤称为预处理(preprocessing)阶段。C预处理器(preprocessor)在源代码编译之前对其进行文本性质的操作。2.它的主要任务包括删除注释、插入被#include指令包含的内容、定义和替换由#define指令定义的符号以及确定代码的部分内容是否应该根据一些条件编译指令经行编译。二.预定义符号1.以下为预处理器定义的符号。它们的值或者是字符串常量,或者是十进制数字常量。2.__FILE__和_...
<< 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 >>