相关疑难解决方法(0)

为什么预处理器宏是邪恶的,有什么替代方案?

我一直都这么问,但我从来没有得到过一个非常好的答案; 我认为,在写第一个"Hello World"之前,几乎所有程序员都遇到过"宏不应该使用宏","宏是邪恶的"这样的短语等等,我的问题是:为什么?有了新的C++ 11,这么多年后还有一个真正的选择吗?

简单的部分是关于宏#pragma,特定于平台和特定于编译器,并且大多数时候它们具有严重的缺陷,例如#pragma once在至少两种重要情况下容易出错:不同路径中的相同名称以及一些网络设置和文件系统.

但总的来说,宏的用法和替代品呢?

c++ c-preprocessor c++11

85
推荐指数
3
解决办法
4万
查看次数

限制#define标签的范围

限制#define标签范围和避免不必要的令牌冲突的正确策略是什么?

在以下配置中:

MAIN.C

# include "Utility_1.h"
# include "Utility_2.h"
# include "Utility_3.h"
VOID Main() { ... }
Run Code Online (Sandbox Code Playgroud)

Utility_1.h

# define ZERO "Zero"
# define ONE  "One"
BOOL Utility_1(); // Uses- ZERO:"Zero" & ONE:"One"
Run Code Online (Sandbox Code Playgroud)

Utility_2.h

# define ZERO '0'
# define ONE  '1'
BOOL Utility_2(); // Uses- ZERO:'0' & ONE:'1'
Run Code Online (Sandbox Code Playgroud)

Utility_3.h

const UINT ZERO = 0;
const UINT ONE = 1;
BOOL Utility_3(); // Uses- ZERO:0 & ONE:1
Run Code Online (Sandbox Code Playgroud)

注: Utility _1,Utility_2Utility_3已经独立编写


错误:宏重新定义和令牌冲突
另外,最令人担心的是: …

c c++ scope include c-preprocessor

5
推荐指数
5
解决办法
1万
查看次数

标签 统计

c++ ×2

c-preprocessor ×2

c ×1

c++11 ×1

include ×1

scope ×1