草庐IT

c++ - 为什么#define 不好,什么是合适的替代品?

#definedItemNameL"CellPhone" 最佳答案 将其定义为常量变量。这是一个很好的编程习惯。constwchar_t*dItemName=L"CellPhone";如果您稍后需要知道字符串的长度,则将其定义为数组:constwchar_tdItemName[]=L"CellPhone";此外,为什么#define不好:它将所有使用单词dItemName的地方转换为L"CellPhone"。示例:struct{intdItemName;}SomeStruct;将失效:struct{intL"CellPhone";}

c++ - C++ 中的 static const 与 #define - 可执行文件大小的差异

我的基本情况:我有一个包含类似#definefoo(Flag1|Flags2|Flag3)的包含文件,因此它是位标志的预定义组合。为了类型安全,我想用静态常量替换这些#defines,即staticconstintfoo=(Flag1|Flag2|Flag3)(或类似的)。这个包含文件包含在程序的几十个地方。现在,当我在启用所有相关优化选项(使用VS2010的C++编译器)的情况下进行发布构建时,替换#defines似乎会使可执行文件增加几个KiB,具体取决于我替换了多少常量。为什么会这样?据我所知,如果可能的话,整数常量应该“内联”到生成的ASM代码中,我看不出如何使用staticc

c++ - #define hell C/C++ 的替代品/工具

在我们的C/C++项目中,我们使用一个充满#ifdef和#defines的配置header(~1000行)#if(defined(HW_1)||defined(SOME_TECHNOLOGY_SUPPORTED))&&defined(OTHER_TECHNOLOGY_SUPPORTED)#defineSOME_FEATURE_AVAILABLE#endif在我们的构建配置中,我们预定义了一些传递给编译器的定义。这会在我们的配置header中产生不同的定义(如SOME_FEATURE_AVEILABLE)。由于我们的配置头很大,所以也有点乱。对于这个#definehell,是否有任何替代

c++ - "#define new DEBUG_NEW"和 "#undef THIS_FILE"等真的有必要吗?

当您创建新的MFC应用程序时,向导会在几乎每个CPP文件中创建以下代码块:#ifdef_DEBUG#definenewDEBUG_NEW#endif有时它还会添加:#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;如果这段代码是多余的,我想从我的CPP文件中删除它。我在VS2008上使用带有C++/CLI的MFC应用程序。从CPP中删除这段代码后,我尝试在Debug中运行,它似乎工作正常。"new"变量工作正常,没有泄漏,ASSERT对话框显示正确的文件名并跳转到有问题的行。谁能告诉我它的作用以及删除它是否安全? 最

c++ - 在没有 #define 的情况下捕获 __LINE__ 和 __FILE__

尝试确定以下C风格代码的“现代”实现:#definelogError(...)log(__FILE__,__LINE__,__VA_ARGS__)是否可以使用不依赖于#define的可变参数模板或类似的东西来捕获它?所需用例:logError("Ohno!Anerroroccurred!");__FILE__和__LINE__是在后台捕获的,但反射(reflect)了调用logError的文件名和行号。 最佳答案 宏确实是您唯一的选择,至少在std::source_location之前是这样。使其成为标准并满足您的愿望。

c++ - 在 C++ 中使用 "#define"的替代方案?为什么会被人嫌弃?

我开发C++还不到一年,但在那段时间里,我听到很多人谈论#define有多么可怕。现在,我意识到它是由预处理器而不是编译器解释的,因此无法调试,但这真的那么糟糕吗?这是一个示例(未经测试的代码,但您已经了解了大致的想法):#defineVERSION"1.2"#includeclassFoo{public:stringgetVersion(){return"Thecurrentversionis"+VERSION;}};为什么这段代码不好?是否有使用#define的替代方法? 最佳答案 Whyisthisthiscodebad?因为

c++ - #define值的大小

如果一个值被定义为#defineM_4040大小是否与short(2字节)相同,还是与char(1字节)或int(4字节)?大小取决于您是32位还是64位? 最佳答案 #define没有大小,因为它不是类型,而是对C++代码的纯文本替换。#define是一个预处理指令,它甚至在您的代码开始编译之前运行。替换后C++代码的大小与您那里的C++表达式或代码的大小无关。例如,如果您使用L作为后缀,例如102L,那么它会被视为long,否则没有后缀,只是一个int。所以在x86和x64上可能是4个字节,但这取决于编译器。也许C++标准的In

c++ - #define far, #define near Windef.h

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Isthereacleanwaytopreventwindows.hfromcreatinganear&farmacro?Windef.h中这两个定义有什么意义?#definefar/*nothing*/#definenear/*nothing*/我知道它与nearandfar有关指针和它们不再使用的事实,但是#undef它们是否安全,所以我可以使用near和far作为我的代码中的函数和变量名称?或者,我是否应该简单地避免它并且从不使用near和far作为标识符?

c++ - 看似毫无意义的#define of function

我遇到过一些代码:BOOLCBlahClass::SomeFunction(DWORD*pdw){RETURN_FALSE_IF_FILE_DOESNT_EXIST//therestofthecodemakessense...//...}除了我对这条线有一点疑问外,我看到的一切都很有道理RETURN_FALSE_IF_FILE_DOESNT_EXIST我搜索了这个字符串并找到了#define:#defineRETURN_FALSE_IF_FILE_DOESNT_EXIST\if(FALSE==DoesFileExist())returnFALSE;我的问题是……到底是什么?像这样制作#

ios - #define 在 Objective-C 的头文件中

我有一个Global.h看起来像#defineNUMBERX21在AppDelegate.h中,我包含了Global.h文件。在AppDelegate.m中,我包含了AppDelegate.h文件。但是在AppDelegate.m中我无法访问NUMBERX变量。ERROR:Useofundeclaredindentifier'NUMBERX'.如果我在AppDelegate.h中定义NUMBERX,它就可以工作,但我想在我想使用NUMBERX变量的所有其他头文件中只包含头文件(Global.h)。我该如何解决? 最佳答案 如果您使用