当前位置: 首页 > news >正文

C语言宏定义笔记

  1. 把宏名全部大写,函数名不要全部大写。
  2. 注意宏定义表示数据类型和用 typedef 定义数据说明符的区别。宏定义只是简单的字符串替换,由预处理器来处理; typedef 是在编译阶段由编译器处理的,它并不是简单的字符串替换,而给原有的数据类型起一个新的名字,将它作为一种新的数据类型。
  3. #define 宏名(形参列表) 字符串,这与函数的调用是不同的,函数调用时要把实参表达式的值求出来再传递给形参,而宏展开中对实参表达式不作计算,直接按照原样替换。
  4. 带参数的宏和函数很相似,但有本质上的区别:宏展开仅仅是字符串的替换,不会对表达式进行计算;宏在编译之前就被处理掉了,
    它没有机会参与编译,也不会占用内存。
  5. 函数是一段可以重复使用的代码,会被编译,会给它分配内存,
    每次调用函数,就是执行这块内存中的代码。
#include <stdio.h>
#include <stdlib.h>#define SQ(y) y*y
#define PRINT printf("file:%s line:%d\n", __FILE__, __LINE__)//__FILE__,__LINE__这是个啥?别急后面有补充!#define STR(s) #s
#define JOIN(a,b) a##b//
void test_define_str()
{printf("%s\n", STR(c.biancheng.net));printf("%s\n", STR(“c.biancheng.net”));
}
void fejiw()
{int a, sq;printf("input a number: ");scanf("%d", &a);sq = SQ(a+1);printf("sq=%d\n", sq);
}#define CON1(a, b) a##e##b
#define CON2(a, b) a##b##00
#define ADD_TO(num, value) num##value//
void test_con()
{printf("%f\n", CON1(8.5, 2));printf("%d\n", CON2(12, 34));int a = ADD_TO(114, 514);printf("%d \n", a);
}
//
#define PFINT printf("hello world!\n");\printf("goodbye world!\n");
#define NUM 1,\2,\3
//
void test_huanhang()
{PFINTint x[] = { NUM };//->int x[] = { 1,2,3 };printf("%d %d %d \n", x[0], x[1], x[2]);
}#define MALLOC(num, type) \ 
(type *)malloc(num * sizeof(type)) //这和\是干啥的?详见地四大点\的作用
// 反斜杠后不要有空格 backslash and newline separated by spacevoid test_malloc()
{// 使用int *b = MALLOC(10, int); // 类型作为参数free(b);b = NULL;// 预处理器替换之后://(int *)malloc(10 * sizeof(int));
}//
//这种能够根据不同情况编译不同代码、产生不同目标文件的机制,称为条件编译。
//条件编译是预处理程序的功能,不是编译器的功能。
void test_if_()
{#if _WIN32system("color 0c");printf("http://c.biancheng.net\n");#elif __linux__printf("\033[22;31mhttp://c.biancheng.net\n\033[22;30m");#elseprintf("http://c.biancheng.net\n");#endif
}/*
#if 整型常量表达式1程序段1
#elif 整型常量表达式2程序段2
#elif 整型常量表达式3程序段3
#else程序段4
#endif
如常“表达式1”的值为真(非0),就对“程序段1”进行编译,否则就计算“表达式2”,
结果为真的话就对“程序段2”进行编译,为假的话就继续往下匹配,直到遇到值为真的表达式,
或者遇到 #else。这一点和 if else 非常类似。需要注意的是,#if 命令要求判断条件为“整型常量表达式”,
也就是说,表达式中不能包含变量,而且结果必须是整数;而 if 后面的表达式没有限制,只要符合语法就行。
这是 #if 和 if 的一个重要区别。#ifdef 的用法
#ifdef 用法的一般格式为:
#ifdef  宏名程序段1
#else程序段2
#endif它的意思是,如果当前的宏已被定义过,则对“程序段1”进行编译,否则对“程序段2”进行编译。也可以省略 #else:
#ifdef  宏名程序段
#endif*/#define NUMBER 10
//
void test_if()
{#if NUMBER == 10 || NUM == 20printf("NUM: %d\n", NUMBER);#elseprintf("NUM Error\n");#endif
}#define NUM1 10
#define NUM2 20
int test_defined()
{#if (defined NUM1 && defined NUM2)//代码Aprintf("NUM1: %d, NUM2: %d\n", NUM1, NUM2);#else//代码Bprintf("Error\n");#endifreturn 0;
}void testerror()
{
#ifndef __cplusplus
#error 当前程序必须以C++方式编译
//#error nihao bianyiqi budui
#endif
}//
int main()
{//test_define_str();//test_con();//test_huanhang();//test_defined();testerror();return 0;
}

