在写到  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的用法总结的更多相关文章

  1. #ifndef#define#endif的用法

    在网上看到了感觉作者总结得很好,作者辛苦了! #ifndef#define#endif的用法 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都 ...

  2. #ifndef#define#endif的用法(整理)

    [转] #ifndef#define#endif的用法(整理)    原作者:icwk  文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都in ...

  3. c/c++头文件中#ifndef/#define/#endif的用法

    想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...

  4. #ifndef#define#endif的用法-b

    The special operator defined is used in #if and #elif expressions to test whether a certain name is ...

  5. #ifndef #define #endif 的用法

    1.文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来 ...

  6. [转] #ifndef#define#endif的用法(整理) 原作者:icwk

    文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了, ...

  7. 【转载】C/C++中#ifdef和#endif的用法

    转于 http://www.cnblogs.com/renyuan/archive/2013/05/22/3092362.html 今天笔试的时候遇到这个问题,整理一下! 一般情况下,源程序中所有的行 ...

  8. <!--[if IE]>….<![endif]--> (<!--[if !IE]>||<![endif]-->)的用法

    1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> 2. <!--[if IE]> 所有的IE可识别 ...

  9. #ifdef #else #endif 的用法

    预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作.说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译.这样做的好处是,经过处理后的代码,将会变的很精短. 关 ...

随机推荐

  1. Web开发人员需知的Web缓存知识

    最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...

  2. 高版本myeclipse破解以及优化

    1.破解图 破解myeclipse但是在默认安装目录没有发现common文件夹,该怎么办? 打开myeclipse:  Myclipse-->Installation Summary...,   ...

  3. poj 2349 Arctic Network

    http://poj.org/problem?id=2349 Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submis ...

  4. codeforce 630N Forecast

    N. Forecast time limit per test 0.5 seconds memory limit per test 64 megabytes input standard input ...

  5. Spring Controller参数为空串的处理方式

    控制器参数为String类型 Spring框架接收到传入的空串后,此参数被赋值为空串,不为null. 控制器参数为非String类型 Spring框架接收到传入的空串后,此参数被赋值为null.

  6. MVC4学习过程记录

    终于决定开始尝试Web开发,即是为了工作也是为了自己的兴趣,决定还是从MS的MVC4开始. 首先从Asp.Net MVC4入门指南这个系列开始学习(http://www.cnblogs.com/pow ...

  7. IE取消访问剪贴板设置

    1. 启动IE. 2. Internet选项. 3. “安全”选项卡. 4. 自定义级别. 5. “安全设置-Internet区域”->脚本->允许对剪贴板进行编程访问(启用)

  8. 【多校练习4签到题】HDU 4642—— Fliping game

    来源:点击打开链接 看上去很难,比赛的时候光看hehe了,也没有想. 但是仔细想想,是可以想出来的.一个棋盘上每个格子摆放一个硬币,硬币有正面1和反面0之分.现在两个人可以按照规则翻硬币,选择(x,y ...

  9. C语言根据日期取其位于一年中的第几天

    #include <iostream> #include <stdlib.h> using namespace std; bool isLeapYear( int iYear ...

  10. 在linux下编译netcat并且反弹cmdshell(转载)

    本地Windows监听 nc -vv -l -p 1234   首先从sf上get一个tar的压缩包 wget http://sourceforge.net/projects/netcat/files ...