#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 的用法
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作.说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译.这样做的好处是,经过处理后的代码,将会变的很精短. 关 ...
随机推荐
- 精通Linux的“kill”命令
无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭.在Linux(还有Mac),你可以用一个"kill"命令强制终结它.在这个教程中,我们将展示给你多种 ...
- 解读XMP元数据中ALAssetRepresentation
当用户进行某些更改(裁剪,消除红眼,...),在内置 Photos.app iOS上,这些更改将不会应用到由相应 fullResolutionImage 返回的 ALAssetRepresentati ...
- freemarker截取字符串subString
转至:http://fengzhijie1103.iteye.com/blog/1142918 freemarker截取字符串其实和JAVA语法是差不多了,也有substring 方法 如 ...
- Hibernate 中createQuery与createSQLQuery
本文原址 : http://stta04.javaeye.com/blog/377633 hibernate 中createQuery与createSQLQuery 昨晚帮同事看代码到凌晨2点多,今早 ...
- ssh 调优参数
#PermitRootLogin no 建议禁止它远程登录能力 #PermitEmptyPasswords no 禁止空密码登录 #UseDNS no 指定sshd是否应该对远程主机名进行反向 ...
- C语言快排
C语言使用快排的方式有两种,1.直接用库函数stdlib.h里的qsort函数 2.自己编写快排代码(第一种方便,第二种较为自由) qsort 的函数原型是:void qsort(void*base, ...
- 使用 Tomcat 7 新的连接池 —— Tomcat jdbc pool
Tomcat 在 7.0 以前的版本都是使用 commons-dbcp 做为连接池的实现,但是 dbcp 饱受诟病,原因有: dbcp 是单线程的,为了保证线程安全会锁整个连接池 dbcp 性能不佳 ...
- 解决Android上的QPython不能import urllib的问题
试用了一下QPython,感觉很强大,Kivy也包含进去了,下载一些第三方库也很方便,相对于SL4A来说确实先进了很多. 但是很快发现不能import urllib,提示大概是这样的内容: No mo ...
- Treeview1列表拒绝添加重复信息
function ItemExist(Text:string;TreeView:TTreeView):Boolean; var i: Integer; begin Result:=False; ...
- [MODx] 2. Install some useful packages into ur MODx
1. The package we might need: 2. Install the package: Select Installer Download Extras Install the p ...