相关文章:

C语言宏定义笔记

把宏名全部大写&#xff0c;函数名不要全部大写。注意宏定义表示数据类型和用 typedef 定义数据说明符的区别。宏定义只是简单的字符串替换&#xff0c;由预处理器来处理&#xff1b; typedef 是在编译阶段由编译器处理的&#xff0c;它并不是简单的字符串替换&#xff0c;而给…...

设计模式:生活中的观察者模式

想象你在社交媒体上关注&#xff08;订阅&#xff09;了一个名人或新闻频道&#xff08;主题&#xff09;。一旦他们发布新内容&#xff0c;所有关注者&#xff08;观察者&#xff09;都会收到通知。这个过程就很像观察者模式的工作原理。 生活场景类比 主题&#xff08;Subj…...

Qt实现Kermit协议(四)

3 实现 3.3 KermitRecvFile 该模块实现了Kermit接收文件功能。 序列图如下&#xff1a; 3.3.1 KermitRecvFile定义 class QSerialPort; class KermitRecvFile : public QObject, public Kermit {Q_OBJECT public:explicit KermitRecvFile(QSerialPort *serial, QObject *…...

苏州金龙助力旅游客运加速蜕变

近日&#xff0c;北京铭悦旅游客运有限公司又迎来一批苏州金龙海格纯电动客车。&#xff08;以下简称北京铭悦旅游&#xff09;总经理郭保生在车辆交付时说到&#xff0c;“为迎接强劲复苏的旅游市场&#xff0c;要求旅游客运向绿色客运转型&#xff0c;以及人民对品质生活、美…...

头盔检测 | 基于Caffe-SSD目标检测算法实现的建筑工地头盔检测

项目应用场景 面向建筑工地头盔检测场景&#xff0c;使用深度学习 Caffe SSD 目标检测算法&#xff0c;基于 C 实现。 项目效果 项目细节 > 具体参见项目 README.md (1) 安装 Caffe SSD(2) 执行训练 sh examples/Hardhat/SSD300/train_SSD300.sh (3) 部署算法 项目获取 h…...

Stable diffusion 加载扩展列表报错解决方法

项目场景&#xff1a; 在使用Stable diffusion webui时&#xff0c;使用扩展列表出现错误 问题描述 点击loadfrom后&#xff0c;出现加载扩展列表报错 原因分析&#xff1a; 下载的扩展的时候&#xff0c;都是github 的url&#xff0c;需要科学上网&#xff0c;如果不能科学…...

Git(8)之分支间同步特定提交

Git(8)之分支间同步特定提交 Author&#xff1a;Once Day Date&#xff1a;2024年4月7日 漫漫长路有人对你微笑过嘛… 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSDN博客 文章目录 Git(8)之分支间同步特定提交1. 分支间同步提交2. cherry-pick同步分支间的特定提交…...

万得AI算法工程师一面面试题6道|含解析

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今天…...

蓝桥杯23年第十四届省赛-异或和之和|拆位、贡献法

题目链接&#xff1a; 蓝桥杯2023年第十四届省赛真题-异或和之和 - C语言网 (dotcpp.com) 1.异或和之和 - 蓝桥云课 (lanqiao.cn) 参考题解&#xff1a; 蓝桥杯真题讲解&#xff1a;异或和之和 &#xff08;拆位、贡献法&#xff09;-CSDN博客 洛谷P9236 [蓝桥杯 2023 省 A]…...

