#if...#endif的用法总结

在写到 pwm音阶程序的时候,在代码中有#if...#endif的用法问题,相关音阶的代码如下:
/*******************************************************/
/* pwm音阶程序 */
/*******************************************************/ #include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */ #define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4 //
#define BUS_CLOCK 32000000
#define OSC_CLOCK 16000000 unsigned int sounghigh[]={
,,,,,,,,,
}; unsigned int soundtone[]={
,,,,,,,
}; unsigned int soundlong[]={
,,,,,,,
}; unsigned int t; /*******************************************************/
/* 初始化锁相环 */
/*******************************************************/
void INIT_PLL(void) {
CLKSEL &= 0x7f;
PLLCTL &= 0x8f;
CRGINT &= 0xdf; #if(BUS_CLOCK == 40000000)
SYNR = 0x44;
#elif(BUS_CLOCK == 32000000)
SYNR = 0x43;
#elif(BUS_CLOCK == 24000000)
SYNR = 0x42;
#endif REFDV = 0X81;
PLLCTL |= 0X70;
asm NOP;
asm NOP;
while(!(CRGFLG&0x08));
CLKSEL |= 0x80;
} /*******************************************************/
/* 初始化PWM */
/*******************************************************/
void init_pwm(void) {
PWMCTL_CON01 = ;
PWMPOL_PPOL1 = ;
PWMPRCLK = 0X55;
PWMCLK = 0X00;
PWMPER01 = ;
PWME_PWME1 = ;
} /*******************************************************/
/* 延时函数 */
/*******************************************************/
void delay(void) {
unsigned int i,j;
for(i=;i<;i++)
for(j=;j<;j++);
} /*******************************************************/
/* 延时函数 */
/*******************************************************/
void delay2(unsigned int n) {
unsigned int i,j,k;
for(k=;k<n;k++)
for(i=;i<;i++)
for(j=;j<;j++);
} /*******************************************************/
/* 主函数 */
/*******************************************************/ void main(void) {
DisableInterrupts;
INIT_PLL();
init_pwm();
LEDCPU_dir=;
LEDCPU=;
EnableInterrupts; for(;;) {
for(t=;t<;t++) {
PWMPER01=sounghigh[soundtone[t]];
PWMDTY01=sounghigh[soundtone[t]]/;
delay2(soundlong[t]);
PWMDTY01=;
delay();
}
delay2(); for(t=;t>;t--) {
PWMPER01=sounghigh[soundtone[t-]];
PWMDTY01=sounghigh[soundtone[t]]/;
delay2(soundlong[t]);
PWMDTY01=;
delay();
}
delay2();
} EnableInterrupts; for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */ }
yinjie
下面笔者来说说 #if...#endif的用法;
#if...#endif是C++种的条件编译预处理命令
有两种格式:
1:#ifdef 标示符
程序段1
#else
程序段2
#endif
表示:如果标示符已经被#define命令定义过,则编译程序段1,否则编译程序段2
2:#if
表达式
程序段1
#else
程序段2
#endif
表示:如果表达式为真,则编译程序段1,否则编译程序段2.
你写出的命令应该属于格式1
它的意思是,如果在程序中没有对**进行过#defined ** 的定义。则编译下面的语句,否则不编译。这中情况多用在需要经常移植的程序模块上,或是调试的时候用.
结合使用 #if 与 #else、#elif、#endif、#define 和 #undef 指令,可以根据一个或多个符号是否存在来包含或排除代码。 在编译调试版本的代码或针对特定配置进行编译时,这会很有用。
以 #if 指令开始的条件指令必须用 #endif 指令显式终止。
#define 使您可以定义一个符号,通过将该符号用作传递给 #if 指令的表达式,使该表达式计算为 true。
也可以用 /define 编译器选项来定义符号。 可以用 #undef 来取消定义符号。
用 /define 或 #define 定义的符号与具有同一名称的变量不冲突。 即,不应将变量名传递到预处理器指令,并且只能用预处理器指令计算符号。
用 #define 创建的符号的范围是在其中定义该符号的文件。
#if...#endif的用法总结的更多相关文章
- #ifndef#define#endif的用法
在网上看到了感觉作者总结得很好,作者辛苦了! #ifndef#define#endif的用法 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都 ...
- #ifndef#define#endif的用法(整理)
[转] #ifndef#define#endif的用法(整理) 原作者:icwk 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都in ...
- c/c++头文件中#ifndef/#define/#endif的用法
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...
- #ifndef#define#endif的用法-b
The special operator defined is used in #if and #elif expressions to test whether a certain name is ...
- #ifndef #define #endif 的用法
1.文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来 ...
- [转] #ifndef#define#endif的用法(整理) 原作者:icwk
文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了, ...
- 【转载】C/C++中#ifdef和#endif的用法
转于 http://www.cnblogs.com/renyuan/archive/2013/05/22/3092362.html 今天笔试的时候遇到这个问题,整理一下! 一般情况下,源程序中所有的行 ...
- <!--[if IE]>….<![endif]--> (<!--[if !IE]>||<![endif]-->)的用法
1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> 2. <!--[if IE]> 所有的IE可识别 ...
- #ifdef #else #endif 的用法
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作.说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译.这样做的好处是,经过处理后的代码,将会变的很精短. 关 ...
随机推荐
- WScript中调用js方法
http://zhidao.baidu.com/question/484374074.html ———————————————————————————————————————————————— Sub ...
- Android:从程序员到架构师之路Ⅲ_高焕堂
Part-2: 从Android框架代码中学习设计 一 基础设计模式(Pattern)的代码:以Android为例 1.Template Method模式:IoC(控制反转)机制 2.Observer ...
- LCA算法
LCA算法: LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点.也就是说,在两个点通往根的道路上,肯定会有公共的节点,我们就是要求找到公共 ...
- hibernate id生成器配置
1.uuid配置 <id name="tomdId" type="java.lang.String"> <column name=" ...
- 如何将std::string转int,double? (C/C++) (C) (template)
http://www.cnblogs.com/oomusou/archive/2008/08/01/525647.html http://blog.sina.com.cn/s/blog_a843a88 ...
- ArrayList常用方法
ArrayList常用方法 import java.util.*; public class JIHe04 { // ArrayList add 添加方法 public static void fun ...
- Oracle数据库的版本变迁功能对比
Oracle数据库自发布至今,也经历了一个从不稳定到稳定,从功能简单至强大的过程.从第二版开始,Oracle的每一次版本变迁,都具有里程碑意义. 1979年的夏季,RSI(Oracle公司的前身,Re ...
- MEF 编程指南(六):导出和元数据
声明导出解释了部件导出服务的基础知识和价值观(Values).有时候出于种种原因,导出关联信息是非常必要的.通常,用于解释关于功能公共契约的具体实现.允许导入满足约束要求的导出,或者导入所有可用的实现 ...
- 图像切割之(五)活动轮廓模型之Snake模型简单介绍
图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...
- 我经常使用的DOS命令參考
我经常使用的DOS命令參考 这个C:\>叫做提示符.这个闪动的横线叫做光标. 这样就表示电脑已经准备好,在等待我们给它下命令了.我们如今所须要做的,就是对电脑发出命令.给电脑什么 ...