⑴ 在C语言中 宏定义是什么
在C语言源程序中,允许用一个标识符来表示一个字符串,称为宏,宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的。宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。
宏(Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式。
计算机语言如C语言或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C语言的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C程序员可以获得更精巧的宏。
⑵ 几个编译器内置的c++宏定义的使用例子
#include"stdafx.h"
#include<iostream>
usingnamespacestd;
int_tmain(intargc,_TCHAR*argv[])
{
cout<<"sizeof(wchar_t)="<<sizeof(wchar_t)<<endl;
cout<<"sizeof(char)="<<sizeof(char)<<endl;
//__LINE__
cout<<"__LINE__:在源代码中插入当前源代码行号="<<__LINE__<<endl;
//__FILE__
cout<<"__FILE__:在源文件中插入当前源文件名="<<__FILE__<<endl;
//__DATE__
cout<<"__DATE__:在源文件中插入当前编译日期="<<__DATE__<<endl;
//__TIME__
cout<<"__TIME__:在源文件中插入当前编译时间="<<__TIME__<<endl;
//__FUNCTION__
cout<<"__FUNCTION__:在源文件中插入函数名="<<__FUNCTION__<<endl;
//__STDC__:当要求程序严格遵循ANSIC标准时该标识被赋值为1;
//__cplusplus:当编写C++程序时该标识符被定义。
system("pause");
return0;
}
⑶ C语言中的宏定义有什么用
您好!很高兴为您解答。
宏定义的用处主要体现在便于程序的调试上。
比如我要写一个计算圆相关信息(周长、面积等等)的程序,需要定义π(3.14):
#define PI 3.14
那么势必PI这个标识可以在程序中代替所有的3.14,如果我发现计算的精度不够,需要π的更多有效位时,则只需将宏定义修改为:
#define PI 3.1415926
那么程序中的所有PI都会变成3.1415926
可想而知,没有宏定义,我需要将代码中全部的3.14都手动改为3.1415926
即使是定义double PI=3.14;,你会发现当代码很长时,在乱军丛中找到一行“double PI=3.14;”是多么困难的事。
又比如数组,定义时是不能出现“int a[n];”这样的定义的,编译通不过,因为必须规定数组长度。
但如果是:
#define N 10
int a[N];
就可以,对宏定义编译器是不作检查的,应为宏定义只是简单的符号替换。所以一旦我还没有确定要定义多长的数组,但又想通过编译时,就可以提现宏定义的用处了。
如此看来,宏定义提升了程序编写的灵活性。
望采纳~如您还有不解,欢迎追问~
⑷ 宏定义c语言是什么意思
在C语言源程序中,允许用一个标识符来表示一个字符串,称为宏,宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的。宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。
C语言中,预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换,预处理过程还会删除程序中的注释和多余的空白符号。
预处理指令是以#开头的代码行,#必须是该行除了空白字符外的第一个字符。#后是指令关键字,在#和指令关键字之间允许存在若干空白字符。
宏的用途
在于自动化频繁使用的序列或者是获得一种更强大的抽象能力。
计算机语言如C语言或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C语言的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C程序员可以获得更精巧的宏。
Lisp类语言如Common Lisp和Scheme有更精巧的宏系统:宏的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。一个C宏可以定义一段语法的替换,然而一个Lisp的宏却可以控制一节代码的计算。
以上内容参考:网络-宏定义
⑸ 关于stm32f1ox.h头文件启动代码与编译器里的宏定义
stm32f107vc属于互联性器件,他的启动文件应该是.cl。对于启动文件有ji个, .ld .md .hd .cl .xl rbt6选用的是md 可以在keil c++ 宏定义那边说明STM32F10X_CL, 或者在stm32f10x。h中找到 #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) #define STM32F10X_MD #endif 如果用的是rbt6 如上,如果用的是107 将cl打开 同时我们会看到我们启用了外部的25M晶振, 外部时钟频率选择 #if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) #else #define HSE_VALUE ((uint32_t)8000000) #endif #endif 最后将.cl启动文件添加到工作组中。
⑹ 编译器有没有宏定义32位和64位
第一步被换为area=a*b。宏定义末尾不加分号,减少输入错误和便于修改。宏替换在编译前进行,不做表达式求解函数调用在编译后程序运行时进行,只占编译时间。 除了一般的字符串替换,函数调用不会。 宏展开不占运行时间,不分配内存。
⑺ C语言中的宏定义如何使用
宏定义又称为宏代换、宏替换,简称"宏"。
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为"宏名"。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是"换"。一切以换为前提、做任何事情之前先要换,准确理解之前就要"换"。
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:
#define Pi 3.1415926
把程序中出现的Pi全部换成3.1415926
⑻ java有宏定义这个东西吗
Java有宏定义。
C语言的宏定义,在Java也有相应的表达方式,即公共静态方法即可,public static 的类方法就可以了。在Java中,要定义常量的话,可以在类中使用 public static final 。比如: public static final int PI = 3.14159;//java.lang.Math.PI差不多就应该是这么定义的。
计算机科学里的宏
是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。
宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。
⑼ 什么是宏定义
宏定义是高级语言编译器提供的常用语法,其目的是利用某一标识符标识某个文本字符串。在编写程序时,如果程序中反复地使用某个数据或某段程序片段,就可以考虑将这个数据或程序片段定义为宏,然后每个出现该数据或程序片段的地方用宏名替代
选择宏定义来做的好处是程序简洁,可读性好,而且当需要修改这些相同的程序片段时,只要修改宏定义中的字符串即可,不需要修改多处。
(9)宏定义编译器扩展阅读:
参宏定义中#的用法:
#defineSTR(str) #str
#用于把宏定义中的参数两端加上字符串的""
比如,这里STR(my#name)会被替换成"my#name",一般由任意字符都可以做形参,但以下情况会出错:
STR())这样,编译器不会把")"当成STR()的参数。STR(,)同上,编译器不会把","当成STR的参数。STR(A,B)如果实参过多,则编译器会把多余的参数舍去。
(VC++2008为例)STR((A,B))会被解读为实参为:(A,B),而不是被解读为两个实参,第一个是(A第二个是B)。
⑽ 宏定义到底是什么啊有哪位大神可以解释一下吗
宏(Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。