请教高手们,宏定义的变量的值能printf出来吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教高手们,宏定义的变量的值能printf出来吗相关的知识,希望对你有一定的参考价值。
C程序中,我想弄清楚宏定义的变量的值,能不能用printf打印出来呢,如果可以的话,在printf语句中类型怎么定义的?
我提到的宏定义如下:
#define PCBROADCAST_IOC_MAGIC 'c'
#define PCBROADCAST_IOCSPARAM _IO(PCBROADCAST_IOC_MAGIC, 1)
想打印PCBROADCAST_IOCSPARAM的值。
#define abc 1234567890
void main(void)
printf("%d",abc);
输出是1234567890。
至于你说的在printf语句中怎么定义类型的问题,要这样理解:要按照你的需要选择输出语句的数据类型控制符。机器内部其实就没有什么类型的区别,你愿意用什么样的类型输出都行。只是类型不匹配了输出的内容就变样了,但并没有“错”。比如你要输出PCBROADCAST_IOC_MAGIC,如果你用控制符%c,打出来就是c;若用控制符%d,那打出来就是99。但这都没错。你要想输出PCBROADCAST_IOCSPARAM的值,要想匹配的话,那要看后面的函数_IO(PCBROADCAST_IOC_MAGIC, 1)(是函数吧?看着像)返回什么类型的值了,而且这值是不是能打印的符号!
有一点要明白,你题中的说法有点问题,宏定义的不是变量而是符号。定义变量是要在内存中分配存储单元的,而宏定义不分配内存,只是个替代符号——在宏定义以后的程序中用前面的字符串代替后面的字符串!所以它没有类型也不需要类型,后面那个字符串的类型是什么,那么前面那个替代字符串的类型也就是什么。你打印时写PCBROADCAST_IOCSPARAM与写_IO(PCBROADCAST_IOC_MAGIC, 1)是没有任何差别的! 参考技术A 一般可以的,但是符号是不能打印的,像整型什么的,是可以的!
c++ 在编译时对define所定义的变量是怎么处理的?
我知道普通的变量和函数,好像是在编译的时候会生成一个Obj的目标文件!那#define EXT 4;之类的怎么处理呢
宏定义在编译的时候进行替换。#define EXT 4 不安全,建议修改成 #define EXT (4)追问
那有很多文件都有#define EXT 4这个呢?但是不同的文件又对EXT的定义不同怎么办?
追答你需要相同还是不同?
如果需要定义相同,定义在一个同文件,其他使用文件包含此同文件即可。
如果需要定义不同,1: 修改各个宏,保证名字不同,这样风险低。
2: 不用修改宏,但保证各个文件相互无包含。那么宏仅仅作用于自身所在文件。
那有很多文件都有#define EXT 4这个呢?但是不同的文件又对EXT的定义不同怎么办?
追答#define EXT 4 的有效范围仅限于定义文件。
参考技术B 对define处理是在编译之前进行的.会把所有的EXT都替换为4.追问
那有很多文件都有#define EXT 4这个呢?但是不同的文件又对EXT的定义不同怎么办?
追答各自用各自的啊.
参考技术C 这种情况它不叫变量,也不是常量,只是简单字符串代替,编译的时候换回去,这样做只是为了编写和阅读代码更方便更易懂以上是关于请教高手们,宏定义的变量的值能printf出来吗的主要内容,如果未能解决你的问题,请参考以下文章
求助!请教VBA高手! 有没有哪位高手有编制过调用翻译软件实现在excel中,英文译成中文的?