服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言详细讲解#error与#line如何使用

C语言详细讲解#error与#line如何使用

2022-11-11 14:40清风自在 流水潺潺 C/C++

这篇文章主要介绍了C语言中#error与#line如何使用,#error与#line虽然在语言里面用的比较少,但是还是有必要了解一下

一、#error 的用法

#error 用于生成一个编译错误消息

用法

#error message,message不需要用双引号包围

#error 编译指示字用于自定义程序员特有的编译错误消息,类似的,#warning 用于生成编译警告。

#error 是一种预编译器指示字

#error 可用于提示编译条件是否满足

用法示例如下:

C语言详细讲解#error与#line如何使用

编译过程中的任意错误信息意味着无法生成最终的可执行程序。

下面初探一下 #error

#include <stdio.h>

#ifndef __cplusplus
  #error This file should be processed with C++ compiler.
#endif

class CppClass
{
private:
  int m_value;
public:
  CppClass()
  {
      
  }
  
  ~CppClass()
  {
  }
};

int main()
{
  return 0;
}

这份代码中间那一部分是用 C++ 写的,所以用 gcc 编译器时,编译会报错,其中 #error 那个是我们自定义的错误。

C语言详细讲解#error与#line如何使用

再来看一段 #error 在条件编译中的应用代码:

test.c:

#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");
#else
  #error The macro PRODUCT is NOT defined!
#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");
#else
  #error The macro PRODUCT is NOT defined!
#endif
  
  return 0;
}

如果我们直接编译,而不去定义宏,那么自定义的错误就会被触发:

C语言详细讲解#error与#line如何使用

如果在编译时把宏加上,就不会出现错误了,例如将 PRODUCT 定义为 3,可以在命令行输入 gcc -DPRODUCT=3 test.c

C语言详细讲解#error与#line如何使用

二、#line 的用法

#line 用于强制指定新的行号和编译文件名,并对源程序的代码重新编号

用法

#line number filename,filename 可省略

#line 编译指示字的本质是重定义 _LINE_ 和 _FILE_

下面看一段 #line 的使用代码:

test.c:

#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 AutumnZe.
// Begin
#line 1 "AutumnZe.c"

int main()
{
  printf("%s : %d\n", __FILE__, __LINE__);
  
  printf("%s : %d\n", __FILE__, __LINE__);
  
  return 0;
}
// End

下面为输出结果:

C语言详细讲解#error与#line如何使用

可以看到,#line 指定了新的行号和编译文件名。

三、小结

  • #error 用于自定义一条编译错误信息
  • #warning 用于自定义一条编译警告信息
  • #error 和 #warning 常应用于条件编译的情形
  • #line 用于强制指定新的行号和编译文件名

到此这篇关于C语言详细讲解#error与#line如何使用的文章就介绍到这了,更多相关C语言 #error与#line内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43129713/article/details/123520105

延伸 · 阅读

精彩推荐
  • C/C++C语言的结构体你了解吗

    C语言的结构体你了解吗

    这篇文章主要为大家详细介绍了C语言的结构体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来...

    c铁柱同学3472022-09-27
  • C/C++C语言kmp算法简单示例和实现原理探究

    C语言kmp算法简单示例和实现原理探究

    这篇文章主要介绍了C语言kmp算法简单示例和实现原理探究,本文用简洁的语言说明KMP算法的原理,并给出了示例,需要的朋友可以参考下...

    C语言程序设计6992021-02-03
  • C/C++深入浅析 C++ 调用 Python 模块

    深入浅析 C++ 调用 Python 模块

    Python 提供了 C++ 库,使得开发者能很方便地从 C++ 程序中调用 Python 模块。接下来通过本文给大家介绍 C++ 调用 Python 模块的相关知识,需要的朋友参考下吧...

    C++教程网10722021-03-27
  • C/C++VC判断一个文件为目录的方法

    VC判断一个文件为目录的方法

    这篇文章主要介绍了VC判断一个文件为目录的方法,在Windows应用程序设计中非常具有实用价值,需要的朋友可以参考下...

    C语言教程网10652021-02-20
  • C/C++C++ push方法与push_back方法的使用与区别

    C++ push方法与push_back方法的使用与区别

    这篇文章主要介绍了C++ push方法与push_back方法的使用与区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    小呆呆yy7322021-08-06
  • C/C++详解C++ 动态库导出函数名乱码及解决

    详解C++ 动态库导出函数名乱码及解决

    这篇文章主要介绍了C++ 动态库导出函数名乱码及解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    luochenlong10382021-07-25
  • C/C++OpenCV轮廓检测之boundingRect绘制矩形边框

    OpenCV轮廓检测之boundingRect绘制矩形边框

    在进行文本检测时,我们常常会用矩形边框将检测到的内容框除。这篇文章主要为大家介绍的是OpenCV中能实现这一效果的函数:boundingRect,感兴趣的同学可...

    翟天保Steven8142022-07-13
  • C/C++VS2019配置BOOST的方法(v1.70.0库)

    VS2019配置BOOST的方法(v1.70.0库)

    这篇文章主要介绍了VS2019配置BOOST的方法(v1.70.0库),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    RiskAI8222021-09-22