C语言进阶课程学习记录-第23课 - #error 和 #line 使用分析

C语言进阶课程学习记录-第23课 - #error 和 #line 使用分析

    • 实验-#errer的使用
    • 演示cmd窗口
    • 实验-缺少#error
    • 实验-#line 1的使用
    • 实验-#line 1用于标记代码
    • 小结

本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录

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

实验-#errer的使用

//23-1.c
#include <stdio.h>#ifndef __cplusplus#error This file should be processed with C++ compiler.
#endifclass CppClass
{
private:int m_value;
public:CppClass(){}~CppClass(){}
};int main()
{return 0;
}
//23-1X.c
#include <stdio.h>
//#ifndef __cplusplus//  #error This file should be processed with C++ compiler.
//#endifclass CppClass
{
private:int m_value;
public:CppClass(){}~CppClass(){}
};int main()
{return 0;
}

演示cmd窗口

D:\Users\cy\Cxuexi\gccLearn\23>gcc 23-1X.c
23-1X.c:7:1: error: unknown type name 'class'class CppClass^~~~~
23-1X.c:8:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token{^D:\Users\cy\Cxuexi\gccLearn\23>g++ 23-1X.cD:\Users\cy\Cxuexi\gccLearn\23>gcc 23-1.c
23-1.c:4:6: error: #error This file should be processed with C++ compiler.#error This file should be processed with C++ compiler.^~~~~
23-1.c:7:1: error: unknown type name 'class'class CppClass^~~~~
23-1.c:8:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token{^

实验-缺少#error

#include <stdio.h>void f()
{
#if ( PRODUCT == 1 )printf("This is a low level product!\n");
#elif ( PRODUCT == 2 )printf("This is a middle level product!\n");
#elif ( PRODUCT == 3 )printf("This is a high level product!\n");
#endif
}int main()
{f();printf("1. Query Information.\n");printf("2. Record Information.\n");printf("3. Delete Information.\n");#if ( PRODUCT == 1 )printf("4. Exit.\n");
#elif ( PRODUCT == 2 )printf("4. High Level Query.\n");printf("5. Exit.\n");
#elif ( PRODUCT == 3 )printf("4. High Level Query.\n");printf("5. Mannul Service.\n");printf("6. Exit.\n");
#endifreturn 0;
}
/*output:
1. Query Information.
2. Record Information.
3. Delete Information.
*/

在这里插入图片描述

实验-#line 1的使用

#include <stdio.h>int main()
{printf("%s : %d\n", __FILE__, __LINE__);//文件名 所在行号//129#line 1 "delphi_tang.c"//重新定义行号:下一行为1 文件名"delphi_tang.c"printf("%s : %d\n", __FILE__, __LINE__);//文件名 所在行号return 0;
}/*output:
D:\Users\cy\Test\test1.c : 129
delphi_tang.c : 2
*/

实验-#line 1用于标记代码

#line 1用于标记代码编写人和行号(便于Debug),代码示例:

#include <stdio.h>// The code section is written by A.
// Begin
#line 1 "a.c"// End// The code section is written by B.
// Begin
#line 1 "b.c"// End// The code section is written by Delphi.
// Begin
#line 1 "delphi_tang.c"int main()
{printf("%s : %d\n", __FILE__, __LINE__);printf("%s : %d\n", __FILE__, __LINE__);return 0;
}// End
/*output:
delphi_tang.c : 5
delphi_tang.c : 7
*/

小结

#error用于自定义一条编译错误信息

#warning用于自定义一条编译警告信息

#error和#warning常应用于条件编译的情形
#line用于强制指定新的行号和编译文件名

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

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

相关文章

静态树提升:优化Web性能的技巧

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

YOLO-World:实时开放词汇对象检测(论文+代码)

目录 一、YOLO-World摘要以及主要贡献 1.1摘要 1.2主要贡献 二、YOLO-World模型创新点总结 2.1YOLO Detector 2.2Text Encoder 2.3Re-parameterizable Vision-Language PAN 2.4核心创新点总结 三、如何应用 3.1推理预测 3.2自定义词汇推理 3.3自定义词汇类别…

【Error】Uncaught TypeError: Cannot read properties of undefined (reading ‘get’)

报错原因&#xff1a; 返回值为undefined 解决&#xff1a; vue3可用&#xff1f;

贪心算法|45.跳跃游戏II

力扣题目链接 class Solution { public:int jump(vector<int>& nums) {if (nums.size() 1) return 0;int curDistance 0; // 当前覆盖最远距离下标int ans 0; // 记录走的最大步数int nextDistance 0; // 下一步覆盖最远距离下标for (int i 0;…

hot100 - 链表(上)

目录 &#x1f33c;相交链表 AC 哈希 AC 双指针 AC 截去较长 list &#x1f33c;反转链表 AC 迭代 AC 递归 &#x1f33c;回文链表 AC 数组 AC 递归 AC 快慢指针 &#x1f33c;环形链表 AC 哈希表 AC 快慢指针 &#x1f6a9;环形链表 II AC 哈希表 …

Redis从入门到精通(四)Redis实战(一)短信登录

文章目录 前言第4章 Redis实战4.1 短信登录4.1.1 基于session实现短信登录4.1.1.1 短信登录逻辑梳理4.1.1.2 创建测试项目4.1.1.3 实现发送短信验证码功能4.1.1.4 实现用户登录功能4.1.1.5 实现登录拦截功能4.1.1.6 session共享问题 4.1.2 基于Redis实现短信登录4.1.2.1 Key-Va…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息&#xff0c;有…

dm8 备份与恢复

dm8 备份与恢复 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 设置bak_path路径 --创建备份文件存放目录 su - dmdba mkdir -p /dm8/backup--修改dm.ini 文件…

【二分查找】Leetcode 在排序数组中查找元素的第一个和最后一个位置

题目解析 34. 在排序数组中查找元素的第一个和最后一个位置 我们使用暴力方法进行算法演化&#xff0c;寻找一个数字的区间&#xff0c;我们可以顺序查找&#xff0c;记录最终结果 首先数组是有序的&#xff0c;所以使用二分法很好上手&#xff0c;但是我们就仅仅使用上一道题…

【学习笔记】Elsevier的Latex模板文件(附网址)

注&#xff1a;这是一篇没有技术含量的水文&#xff0c;主要是看有人下载下来&#xff0c;居然当成资源需要积分才能下载。我觉得不行&#xff0c;故提供原始下载地址供查阅使用。 链接: 上述图片所示网址&#xff1a;链接直达

赛博炼丹师手记

文章目录 0. 丹炉安置1. 炼丹手法1.1 前置准备1.2 数据标注1.3 开始炼丹1.4 结果验收 2. 炼丹心法2.1 步数相关2.1 效率相关2.2 质量相关 3. 相关文献 0. 丹炉安置 个人推荐b站up主朱尼酱出品的道玄丹炉&#xff0c;新手易懂&#xff0c;老手易用。 丹炉下载地址如下&#xf…

NetSuite 自定义记录类型的权限控制

在近期的一个定制项目中&#xff0c;遭受了一次用户洗礼。有个好奇宝宝把我们的一个自定义类型的表记录进行了删除&#xff0c;导致一个重要功能失败。算是给我们扎实上了一课。自定义类型的权限也需要重视起来。所以&#xff0c;今朝我们记录下这个设置&#xff0c;同时写给未…