C++ 是否使用“定义已考虑”;坏习惯;?

C++ 是否使用“定义已考虑”;坏习惯;?,c++,c++14,c-preprocessor,C++,C++14,C Preprocessor,目标 最后,我想知道使用#define是否对代码有害,以及原因 代码 #include <iostream> using namespace std; #define favouriteNumber 20; int main() { int number = favouriteNumber; cout << number; } #包括 使用名称空间std; #定义偏好编号20; int main() { 整数=收藏夹编号; cout根据Stroust

目标

最后,我想知道使用
#define
是否对代码有害,以及原因

代码

#include <iostream>
using namespace std;

#define favouriteNumber 20;

int main()
{
    int number = favouriteNumber;
    cout << number;
}
#包括
使用名称空间std;
#定义偏好编号20;
int main()
{
整数=收藏夹编号;

cout根据Stroustrup的说法,定义常量尤其“糟糕”,因为编译器当时无法检查类型


另一方面,如果一行宏为您节省了20行显式代码,有些人肯定会同意,即使它本质上是不安全的,它也是有用的。这是因为编写更多的代码通常意味着出错的概率更高。

总是让我想起普林斯的那首老歌,“今晚我要像1969年那样编程。”.Macros是一种钝而实用的工具。并非所有宏的用法都是不好的。有些用法是不可避免的。但是,在您的示例中,这种用法肯定是不好的,因为它是不必要的。@Galik它也是不好的,因为它不全是大写的,并且包含一个
。如果稍微有点不合时宜的话,这是很好的复制:
静态constexpr
在许多方面优于
静态常量
。我可以问一下为什么要投反对票吗?可能是因为你回答了一个不应该回答的问题。这显然是基于观点的。这远远不是基于观点的。这是最先进的技术。我只是想帮你。如果有人不喜欢这个问题,请投反对票。“几乎所有人都会同意。”-黄鼠狼的话。@melpomene写更多的代码意味着更多的错误,这真的是“基于观点”吗?我看不出这个答案中有任何我不客观真实的东西。