编译预处理详述(文件包括 宏定义 编译预处理)

C语言之编译预处理 编译预处理是指在c编译程序对c源程序进行编译之前,对预处理命令进行“预先“处理的过程。编译预处理是通过编译预处理程序实现的。 预处理命令不是c语言的组成部分,c语言的编译程序无法识别他们。 比如#include<stdio.h>就是一个预处理命令,其功能是在将源程序编译成目标程序之前,将文件“stdio.h“中的内容替换该命令,然后由编译程序将源程序翻译成目标程序。 C语言中的预编译处理命令主要有以下3种:宏定义、文件包含、条件编译 为了与一般的c语句相区分,编译预处理命令必须以#为 阅读详情

编译预处理

C语言的编译预处理功能主要包括:文件包括(#include)、宏定义(#define)、条件编译

  • 编译预处理是C语言编译程序的组成部分,用于解释处理C语言源程序种的各种预处理指令,形式上都以#开头不属于C语言种真正的语句,但增强了C语言的编程功能,提高编程效率,C程序的编译处理用于把每一条C语句用若干条机器指令来实现,生成目标程序。由于#define等编译预处理指令不是语句,不能被编译程序翻译,需要在真正编译之前做一个预处理,解释完成编译预处理指令,从而把预处理指令转换成相应的C程序段,最终称为由纯粹C语句构成的程序,经编译后得到目标代码。
  • 所有编译预处理指令都在百衲衣预处理步骤中起作用,与程序真正运行过程无关。
宏基本定义
  • #define 宏名 宏定义字符串 (宏定义要在一行之内完成)如果一行之内完成不了,可以跟一个“\”符号表示改行未结束,与下一行合起来完成完整一行
  • 上述宏定义语句以#开始,表示它在编译预处理种起作用,而不是真正的C语句,行尾无需分号
#define PI 3.1415926
#define TRUE true
#define LONG_STRING "It represent a long string that \
is used as an example."
printf(LONG_STRING);
带参数的宏定义
  • 宏替换在程序编译预处理时完成,对于MAX(x,y)的编译预处理,首先用变量名x和y分别替换a,b,然后再用包含x,y的条件表达式替换MAX编译结束后,程序种MAX(x,y)便消失。
  • 在进行宏定义的时候注意对参数使用括号,因为宏替换仅仅是简单的替换,如果用两个参数eg:a+b替换为x的话可能产生歧义,当main种x=SQR(x+y)进行宏替换之后的结果可能不是人们想要的,结果是:x=x+yx+y;而人们想要的结果是x=(x+y)(x+y),要避免产生这种问题就要在进行宏定义的时候将原来的:
#define SQR(x) x*x改成#define SQR(x) (x)*(x)

#include<stdio.h>
#define MAX(a,b) a>b?a:b;
#define SQR(x) x*x
int main(){
    int x,y;
    scanf("%d%d",&x,&y);
    x=MAX(x,y);
    y=SQR(x);
    printf("%d %d",x,y);
    return 0;
}
文件包含
  • 文件包含的作用是把指定的文件模板内容插入到#include所在的位置,当程序编译连接时,系统会把所有的#include指定的文件凭借生产可执行代码,文件包含必须以#开头,这表示编译预处理命令,它将在程序编译时起作用,把指定的文件模块包含进来,当经过生成可执行代码后,include便不再存在,因此include不是真正的C语句,行尾不用分号结束
  • 文件包含的个格式:#incldue<需包含的文件名>或include "需包含的文件名"
  • 文件包含种指定的文件名如果使用尖括号<>,将使用C语言的便准头文件,由编译程序到C系统种设置好的include文件夹种把指定的文件包含进来,如果使用双引号“”,则编译程序首先到当前工作文件夹寻找被包含的文件,若找不到,再到系统include文件夹种查找文件,一般适用于编程者直接的包含文件,需要时可以在文件名前加上所在的路径。
条件编译

如果指向把源程序种一部分语句生成母便代码,可以使用条件编译。

#define FLAG 1
#if FLAG
	程序段1
#else
	程序段2
#endif	
  • 程序段1和2只有一个会被生成到目标程序种,这里FLAG被定义为1,所以会将第一个程序段编译;
  • 条件编译指令均以#开头,其意义与C语言的if-else语句完全不同,C语句if-else的两个分支程序段都会被生成到目标程序种,有程序运行时根据条件决定执行哪一段,而条件编译#if…#else…#endif不仅形式不同,而且它起作用的事可在编译与出口i的时候,一旦经过处理后,只有一段程序生成到目标程序种,另一段被舍弃。#if的条件只能起宏明,不能是程序表达式,因为在编译预处理时是无法计算表达式的,必须在程序运行时才做计算。
C语言编译预处理详解 C语言由源代码生成可执行程序的过程:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件其中编译预处理阶段,读取C源程序,对其中的预处理指令(以#开头的指令)和特殊符号进行处理预处理过程先于编译器对源代码进行处理,读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行转换。预处理过程还会删除程序中的注释和多余的空白字符使用#define命令并不是真正的定义符号常量,而是定义一个可以替换的宏。被定义为宏的标识符称为“宏名”。 阅读详情

相关推荐

【C语言】编译预处理

本文主要介绍了C/C++预处理阶段的相关内容。预处理阶段处理以#开头的指令,包括宏定义、条件编译和头文件包含等操作。文章详细讲解了#define定义常量和宏的方法,分析了宏替换规则及其与函数的区别,并指出宏可能带来的副作用问题。同时介绍了#和##运算符的特殊用法,以及条件编译指令的多种形式。最后,文章阐述了头文件的两种包含方式及其查找策略,并提出了通过条件编译避免头文件重复包含的解决方案。

wangchen_0的博客 1513

编译预处理

一、编译预处理 编译预处理是在编译源程序之前,由预处理器对源程序进行加工处理工作,所谓预处理器,是包含在编译器中的预处理程序。如图所示: 源程序的中的编译预处理命令一律以#开头,回车键结束,每条命令占一行,并且通常放在源程序的开始部分。 编译预处理的作用是将源程序文件中的预处理命令进行处理,生成一个中间文件,编译系统再对此中间文件进行编译并生成目标代码,最后生成的目标代码中不含有预处理命令; c++提供的预处理功能主要有宏定义、文件包含、条件编译,前两种比较常见,主要介绍最后一种 二、宏定义 2.1不带参

Destiny_的博客 7110

[图解]SysML与EA实战:住宅安全系统接口块设计全解析

本文详细解析了使用SysML和EA工具进行住宅安全系统接口块设计的全流程。从系统上下文图入门到接口块实战技巧,涵盖块定义图与内部块图的视角转换,以及多图协同建模方法论。特别分享EA工具的高效操作指南和常见问题避坑建议,帮助工程师掌握精确信号定义、端口方向设置等关键技能,提升安防系统设计效率。

weixin_29234509的博客 334

程序的编译与预处理详解

目录 一、程序的编译 1、 编译阶段 2、链接 二、预处理详解 1、预定义符号 2、#define定义的标识符 3、#define定义的宏 4、#undef 一、程序的编译 我们写的源文件(*.c)是经过怎样的处理生产可执行文件(*.exe)的呢?这种处理有两个步骤—编译和链接。源文件在编译阶段通过编译器将每个源文件转换为目标文件(这些文件是可执行的机器指令),再通过链接器将其捆绑到一起,生成一个完整的可执行程序。 1、 编译阶段 编译阶段可细分为3个阶段:预处理(即预编译)、.

weixin_52540905的博客 1951

抖音批量取消关注神器:5行JS代码搞定,告别手动操作(附详细步骤)

本文介绍了一种利用JS脚本在抖音创作者平台批量取消关注的高效方法。通过浏览器开发者工具执行简单的JavaScript代码,即可自动化模拟点击操作,快速清理大量关注列表,告别繁琐的手动操作。文中提供了详细的步骤和核心代码,适合有一定技术基础的用户参考。

weixin_29009971的博客 608

reCAPTCHA v3隐形验证码实战:5分钟教你用Capsolver获取0.9高分令牌

本文提供了一份reCAPTCHA v3隐形验证码的实战指南,详细解析其浏览器评分机制,并手把手教你使用Capsolver自动化获取0.9高分令牌。内容涵盖从环境侦察、关键参数(sitekey与pageAction)提取,到API调用、结果轮询及令牌使用的完整流程,旨在帮助开发者高效绕过自动化交互障碍。

weixin_29314405的博客 348

C/C++:编译全过程——预处理、编译、汇编、链接(包含预处理指令:宏定义,文件包括、条件编译)

一、前言 C/C++的编译过程包含了四个步骤: 1. 预处理(Preprocessing) 2. 编译(Compilation) 3. 汇编(Assemble) 4..链接(Linking) 二、预处理 预处理阶段主要处理一些预处理指令,比如文件包括、宏定义、条件编译。 1.文件包括 文件包括就是将所有的#include...

JacksonKim的博客 2万+

AT89C52单片机+LCD屏:手把手教你做一个能算小数和负数的计算器(附完整代码)

本文详细介绍了如何使用AT89C52单片机和LCD1602显示屏构建一个支持小数和负数运算的高精度计算器。从硬件选型、系统架构设计到核心算法实现,提供了完整的代码示例和优化技巧,特别适合51单片机初学者和课程设计参考。

weixin_30374009的博客 371

C语言宏定义

#define #define#define是C语言中的宏定义命令,在一定程度上提高程序的运行效率。它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。 它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。 在一个程序中,允许使用任意数量的#include命令行,#include命令行可以出现在程序文件的中间 在包含文件中,可以再包含其他文件。当包含文件被修改了,包含该文件的源程序需要重新进行编译和连接。 ...

kangjialong_的博客 3062

简单说说Python中的pip如何换源

【安装包】:pip install 【升级包】:pip install --upgrade 【卸载包】:pip uninstall 【查看已安装的包】:pip list【搜索包】:pip search (注意:pip search功能在pip 10.0.0之后被弃用,建议使用其他方式搜索包,如访问PyPI官网或使用其他搜索引擎)

一捌柒的博客 2668

AI:Coze、Dify、n8n:三款低代码工具如何选?

Coze、Dify、n8n:三款低代码工具如何选?

Kant2048的博客 2808

c语言中编译预处理的程序,C语言编译预处理程序设计教程.ppt

C语言编译预处理程序设计教程编译预处理 在C语言中包含一类特殊的命令(或称指令),这类特殊命令的作用不是直接实现程序的功能,而是为C语言编译系统提供信息,这些信息将通知C语言编译器在对源程序进行正式编译之前应该做什么,这一类特殊的命令被称为“编译预处理命令”。 C语言的预处理程序是C语言编译系统的组成部分,它负责分析和处理程序中使用的几种预处理命令,由于预处理程序对这些预处理命令的...

weixin_42349469的博客 353

C# 上位机内存泄漏排查指南:3 个工具 + 4 个技巧,从 GC 频繁到稳定运行 720 小时

C# 上位机内存泄漏排查的核心是「先定位泄漏存在,再追溯引用根源,最后修复验证通过「Visual Studio 诊断工具(快速定位)+ dotMemory(深度分析)+ PerfView(生产监控)」三个工具的配合,结合「复现场景、排查静态成员+事件、检查非托管资源、GC 日志验证」四个技巧,可高效解决绝大多数泄漏问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 739

【C语言】预处理指令— —宏定义、文件包含、条件编译

【C语言】预处理指令— —宏定义、文件包含、条件编译

weixin_73185295的博客 796

瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库

瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 3108

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言: 编译,预编译,宏定义与预处理

一 预处理: C语言是建立在适当的关键字,表达式,语句以及使用它的规则上。然而 ,C标准不仅描述C语言,还描述如何执行 C 预处理器,C标准库有那些函数,以及这些函数的工作原理。 C 预处理器在程序执行之前检查程序(故称为预处理器),根据程序中的预处理器指令,预处理器把符号缩写替换成其表示的内容。预处理器可以包含程序所需要的其他文件,可以选择让编译器查看那些代码。预处理器并不知道 C 。基本上...

C++++ ++ 7307

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C语言编译预处理

C语言由源代码生成可执行程序的过程如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中编译预处理阶段,读取C源程序,对其中的预处理指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。 ...

C语言技术网-码农有道 3321

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c语言 if预处理的条件编译的作用,C语言23 终极篇 预处理之宏定义、条件编译和文件包含...

C语言23 终极篇 预处理之宏定义、条件编译和文件包含什么是预处理预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。预处理功能主要包括宏定义,文件包含,条件编译三部分宏定义简单宏: #define 标识符 字符序列#define FALSE 0#define NAME "LUODAOYI"#define __IN#define ...

weixin_40004659的博客 151

下面_不是C语言的预处理功能,C语言之预处理命令与用typedef命名已有类型

预处理命令 主要是改进程序设计环境,以提高编程效率,不属于c语言本身的组成部分,不能直接对它们进行编译,必须在对 程序编译之前,先对程序中的这些特殊命令进行“预处理”.比如头文件. 有以下三类:宏定义,文件包含,条件编译. 宏定义(分为带参数与不带参数两种) 宏定义是用宏名代替一个字符串,也是简单的置换,不作正确性检查. 宏定义不是C语句,不必在行未加分号: #define命令出现在程序中函数的外...

weixin_39603469的博客 597

C语言预处理指令-宏定义、文件包含、条件编译

预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3.预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 4.C语言提供的预处理指令主要有:宏定义、文件包含、条件编

qq_41342326的博客 2562

C语言预处理命令(宏定义和条件编译)

define 叫做宏定义命令,它也是C语言预处理命令的一种。所谓宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。return 0;} 运行结果: 120100return 0;} 运行结果: 120注意第 6 行代码int sum = 20 + N,N被100代替了。#define N 100就是宏定义,N为宏名,100是宏的内容(宏所表示的字符串)。

weixin_45172119的博客 1460

c语言——编译链接及预处理

c语言之编译链接 还有详细讲解预处理部分知识

2301_79705195的博客 1461
上一篇: 结构(体)
下一篇: 指针进阶
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值