Unity进阶之路(1)回顾与思考

首先呢&#xff0c;博主在这里先反思一下自己这几个月&#xff0c;其实并没有多少进步。 在寒假中&#xff0c;博主几乎是独立编写了一个小程序的完整UI和一个Uniapp的雏形。那段时间是博主生产力最高的时间段。几乎是每天8点起来开始编写代码&#xff0c;晚上一直忙到很晚。 …...

【C语言】——指针八:指针运算笔试题解析

【C语言】——指针八&#xff1a;指针运算笔试题解析 一、题一二、题二三、题三四、题四五、题五六、题六七、题七 一、题一 //程序输出结果是什么 int main() {int a[5] { 1,2,3,4,5 };int* ptr (int*)(&a 1);printf("%d, %d", *(a 1), *(ptr - 1));return…...

JVM字节码与类的加载——class文件结构

文章目录 1、概述1.1、class文件的跨平台性1.2、编译器分类1.3、透过字节码指令看代码细节 2、虚拟机的基石&#xff1a;class文件2.1、字节码指令2.2、解读字节码方式 3、class文件结构3.1、魔数&#xff1a;class文件的标识3.2、class文件版本号3.3、常量池&#xff1a;存放所…...

小程序如何通过公众号发送新订单提醒

当客户在小程序上下单后&#xff0c;公众号会发送订单通知&#xff0c;这可以让管理员及时获知用户下单情况&#xff0c;方便及时处理订单和提供服务。下面是具体介绍如何设置公众号来发送订单服务通知。 方式一&#xff1a;通过采云公众号发送订单通知 此种方式是默认的通知…...

聊聊公众号最让我不爽的两个痛点

本文首发于 Python猫 微信公众号最让我不爽的地方有两个&#xff0c;而且有很多人虽然也不爽&#xff0c;却不知道原因。 本文想聊聊公众号的两个痛点&#xff0c;因为我经常收到私信问这两个问题&#xff0c;本文算是一次集中的回复吧。 第一个不爽的点是公众号会屏蔽外链&…...

【leetCode】2810. 故障键盘

