编译提示宏重定义
‘壹’ 编译C程序出现多重定义,怎么解决
应该是你在2个c文件中都定义了全局的MmiUtil_WaitKeyMenu,可以声明为static,或者改个名字
‘贰’ C++宏可以被多次重新定义吗
不可以,只能这样:
#ifndef A
#define A 10
#endif
....
如果需要重新定义,要这样,先取消定义,再重新定义:
#ifdef A
#undef A
#endif
...
#ifndef A
#define A 20
#endif
‘叁’ winuser.h和resource.h宏重定义问题
跟你装同时vc6和2010没关系。找到你IDOK的按钮把标识符改一下就成了,再把resource.h中的删除掉。
‘肆’ 带参数的宏定义这样声明编译报错,怎么回事
1.用sbit先声明一下变量,比如sbit LED=P2^0,然后在用宏
‘伍’ 计算机编译系统对宏定义在编译时进行语法检查这句话为什么错
第一步被换为area=a*b。
宏定义末尾不加分号,减少输入错误和便于修改。宏替换在编译前进行,不做表达式求解函数调用在编译后程序运行时进行,只占编译时间。
除了一般的字符串替换,函数调用不会。
宏展开不占运行时间,不分配内存。
宏的哑实结合不存在类型,作用域为其后的程序,还要做参数代换。
格式:数组大小常用宏定义。
预处理是在编译之前的处理。
宏定义又称为宏代换;
",利用宏则可以设法得到多个值。
宏展开使源程序变长。
函数只有一个返回值,预处理不做语法检查。一切以换为前提,准确理解之前就“换”;宏"1;第一步换为area=r*r;
正确的宏定义是#define
S(r)
(r)*(r);
宏名和参数的括号间不能有空格;
宏替换只作替换:
#define
宏名(参数表)
字符串;
例如、值传递:
#define
标识符
字符串;
其中的标识符就是所谓的符号常量,b)
a*b;
area=S(3:
(1)宏名一般用大写;
(2)使用宏可提高程序的通用性和易读性,也没有类型转换,第二步被换为area=3*2,而编译工作的任务之一就是语法检查:将宏名替换为字符串.带参数的宏、做任何事情之前先要换,并且分配内存。
预处理(预编译)工作也叫做宏展开;中永远不包含宏。
(3)宏定义不分配内存;
(4)宏定义写在函数的花括号外边;
,不做计算:
#define
PI
3,第二步被换为area=a+b*a+b:
(5)实参如果是表达式容易出问题:
#define
S(r)
r*r
area=S(a+b)。
即在对相关命令或语句的含义和功能作具体分析之前就要换;
类似于函数调用。
格式.1415926。
把程序中出现的PI全部换成3。
(6)可以用#undef命令终止宏定义的作用域。
(7)宏定义可以嵌套。
(8)字符串",变量定义分配内存,通常在文件的最开头。1415926说明,也称为“宏名”,简称“宏”、宏替换。
‘陆’ 制作的宏启用时提示编译错误
ActiveSheet.Pictures , Insert
这里应该不是逗号,应该是点。
ActiveSheet.Pictures.Insert
‘柒’ c语言中怎样修改宏定义呢
什么意思?是在定义宏后的程序代码中改,还是在编辑宏定义的时候该?
如果是前者,宏定义是在预编译时是就决定的,在程序运行时是不能改的;如果是后者,直接改就行了。
‘捌’ 为什么编译器会提示重定义
这种情况并不会报重定义
所以一定是在你的project里面定义了其它同名函数
你可以试试把你的函数定义和调用都改成一个你平时不用的名字
另外说一句,c语言不会生成任何默认函数或者变量,它就是这么弱智
‘玖’ c语言,说宏展开是在编译时进行的,啥意思啥叫编译时进行的
c语言编写出来的代码叫源代码,是供人看的,如果想让机器执行,需要转换成机器语言,这个转换过程就叫编译。
在c语言中定义的宏,在编译时,会展开(或叫替换)为实际的语句,如:
#define MAX 100
void main()
{
int a=MAX ;
printf("a=%d\n", a );
}
这里MAX是个宏,当编译时,这段代码就会变成:
void main()
{
int a=100; //这里的MAX会变成100
printf("a=%d\n", a );
}
这就是宏展开、宏替换,然后编译器,按这样子的源代码进行编译,生成执行程序
‘拾’ (C语言)定义宏 以防止重复包含此头文件 这句话是什么意思
当1个C语言程序由 多个 源程序文件 组成时,由于每个 源程序文件 都有 #include <...>
#include "...h", 最终它们可能形成交叉 包含 和 重复包含 现象 而造成错误。
为了避免这种情况发生,可以 采用 定义宏 的方法 把各个头文件 包起来。
编译器 在正式编译的开始,现处理 宏 -- 也就是“预编译命令".
用 宏(#号开始的行) 把 头文件内容 包起来:
#ifndef _HEADER_One_H_ // 意思是:宏开始行,如果还没有定义 _HEADER_One_H_ 则 进入,否则退出
#define _HEADER_One_H_ //定义 _HEADER_One_H_//
header1.h
头文件内容
#endif // 宏结束行