条件编译ifndef、ifdef、endif

1、条件编译命令最常见的形式为:    

    #ifdef 标识符 
    程序段1 
    #else 
    程序段2 
    #endif 

当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。 其中#else部分也可以没有,即: 

1     #ifdef 
2     程序段1 
3     #endif 

2、条件编译命令另一种形式:    

1     #ifndef 标识符 
2     程序段1 
3     #else 
4     程序段2 
5     #endif 

只是第一行与第一种形式不同:将“ifdef”改为“ifndef”。它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。这种形式与第一种形式的作用相反。

3、条件编译的例子

我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译:

1     #ifdef WINDOWS 
2     #define MYTYPE long 
3     #else 
4     #define MYTYPE float 
5     #endif 
6      

如果在Windows上编译程序,则可以在程序的开始加上 

1     #define WINDOWS 

    这样则编译下面的命令行: 
    #define MYTYPE long 
     
如果在这组条件编译命令之前曾出现以下命令行: 
    

1     #define WINDOWS 0 

    则预编译后程序中的MYTYPE都用float代替。

 

通常对于顶层的程序使用下面两条语句保证

底层程序中的条件编译的正常执行!

1      `ifndef GUARD_INTERFACE
2      `define GUARD_INTERFACE

4、verilog中的条件编译的例子

// Style #1: Only single `ifdef
`ifdef <FLAG>
  // Statements
`endif
 
// Style #2: `ifdef with `else part
`ifdef <FLAG>
  // Statements
`else
  // Statements
`endif
 
// Style #3: `ifdef with additional ifdefs
`ifdef <FLAG1>
  // Statements
`elsif <FLAG2>
  // Statements
`elsif <FLAG3>
  // Statements
`else
  // Statements
`endif

 

posted on 2016-04-25 14:12  hematologist  阅读(779)  评论(0编辑  收藏  举报

导航