文章目录 [2810. 故障键盘](https://leetcode.cn/problems/faulty-keyboard/)思路一&#xff1a;模拟代码&#xff1a;思路二&#xff1a;双端队列代码&#xff1a; 2810. 故障键盘 思路一&#xff1a;模拟 用StringBuilder来拼贴字符遍历字符串&#xff0c;如果遇到i,对拼贴好…...

xshell7连接ubuntu18.04

&#x1f3a1;导航小助手&#x1f3a1; 1.查看ubuntu IP2.开启openssh-server3.静态IP设置4.Xshell连接 1.查看ubuntu IP 输入下面命令查看IP ifconfig -a可以看到网卡是ens33&#xff0c;IP为192.168.3.180。 2.开启openssh-server 1、执行下句&#xff0c;下载SSH服务 s…...

真正的力量:实力与人际关系的平衡艺术

在当今社会&#xff0c;人们常常在追求个人发展和建立良好人际关系之间寻找平衡。有一种观点认为&#xff0c;“没有实力&#xff0c;就不要对别人好。不然&#xff0c;很容易被定义为讨好。”这句话在一定程度上揭示了实力与人际关系之间的微妙联系。本文将探讨这一观点的深层…...

Acwing.1388 游戏(区间DP对抗思想)

题目 玩家一和玩家二共同玩一个小游戏。 给定一个包含 N个正整数的序列。 由玩家一开始&#xff0c;双方交替行动。 每次行动可以在数列的两端之中任选一个数字将其取走&#xff0c;并给自己增加相应数字的分数。&#xff08;双初始分都是 0分&#xff09; 当所有数字都被…...

Numpy数组转换为csv文件

参考&#xff1a;Converting Numpy Array to CSV 在数据分析和处理中&#xff0c;经常会涉及到将数据从一个形式转换为另一个形式的操作。 其中&#xff0c;将Numpy数组转换为csv文件是一种常见的操作&#xff0c;因为csv文件是一种通用的数据存储格式&#xff0c;方便与其他软…...

替代安全指标(Surrogate Safety Measures (SSM) )

替代安全措施&#xff08;Surrogate Safety Measures (SSM) &#xff09;用于从数据中寻找接近碰撞&#xff0c;或可能发生&#xff08;但实际没有发生&#xff09;的碰撞事件。 SSM的两个合格标准&#xff1a; &#xff08;1&#xff09;它应该来自与碰撞直接相关的交通冲突&…...

终极分屏神器Nucleus Co-Op:一台电脑实现4人同时开黑完整指南

终极分屏神器Nucleus Co-Op&#xff1a;一台电脑实现4人同时开黑完整指南 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾因朋友聚会时电脑…...

英雄联盟智能辅助工具Seraphine:三步快速上手的终极指南

英雄联盟智能辅助工具Seraphine&#xff1a;三步快速上手的终极指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 你是否厌倦了在英雄联盟排位赛中手忙脚乱地查询对手战绩&#xff1f;是否希望有一个智能助…...

从绝圣弃智到少造机关,老子这一句放进 SAP HANA 开发里,讲的是把聪明收回到模型、数据和执行计划本身

在 SAP HANA 项目里,最容易让团队误判的场景,往往不是某个开发人员不会写 SQL,也不是不会建 Calculation View,而是大家太相信自己的聪明。一个销售分析报表慢了,开发人员立刻想写一段复杂的 SQLScript;一个库存可用量计算不准,团队又想加一层临时表;一个财务口径有争议…...

PCI、PCIe与InfiniBand接口技术对比与应用解析

1. 计算机接口技术演进背景在服务器和PC硬件架构中&#xff0c;I/O接口技术始终是决定系统性能的关键因素之一。作为从业15年的系统架构师&#xff0c;我见证了从传统PCI总线到现代高速互连技术的完整演进历程。这种演进并非简单的替代关系&#xff0c;而是针对不同应用场景的技…...

CANN算子库幂运算API文档

aclnnPowTensorScalar&aclnnInplacePowTensorScalar 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math &#x1f4c4; 查看源码 产品支持情况 产品是否支持A…...

CANN/asc-devkit ReduceProd API文档

ReduceProd 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.com…...

【C++笔记】-- 七种排序流食般讲解

1.排序的概念&#xff1a;所谓的排序就是对于一组记录&#xff0c;按照某个或者某些关键字&#xff0c;递增或递减的排序这些记录。2.排序的分类&#xff1a;此文章将会介绍四类排序。一、插入排序&#xff1a;直接插入排序、希尔排序。二、选择排序&#xff1a;选择排序、堆排…...

AI编码助手经验治理:ExperienceEngine解决重复错误与智能进化

1. 项目概述&#xff1a;为编码智能体引入“经验治理层”如果你和我一样&#xff0c;长期使用像 Claude Code、Cursor 或 OpenClaw 这类 AI 编码助手&#xff0c;肯定会遇到一个让人头疼的问题&#xff1a;同一个项目里&#xff0c;AI 助手会反复犯下几乎一模一样的错误。比如&…...

HCCS:整数优化的Transformer注意力Softmax替代方案

1. 整数优化的HCCS软最大替代方案概述在Transformer架构的多头注意力机制中&#xff0c;Softmax函数长期以来都是计算效率的瓶颈环节。传统Softmax需要进行指数运算和归一化操作&#xff0c;这在低精度整数推理场景下尤为昂贵。我们提出的HCCS&#xff08;Head-Calibrated Clip…...

FiveM服务器全栈运维指南:从零搭建到高效管理的结构化技能体系

1. 项目概述与核心价值如果你正在运营一个基于 FiveM 的 GTA V 角色扮演服务器&#xff0c;那么你肯定对“服务器炸了”、“脚本冲突了”、“玩家卡得动不了”这些日常运维噩梦深有体会。我自己从零开始搭建、维护一个中等规模的 FiveM 服务器&#xff0c;到后来管理一个拥有数…...