#if vs #ifndef vs #ifdef

amanuel2

我的问题首先是理解#ifndef#ifdef我也想明白之间的差别#if#ifndef#ifdef我了解这#if基本上是一个if语句。例如:

#include<iostream>
#define LINUX_GRAPHICS 011x101

int main(){
 long Compare = LINUX_GRAPHICS;
 #if Compare == LINUX_GRAPHICS
   std::cout << "True" << std::endl;
 #endif
}

但是其他人,尽管我阅读了有关它们的文章,但我还是无法理解。它们看起来也很相似,但是我怀疑它们的工作方式是否相似。帮助将不胜感激。

maximum_prime_is_463035818

预处理器对宏进行扩展,该预处理器在运行时对变量的值一无所知。它仅涉及文本替换(或比较预处理器已知的符号)。你的线

#if Compare == LINUX_GRAPHICS

将扩展到

#if Compare == 011x101

并且由于“比较”与“ 011x101”不同,因此评估为false。实际上,我什至不能100%地确定这一点,但重点是:您正在将预处理器指令与在运行时求值的变量混合在一起。那是胡说八道。没有预处理器指令可以代替C ++语句。

对于大多数传统的宏用例来说,如今有更好的方法。如果您确实不需要使用宏,则最好不要使用它们。这使得阅读代码非常困难(例如,我不明白您代码中的宏是如何工作的,除非我真的很诚实,否则我不想知道:P),并且宏还有其他问题,可能会导致非常困难在您的程序中查找错误。在使用宏之前,我建议您首先考虑是否存在更自然的C ++实现方法。

PS:

#ifdef SYMBOL
    ifdef = "if defined"
    this part of the code is excluded before the compiler even sees it
    if SYMBOL is not defined (via #define)
#endif

#ifndef SYMBOL
    ifndef = "if not defined"
    this part of the code is excluded before the compiler even sees it
    if SYMBOL is defined (via #define)
#endif

我之所以写“排除在外”是为了强调它对代码可读性的不利影响。如果您过度使用#ifdef#ifndef在常规代码块内,将很难阅读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Makefiles-如何在ifndef / ifdef中使用评估变量?

来自分类Dev

Makefiles-如何在ifndef / ifdef中使用评估变量?

来自分类Dev

在D编程语言中,“#ifdef”,“#ifndef”,“#else”,“#elif”,“#define”,“#undef”的类似物是什么?

来自分类Dev

懒惰vs vs

来自分类Dev

承诺vs反应VS?

来自分类Dev

rdbuf vs getline vs“ >>”

来自分类Dev

存在Vs IN Vs =

来自分类Dev

LocalAlloc Vs GlobalAlloc Vs malloc Vs新

来自分类Dev

Metaphone vs Levenshtein vs Soundex vs Hamming

来自分类Dev

Scala for ( ) vs for { }

来自分类Dev

计划| λvsλ?

来自分类Dev

Groovy中的“ vs”,“ vs”,“ vs”和“ vs”。何时使用什么?

来自分类Dev

-包含VS -in

来自分类Dev

HDMI vs分量vs VGA vs DVI vs DisplayPort

来自分类Dev

onCleanUp()vs onComplete()vs afterLaunch()

来自分类Dev

GCD vs @synchronized vs NSLock

来自分类Dev

线程vs Begininvoke vs异步

来自分类Dev

Eventlet vs Greenlet vs gevent?

来自分类Dev

TimerTask vs Timer vs Thread?

来自分类Dev

TextColor vs TextColorPrimary vs TextColorSecondary

来自分类Dev

ICE vs STUN vs TURN

来自分类Dev

处理vs线程vs进程

来自分类Dev

WAPPALYZER vs Netcraft vs builtwith

来自分类Dev

pandas loc vs. iloc vs. at vs. iat?

来自分类Dev

What are the differences restkit vs afnetworking vs mknetworkkit vs nsurlconnection

来自分类Dev

极限vs存在vs count(*)vs count(id)在MySQL中

来自分类Dev

聚合vs组合vs关联vs直接关联

来自分类Dev

实体框架-CreateQuery VS ExecuteFunction VS ExecuteStoreQuery VS ExecuteStoreCommand

来自分类Dev

从VS2012迁移到VS2013或VS 2015