第1个回答 2022-10-20
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
windows C 程序设计中,常用的宏有哪些?
如何定义的?
解析:
C语言中没有宏语句,对宏主要的作用就是以下两个方面,其他的高级作用较难操作,如microsoft公司在MFC中实现的消息映射就是一个很好的例子:
1.多次包含头文件的问题
当你的工程文件很多的时候,就会出现这样的问题:
a.c:
#include "a.h"
#include "b.h"
...
a.h:
#include "b.h"
#include <stdio.h>
...
b.h:
#include <stdio.h>
...
很显然,你在编译a.c的时候,就会造成重复包含头文件的问题。
这个问题有什么危害呢?浪费时间倒是小问题,最大的危害就是:造成重复定义,有可能让你编译失败。
为了避免这个问题,就得用到条件编译
#ifdef
...
#endif
或者
#ifndef
...
#endif
我个人喜欢的作法是这样的:
a.h:
#ifndef _A_H_
#define _A_H_
#include <stdio.h>
#include "b.h"
...
#endif
至于这是什么意思,为什么,怎么用,嘿嘿,看书去。
2.调试问题。
大家在写程序的时候会经常出一些问题,而单步调试速度太慢。
一般常用的作法是在程序的中间加一些printf函数,把某些变量的值打印出来,看看程序在这里是不是正常。
但是当需要生成最终程序的时候,又需要删掉这些printf;如果以后再修改,又要加上……太烦了!!
于是条件编译就成为好帮手了。
比如:
a.c:
#include <stdio.h>
int main()
{
int a=1;
int b=2;
#ifdef _DEBUG_
printf("a=%d,b=%d\n",a,b);
#endif
return 0;
}
我用的是GCC,这样编译:
gcc -D _DEBUG_ a.c -o a.exe
运行a.exe,就会得到a=1,b=2这样的结果。
我再编译
gcc a.c -o a.exe
再运行a.exe,嘿嘿,什么都不输出了。