gpt4 book ai didi

c++ - 预处理器宏有什么用?

转载 作者:太空狗 更新时间:2023-10-29 23:21:05 24 4
gpt4 key购买 nike

在阅读了另一个关于使用宏的问题后,我想知道:它们有什么用?

我认为很快不会被任何其他语言结构取代的一件事是减少您需要在以下内容中键入的相关词的数量:

void log_type( const bool value ) { std::cout << "bool: " << value; }
void log_type( const int value ) { std::cout << "int: " << value; }
...
void log_type( const char value ) { std::cout << "char: " << value; }
void log_type( const double value ) { std::cout << "int: " << value; }
void log_type( const float value ) { std::cout << "float: " << value; }

相对于

#define LOGFN( T ) void log_type( const T value ) { std::cout << #T ## ": " << value; }
LOGFN( int )
LOGFN( bool )
...
LOGFN( char )
LOGFN( double )
LOGFN( float )

还有其他“不可替代品”吗?

编辑:尝试总结答案中遇到的原因;因为那是我感兴趣的。主要是因为我有一种感觉,其中大部分是由于我们仍然在原始文本文件中编程,而且环境支持仍然很差。

  • 待编译代码的灵 active (例如 #ifdef DEBUG、平台问题)(SadSido、Catalin、Goz)
  • 调试目的(例如 __LINE__, __TIME__);我也把'stringifying'放在这个原因下(SadSido,Jla3ep,Jason S)
  • 替换例如PHP 的 requireinclude 功能(#pragma once)(SadSido、Catalin)
  • 通过替换复杂代码(例如 MESSAGEMAPBOOST_FOREACH)增强可读性(SadSido、fnieto)
  • DRY 原则(Jason S)
  • 内联替代者(Matthias Wandel、Robert S. Barnes)
  • 字符串化(Jason S)

最佳答案

  • 在不同的条件下编译不同的代码(#ifdef __DEBUG__);
  • 保护每个翻译单元包含每个 header 一次(#pragma once);
  • __FILE____LINE__ - 替换为当前文件名和当前行;
  • 构建代码以使其更具可读性(例如:BEGIN_MESSAGE_MAP() );

在此处查看 gotw 上有趣的宏讨论:

http://www.gotw.ca/gotw/032.htm

http://www.gotw.ca/gotw/077.htm

关于c++ - 预处理器宏有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1265951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com