如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节
发布日期:2022-02-18 13:08:15 浏览次数:8 分类:技术文章

本文共 4922 字,大约阅读时间需要 16 分钟。

C语言中宏定义使用的小细节

#pragma#pragma 预处理指令详解

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和 C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。

其格式一般为: #Pragma Para

.............etc..

baike.baidu.com/view/1451188.htm

=======================

强制使用函数而不是宏定义的两种方法:

1: #undef isalpha

出现在isalpha()之前,并且在文件顶部依然包含了.可以强制编译器使用函数定义.

2:(isalpha)(c)

预处理器不会把这个结构当做宏,而是当做函数调用

时间: 2013-05-12

6b5aa0751a6f1e6a9d0b665a02cc1f46.gif

1.如何区分宏定义中的"宏名称"和"宏字符串"?对于带参数的宏又该注意什么? 在宏定义中,"宏名称"和"宏字符串"是通过"空格"来区分的.编译器在处理时宏定义时,首先从"#define"后第一个空格开始读取字符串,直到遇见下一个空格为止,两个空格之间的字符串为"宏名称",确定好"宏名称"之后,本行的所有其他字符串都为"宏字符串"

编写代码的过程中,经常会输出一些调试信息到屏幕上,一般会调用printf这类的函数.但是当调试解决之后,我们需要手工将这些地方删除或者注释掉.最近在看这本书,就想到一个方法: 复制代码 代码如下: void myprintf(char* fmt, ...){}#ifdef DEBUG#define printf(fmt, args...) myprintf(fmt, ##args)#endif 调试阶段带着DEBUG调试,正式上线就可以把printf变成一个空函

含有if的宏定义当宏定义中含有 if 时1) 定义如下宏#define DC(p) if( foo(p) )fun(p)用在下面的环境中if(k>n)DC(k);elseDC(n);宏替换后,如下if(k>n)if( foo(k) )fun(k);elseif( foo(n) )fun( n );可见, 原来的 if 和 else 不再配对.2) 为了避免这类问题, 我们可以将包含if语句的宏定义为一个整体.#define DC(p) {if( foo(p) ) fun(p);}但是, 替换后

复制代码 代码如下: #ifndef QGLOBAL_H#define QGLOBAL_H #define QT_VERSION_STR   "3.1.2"/*   QT_VERSION is (major << 16) + (minor << 8) + patch. */#define QT_VERSION 0x030102 /*   The operating system, must be one of: (Q_OS_x) MACX - Mac OS X

用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会: 3.内联函数可以访问类的成员变量,宏定义则不能: 4.在类中声明同时定义的成员函数,自动转化为内联函数.文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义.例如: #define MAX(a,b) ((a)>(b)?(a):(b)) 该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)

在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数.表达式.格式串等.在编译预处理时,对程序中所有出现的"宏名",都用宏定义中的字符串去代换,这称为"宏代换"或"宏展开".宏定义是由源程序中的宏定义命令完成的.宏代换是由预处理程序自动完成的.若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢? 我们以下面两行代码为例,展开描述:函数式宏定义:#define MAX(a,b) ((a)>

喜欢读一些开源项目源码的人,总是会发现,大神的代码中总是有那么一些简短而高效的宏定义,点击进去一看,发现晦涩难懂,别说学习了,有时候理解都是一种困难,但是宏定义本身并没有那么难,但是写出一个好的宏当然还是需要丰富的经验和技术,接下来就说一说宏定义,看懂大神的宏是第一步,偶尔写一个也是装逼的好办法- 定义: 宏定义分为两种:一种是对象宏(object-like macro)另一种就是函数宏(function-like macro) 根据名字也可以理解到,对象宏就是用来定义一个量,通过这个宏可以拿到

先简明扼要,说下关键:1.内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快. 2.内联函数可以调试,而宏定义是不可以调试的.内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline.下面详细介绍一下探讨一下内联函数与宏定义. 一.内联函数是什么?内联函数是代码被插入到调用者代码处的函数.如同 #define 宏(但并不等同,原因见下文),内联函数通过避免被调用的开销来提

内联函数的优越性:一:inline定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换(像宏定义一样展开),没有了调用的开销,效率很高.二:类的内敛函数是一个真正的函数.三:使用内联函数inline可以完全取代表达式形式的宏定义. 例子: 复制代码 代码如下: Class A{public:int readTest(){return nTest:}void setTest(int i);};inline void A::setTest(int i){nTest=i;}; 说明:类A

