ifdefine编译
A. #pragma once和ifdefine的区别
单个头文件#programa once比#ifndef……#define……#endif方便点,不过有些编译器不支持,还有就是如果你#ifndef AAA ……, 而你这个AAA在另一个头文件已经有过宏定义,那么你这个头文件下面的内容就包含不进去了。如果你确实只要一个那还是用#ifndef AAA……#define……#endif,两者各有好处,#ifndef……#define……#endif灵活一点,#programa once方便一点
B. verilog怎样控制 ifdefine的编译
`define
是宏定义,全局作用的,而且不受语意限制。你甚至可以定义半截的字符串出来。但是使用的时候才会做展开。
举例而言,如果你定义一个宽度信息为:
`define
range
2:3
然后在使用的时候`include这个文件,range就可以解析了。
wire
[`range]
bus;
parameter是模块内常量定义,仅限于常量。一般的工具对于parameter的支持力度更好,毕竟是语意可以识别的。而`define的支持仅仅限于parse阶段,不会流入到elaboration阶段。但是如果把``define的使用场景都改为parameter会造成不必要的变量的引入。
目前一般使用`define的地方一般是全局化的configuration阶段。比如说对整个ip的配置信息,一个ip应该满足不同的soc的需求提供不同的配置。
C. #ifdefine 问题
应该按照#include的顺序
可以肯定不是找整个工程或方案
因为如果是那样的话,下面这种应用就不会成立了
#ifndef XXXX
#define XXXX
//只编译一次
#endif
D. c++中如何定义符号变量
在C++中,要定义一个常量,有两种主要的做法
1.
符号常量
(#define)
2.
常值变量
(const)
符号常量的定义方式,其实与C++本身没有关系,它是一个编译器指令,或者称为预处理指令(有关的预处理指令还有#include,#ifdefine等等)。它的用法如下
#define
PI
3.1415926
这样的语法就定义了一个叫做PI的符号常量,它的值指定为3.1415926.
【注意】因为它其实不是C++语法,所以它不需要(也不能)用分号结束。
E. endif,ifend,ifdefine,define,ifndefine这几个分别什么意思在数据结构编程里面
这些符号是条件限定宏,不仅仅用在数据结构编程中,它们在类的头文件声明,dll编程,判断编译环境和平台,甚至可用在某个代码片段中,以便程序的调试等。他们的用法很灵活,但含义其实和if else差不多,多编写和阅读代码,你很快就会掌握!
F. verilog怎样控制 ifdefine的编译
条件编译
一般情况下,源程序中的所有的行都参加编译。但是有时希望对其中一部分内容只在一定条件下进行编译,当条件不满足则编译另一组语句
#ifdef 标识符
程序段1
#else
程序段2
#endif
作用:已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2
例子:
#define N 10
main() {
#ifdef N
printf("N defined!\n");
//程序段一
#else
printf("N isn't defined!\n");
G. ifdefine endif用法
先看个例子
#define N 10
main()
{
#ifdef N
printf("N defined!\n");//程序段一
#else
printf("N isn't defined!\n");//程序段二
#endif
}
由于程序已经定义了N,所以编译时将会把程序段一编译时可执行文件,程序段二不会被编译进可执行文件中,
如果你把定义N的语句删除,则编译时只会编译程序段二了。
