C语言基础入门

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。


预处理pragma

    • 1. 预处理指令
    • 2. #pragma详细用法


专栏:《精通C语言》


1. 预处理指令

ANSI标准定义的C语言预处理指令

预处理指令含义
#define宏定义,在预处理阶段进行文本替换。
#undef撤销已定义的宏
#include引入其他源文件
#if #else #elif #endif#if 的一般含义是如果#if 后面的常量表达式为true,则编译它与#endif 之间的代码,否则跳过这些代码。命令#endif 标识一个#if 块的结束。#else命令的功能类似于C 语言中的else ,#else 建立另一选择分支(和# if 搭配)。#elif 命令意义与else if 相同,它形成一个if else-if语句,可进行多种编译选择分支。
#ifdef #ifndef条件编译,#ifdef表示如果已经定义了某个宏,#ifndef表示如果没有定义某个宏。
#line改变当前行数和文件名,在编译程序中预先定义的标识符,用法为#line number[“filename”]。
#error编译程序时,如果遇到#error则产生一个编译错误的提示消息,并且会停止编译。
#pragma指定编译器实现特定功能。比如,#pragma once表示只包含一次头文件,#pragma pack(1)指定字节对齐方式等等。

ANSI标准C定义的宏:

__LINE__	//正在编译的文件的行号
__FILE__	//正在编译的文件的名字
__DATA__	//表示编译时刻的日期字符串
__TIME__	//表示编译时刻的时间字符串
__STDC__    //判断该文件是不是定义成标准C程序

#include

#include提供文件包含的功能,在预处理阶段完成,它可以把多个源文件连接成一个源文件,实际上#include是宏替换的一种延伸。使用#include包含文件主要有两种方式,两种方式的区别在于搜索策略不同。

  • #include <path/filename>

    在搜索时直接从编译器指定的路径进行搜索,如果找到文件,则把文件内容替换到#include语句处,如果找不到则报错。一般系统提供的头文件使用尖括号包含。

  • #include “path/filename”

    在搜索时首先从运行程序所在的目录处搜索,如果搜索失败再从编译器指定的路径处搜索,如果仍然搜索失败则报错。用户自定义的头文件必须用双引号包含。

#运算符

#也可以看作一种预处理指令,用法如下

#include <stdio.h>
#include <stdlib.h>#define PRINT1(x) printf("square of x is %d\n", x * x)
#define PRINT2(x) printf("square of "#x" is %d\n", x * x)int main()
{PRINT1(3);PRINT2(3);return 0;
}

编译运行,可以看到输出结果如下

[mindtechnist@localhost test]$ ./test 
square of x is 9
square of 3 is 9

##运算符

也叫做连接符,用法如下

#define xNum(n) x##n xNum(7) //展开后为 x7

2. #pragma详细用法

#pragma 指令用于设定编译器的状态或者是指示编译器完成一些特定的动作。常用参数如下:

#pragma message

在编译信息窗口输出相应信息,用法为

#pragma message("消息文本")

当编译器遇到这条指令,就会在编译输出窗口打印我们定义的消息文本,比如

#ifdef _X86
#pragma message("is _X86 ...")
#else
#pragma message("is _ARM ...")
#endif

#pragma code_seg

一般用于设置程序中函数代码存放的代码段,在开发驱动程序时使用较多。

#pragma code_seg(["section-name", ["section-class"]])

#pragma once

头文件只被编译一次。

#pragma hdrstop

表示预编译头文件到此为止,后面的文件不再进行预编译。

#pragma resource

#pragma resource "*.dfm"

表示把*.dfm文件中的资源加入项目。

#pragma warning

用法示例

#pragma warning(disable:4507 34) //不显示4507和34号警告信息
#pragma warning(once:4385) //4385号警告信息仅报告一次
#pragma warning(error:164) //把164号警告信息作为一个错误。

#pragma comment
该指令将一个注释记录放入一个对象文件或可执行文件中。常用lib参数,帮我们连入一个库文件。比如:

#pragma comment(lib, "user32.lib")

该指令用来将user32.lib 库文件加入到本工程中。
linker参数,将一个链接选项放入目标文件中,你可以使用这个指令来代替由命令行传入的或者在开发环境中设置的链接选项,你可以指定/include 选项来强制包含某个对象,例如:

#pragma comment(linker, "/include:__mySymbol")

#pragma pack

设置内存对齐方式。


在这里插入图片描述
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/339468.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink-CEP 实战教程