#define 命令#define定义了一个标识符及一个串.在源程序中每次遇到该标识符时,均以定义的串代换它.ANSI标准将标识符定义为宏名,将替换过程称为宏替换.命令的一般形式为: #define identifier string 注意: 1.该语句没有分号.在标识符和串之间可以有任意个空格,串一旦开始,仅由一新行结束. 2.宏名定义后,即可成为其它宏名定义中的一部分. 3.宏替换仅仅是以文本串代替宏标识符,前提是宏标识符必须独立的识别出来,否则不进行替换.例如: #define XYZ t

1. 单行导入与多行导入 在 Go 语言中,一个包可包含多个 .go 文件(这些文件必须得在同一级文件夹中),只要这些 .go 文件的头部都使用 package 关键字声明了同一个包. 导入包主要可分为两种方式: 单行导入 import "fmt" import "sync" 多行导入 import( "fmt" "sync" ) 如你所见,Go 语言中 导入的包,必须得用双引号包含,在这里吐槽一下. 2. 使用别名 在一些场

内存四区 1.代码区 代码区code,程序被操作系统加载到内存的时候,所有的可执行代码都加载到代码区,也叫代码段,这块内存是不可以在运行期间修改的. 2.静态区 所有的全局变量以及程序中的静态变量都存储到静态区. 3.栈区 栈stack是一种先进后出的内存结构,所有的自动变量,函数的形参都是由编译器自动放出栈中,当一个自动变量超出其作用域时,自动从栈中弹出.对于自动变量,什么时候入栈,什么时候出栈,是不需要程序控制的,由C语言编译器.实现栈不会很大,一般都是以K为单位的. 当栈空间以满,但还往栈

题主要区分清楚内码(internal encoding)和外码(external encoding)就好了. 内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码: 外码是程序与外部交互时外部使用的字符编码."外部"相对"内部"而言:不是char或String在内存里用的内部编码的地方都可以认为是"外部".例如,外部可以是序列化之后的char或String,或者外部的文件.命令行参数之类的. Java语

C语言中的符号常量 在结束讨论温度转换程序前,我们再来看一下符号常量.在程序中使用 300.20 等类似的"幻数"并不是一个好习惯,它们几乎无法向以后阅读该程序的人提供什么信息,而且使程序的修改变得更加困难.处理这种幻数的一种方法是赋予它们有意义的名字.#define 指令可以把符号名(或称为符号常量)定义为一个特定的字符串: #define 名字 替换文本 在该定义之后,程序中出现的所有在 #define 中定义的名字(既没有用引号引起来,也不是其它名字的一部分)都将用相应的替换文本

各种数据存放在磁盘或内存中都有其不同的存放格式,因此就存在不同的数据类型.了解各种数据的特性,对编程开发来说是十分重要. 程序中经常会进行一些运算,易语言中的运算都要使用运算符进行识别处理,并通过运算表达式来完成运算操作.程序中对各数据之间的关系的描述也要通过运算符. 1.易语言的数据类型 一个程序内部应包括两个方面的内容:1.数据的描述.2.操作步骤,即对程序动作的描述. 数据是程序操作的对象,操作的结果会改变数据的内容.打个比方:要做一道菜,做菜前先选择烹饪的原材料(即对数据进行描述),然后

1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:   函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成.这就是程序设计的基本分化方法: (1) 写一个函数的关键: 函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能: 函数声明:函数声明也称函数原型声明,函数的原

结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针. 结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针. 1. 自引用 结构体 1.1 不使用typedef时 错误的方式: struct tag_1{ struct tag_1 A; /* 结构体 */ int value; }; 这种声明是错误的,因为这种声明实际上是一个无限循环,成员b是一个结构体,b的内部还会有成员是结构体,依次下去,无线循环.

if 语句 用 if 语句可以构成分支结构,它根据给的条件进行判定,以决定执行哪个分支程序段. C 语言的 if 语句有三种基本形式 第一种形式: if(条件表达式) { 语句1: } if(条件表达式) { 语句1: } 这种形式运行顺序为:当条件表达式为真,执行语句1,否则,直接跳过语句1,执行后面的语句. 例子1: BOOL result = YES: if(result) { printf("result is true\n"); } BOOL result = YES: if

在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include #include //该程序的功能是 输入阿拉伯数字的月份数 输出英文月份 int main() { //一个字符串数组 它的下标代表英文月份的阿拉伯数字 char *month[] = {"January","Februa

转载地址:https://blog.csdn.net/weixin_28871097/article/details/117057271 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android 数据库索引,SQLite数据库提供警告自动索引(列)升级Android L后
下一篇:c语言计算器实训任务案例,C/C++经典实例之模拟计算器示例代码

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年02月29日 07时38分37秒