C/C++语言宏定义使用实例详解

 更新时间:2020年4月25日 17:31  点击:1439

 C/C++语言宏定义使用实例详解

1. #ifndef 防止头文件重定义

在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成
一个可执行文件时,就会出现大量“重定义”的错误。在头文件中实用#ifndef #define #endif能避免头文件的重定义。

方法:例如要编写头文件test.h

在头文件开头写上两行:

#ifndef TEST_H
#define TEST_H //一般是文件名的大写

头文件结尾写上一行:

#endif

这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了。

注:Visual C++中有一种简化的方法,那就是使用 #pragma once

2. 编写跨平台的C/C++程序

2.1 操作系统相关宏定义

Windows:  WIN32
 Linux:  linux
Solaris:  __sun

2.2 编译器相关宏定义

   VC: _MSC_VER
GCC/G++: __GNUC__
 SunCC: __SUNPRO_C 和 __SUNPRO_CC

3. 完整的代码实例

//Avoid redefine anything in this header 
#ifndef UUID_H
#define UUID_H

// Check platform is Windows or Linux
#ifdef _MSC_VER
#ifndef DLL_API
#define DLL_API __declspec(dllexport)
#endif
#else 
#ifndef DLL_API
#define DLL_API 
#endif 
#endif


#include <string>
#include <random>
#include <time.h>
#include <stdlib.h>

using namespace std;

class DLL_API UUID {
public:
  static string getUuidString();
};

#endif

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

[!--infotagslink--]

相关文章

  • VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h”或者检测到 #include 错误,请更新includePath)(POSIX API)

    这篇文章主要介绍了VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h” 或者 检测到 #include 错误。请更新includePath) (POSIX API),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-13
  • Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境(教程详解)

    这篇文章主要介绍了Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-12
  • C/C++如何获取当前系统时间的实例详解

    这篇文章主要介绍了 C/C++如何获取当前系统时间的实例详解的相关资料,这里提供了几种实现方法,帮助大家实现这样的功能,需要的朋友可以参考下...2020-04-25
  • C/C++ 多线程的学习心得总结

    本篇文章是对C/C++中多线程的学习心得总结进行了详细的分析介绍,需要的朋友参考下...2020-04-25
  • Linux内核宏Container_Of的详细解释

    我们在分析Linux内核链表的时候注意到内核在求解结构体偏移的时候巧妙的使用了container_of宏定义,本文我们就来详细剖析下内核到底是如何求解结构体成员变量的地址的。...2021-09-10
  • SQLite教程(二):C/C++接口简介

    这篇文章主要介绍了SQLite教程(二):C/C++接口简介,本文讲解了C/C++接口概述、核心对象和接口、参数绑定等内容,需要的朋友可以参考下...2020-07-11
  • C/C++ 中gcc和g++的对比与区别

    这篇文章主要介绍了C/C++ 中gcc和g++的对比与区别的相关资料,需要的朋友可以参考下...2020-04-25
  • C/C++ 宏详细解析

    关于宏的一些语法问题,可以在google上找到。相信我,你对于宏的了解绝对没你想象的那么多。如果你还不知道#和##,也不知道prescan,那么你肯定对宏的了解不够...2020-04-25
  • 使用docker部署一个简单的c/c++程序的方法

    这篇文章主要介绍了使用docker部署一个简单的c/c++程序的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-22
  • C/C++ 公有继承、保护继承和私有继承的对比详解

    这篇文章主要介绍了C/C++ 公有继承、保护继承和私有继承的区别的相关资料,需要的朋友可以参考下...2020-04-25
  • JS事件循环机制event loop宏任务微任务原理解析

    这篇文章主要介绍了JS事件循环机制event loop宏任务微任务原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-04
  • C/C++从零开始的cmake教程

    今天小编就为大家分享一篇关于C/C++从零开始的cmake教程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25
  • C/C++: Inline function, calloc 对比 malloc

    以下是对c/c++中的malloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下...2020-04-25
  • 李彦宏憋着大招:人工智能

    无论是9月1号的百度大会,还是李彦宏在G20峰会上的演讲,还是李彦宏近日接受央视的采访,“人工智能”一直是李彦宏挂在嘴边的四个字。或许搜索引擎起家的百度,正在有意减少在这方面的色彩,加大力气投入人工智能领域。...2016-09-12
  • C#跨平台开发之使用C/C++生成的动态链接库

    这篇文章介绍了C#跨平台开发之使用C/C++生成的动态链接库,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2022-01-17
  • 深入探讨:宏、内联函数与普通函数的区别

    本篇文章是对宏、内联函数与普通函数的区别进行了详细的分析介绍,需要的朋友参考下...2020-04-25
  • 简单讲解C语言中宏的定义与使用

    这篇文章主要介绍了C语言中宏的定义与使用,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • C/C++ 编译器优化介绍

    这篇文章主要涉及了C/C++ 编译器优化的简单介绍,具有一定参考价值。如有不对之处,欢迎指出。...2020-04-25
  • 嵌入式项目使用C语言结构体位段特性实现断言宏校验数据范围有效性的方法

    今天小编就为大家分享一篇关于嵌入式项目使用C语言结构体位段特性实现断言宏校验数据范围有效性的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25
  • 枚举和宏的区别详细解析

    枚举常量具有类型,但宏没有类型,枚举变量具有与普通变量相同的诸如作用域、值等性质,但宏没有,宏不是语言的一部分,它是一种预处理替换符...2020-04-25