文章目录 1. 基本概念1.1 CEP 是什么1.2 模式&#xff08;Pattern&#xff09;1.3 应用场景 2. 快速上手2.1 引入依赖2.2 入门实例 3. 模式API&#xff08;Pattern API&#xff09;3.1 个体模式3.1.1 基本形式3.1.2 量词&#xff08;Quantifiers &#xff09;3.1.3 条件&#x…

说说微信小程序的登录流程?

面试官&#xff1a;说说微信小程序的登录流程&#xff1f; 一、背景 传统的web开发实现登陆功能&#xff0c;一般的做法是输入账号密码、或者输入手机号及短信验证码进行登录 服务端校验用户信息通过之后&#xff0c;下发一个代表登录态的 token 给客户端&#xff0c;以便进行…

Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)

目录 一、概述 二、工程创建 三、添加设计文件并编译 四、线上仿真 五、布局布线 六、生成比特流文件 七、烧录 一、概述 vivado开发FPGA流程分为创建工程、添加设计文件、编译、线上仿真、布局布线&#xff08;添加约束文件&#xff09;、生成比特流文件、烧录等步骤&a…

计算机网络期末复习(二)

物理层 解决&#xff1a;如何在连接各种计算机的传输媒体上传输比特流&#xff0c;而不是具体的传输媒体。 传输媒体&#xff1a;比如双绞线、同轴电缆、光纤等等。 主要任务&#xff1a;确定于传输媒体接口有关的一些特性。 传输媒体 导向形 非导向形 调制解调器 数字信号 和…

GSEQ行为序列分析软件学习汇总

0、问题描述&#xff1a; 1、GSEQ软件是做什么的&#xff1f;2、GSEQ软件如何使用&#xff1f;2、GSEQ软件前期需要在“记事本”中编写“程式码”需要将所有行为数据编码之后&#xff0c;将编码行为序列粘贴到GSEQ软件中去&#xff0c;如果数据量很大&#xff0c;这个过程就非…

图纸版本管理混乱怎么办?彩虹PDM系统帮你搞定!

在现代制造业和工程领域&#xff0c;图纸版本管理的混乱常常是一个棘手的问题。不同版本的图纸可能导致严重的错误和生产问题&#xff0c;影响了产品质量和交付时间。然而&#xff0c;有一个强大的工具可以帮助企业解决这个问题&#xff0c;那就是PDM产品数据管理系统。彩虹PDM…

如何在 Microsoft Edge 浏览器中启用自动刷新

你是否经常发现自己在使用 Microsoft Edge 时点击刷新按钮&#xff1f;如果您需要一个网页以设定的时间间隔自动更新&#xff0c;那么请接着往下看。 在这篇博文中&#xff0c;我们探讨如何在 Microsoft Edge 浏览器中启用和管理自动刷新功能。 为什么选择自动刷新&#xff1…

spring cloud之集成sentinel

写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1&#xff1a;准备 1.1&#xff1a;理论 对于一个系统来说&#xff0c;最重要的就是高可用&#xff0c;那么如何实现高可用呢&#xff1f;你可能会说&#xff0c;集群部署不就可以了&#xff0c;但事实并…

SpringBoot+Vue药品ADR不良反应智能监测系统源码

药品不良反应&#xff08;Adverse Drug Reaction&#xff0c;ADR&#xff09;是指合格药品在正常用法用量下出现的与用药目的无关的有害反应&#xff0c;不包括超说明书用药、药品质量问题等导致的不良后果。 ADR智能监测系统开发环境 ❀技术架构&#xff1a;B/S ❀开发语言&…

2024年A特种设备相关管理(电梯)证考试题库及A特种设备相关管理(电梯)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年A特种设备相关管理&#xff08;电梯&#xff09;证考试题库及A特种设备相关管理&#xff08;电梯&#xff09;试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲…

【MySQL】视图,15道常见面试题---含考核思路详细讲解

目录 一 视图 1.1视图是什么 1.2 创建视图 1.3 查看视图(两种) 1.4 修改视图(两种) 1.5 删除视图 二 外连接&内连接&子查询介绍 2.1 外连接 2.2 内连接 2.3 子查询 三 外连接&内连接&子查询案例 3.1 了解表结构与数据 3.2 15道常见面试题 四 思…

《JVM由浅入深学习【七】 2024-01-11》JVM由简入深学习提升分享

亲爱的读者们&#xff0c;欢迎来到本篇博客&#xff0c;这是JVM第七次分享&#xff0c;下面是七个JVM常用常面的分享&#xff0c;请笑纳 目录 1. 几个与JVM 内存相关的核心参数2.如何计算一个对象的大小3.堆为什么要分为新生代和老年代4.JVM堆的年轻代为什么要有两个 Survivor…