首页 > 其他分享 >宏定义(C语言)

宏定义(C语言)

时间:2024-03-27 14:33:39浏览次数:17  
标签:定义 int demo value C语言 屏蔽 MUL define

1、宏定义一个两数相乘

#define MUL(a,b) a*b

代码如下:

#include <stdio.h>
#define MUL(a,b) a*b
int main()
{
    int value;
    printf("value = %d\n",MUL(2,4));
    return 0;
}

2、在虚拟机中运行,利用如下命令进行屏蔽屏蔽头文件,就可以完成宏替换。

gcc -E demo.c -o demo.i
vi demo.i

        结果如下:

完成了替换;

按照上面我们很容易算出,value = 8

那么好,我们增加难度,打印出

printf("value = %d\n",MUL(2,4+4);

很明显,这个答案是错误的。那么好,我们在屏蔽头文件看是什么情况。

屏蔽头文件,替换宏后我们发现,是2和4相乘,然后+4,导致了错误。

这也就是在宏定义过程中,通常会碰到的问题。

正确的宏定义如下:

#include <stdio.h>
#define MUL(a,b)  (a)*(b)
int main(){
    int value;
    printf("value = %d\n",MUL(2,4+4));
    return 0;
}

进行了正确的 替换:

输出也正确:

ps:作者在面试嵌入式的时候被问到要写一个标准宏,没答上来。

#define MAX(x,y) ((x) < (y)? (x):(y))             (完事查看面经才知道,标准宏应该这样写)

标签:定义,int,demo,value,C语言,屏蔽,MUL,define
From: https://blog.csdn.net/weixin_53061242/article/details/137055362

相关文章

  • var定义的全局变量与window的属性的区别
    https://blog.csdn.net/2201_75705263/article/details/129916155关系所有JavaScript全局对象、函数以及变量均自动成为window对象的成员全局变量是window对象的属性。全局函数是window对象的方法区别1.全局变量不能通过delete删除deletea;而windo......
  • 0基础 三个月掌握C语言(15)
    动态内存管理为什么要有动态内存分配我们已经掌握的内存开辟⽅式有:intval=20; //在栈空间上开辟四个字节chararr[10]={0};//在栈空间上开辟10个字节的连续空间但上述的开辟空间的⽅式有两个特点:•空间开辟⼤⼩是固定的。•数组在申明的时候,必须指定数组的......
  • C语言-实现文件操作
    0.前言:    我们知道下载东西,电脑上就会有各种的文件夹及文件里面的内容,那么文件里面的数据怎么通过编写程序来帮我们获取呢,这些文件又是怎么创建的呢?C语言给我们提供了一些可以操作文件的函数。这里我只列举了一部分操作文件的函数,使用这些函数需要引入头文件<stdlib.......
  • WPF自定义Panel:让拖拽变得更简单
       在WPF应用程序中,拖放操作是实现用户交互的重要组成部分。通过拖放操作,用户可以轻松地将数据从一个位置移动到另一个位置,或者将控件从一个容器移动到另一个容器。然而,WPF中默认的拖放操作可能并不是那么好用。为了解决这个问题,我们可以自定义一个Panel来实现更简单的拖......
  • 在创建的Vue工程中使用el-radio定义单选框,点击不显示效果
    之前在vue工程中的组件时下面这样的<template><el-radiov-model="radio"value="0">男</el-radio><el-radiov-model="radio"value="1">女</el-radio></template> 结果是点击不显示已选中 需要在script中引入vu......
  • 如何使用极狐GitLab 自定义 Pages 根域名
    本文作者:徐晓伟GitLab是一个全球知名的一体化DevOps平台,很多人都通过私有化部署GitLab来进行源代码托管。极狐GitLab是GitLab在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。本文主要讲述了极狐GitLabPages使用独立于极狐GitLab的根域名。配置......
  • WPF中自定义按钮实现最大化最小化动画过度效果
    需要使用WindowsAPI[DllImport("user32.dll",EntryPoint="SetWindowLong")]privatestaticexternintSetWindowLong32(HandleRefhWnd,intnIndex,intdwNewLong);[DllImport("user32.dll",EntryPoint="SetWindowLongPtr"......
  • C语言实现游戏——三子棋
    三子棋是一种民间传统游戏,又叫九宫棋、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利,而对方就算输了,但是三子棋在很多时候会出现和棋的局面。今天我们就来用C语言来实现一下这个游戏游戏分解:本文采用分文件编写的模式,实......
  • 【C语言】数组(一维、二维数组的简单介绍)
    数组(Array)数组概念数组是一组相同数据类型元素的集合,属于一种简单的数据结构,从中可以得到三个有效信息数组元素是同一数据类型的变量数组存放一个或者多个数据,但是数组元素个数不能为0数组中各元素可独立作为一个基本变量使用注:数组分为一维数组和多维数组,多维数组一......
  • 定义和调用传统方法
    publicclassDao{//--------自定义传统方法1------//返回值类型,方法名,形参publicstaticvoidprintBook(Stringname){if(name.equals("孔子")){System.out.println("孔子的代表作《论语》");return;}else......