使用#define和typedef与数据类型是一个好习惯吗?

时间:2017-04-21 16:22:10

标签: c++

我想知道正在使用

#define ll long long
typedef long long ll;

一个很好的做法,几个星期前我在查看代码中的顶级红色编码器代码后采用了它。

另外请解释b / w typedef和#define的区别,因为无论我在哪里学习或发现它们,它们都是一样的。

解释#define和typedef使用和区别?

使用也很好,运行时间减少了,即使它减少了0.0000001秒,请告诉你。

3 个答案:

答案 0 :(得分:5)

通常,使用语言构造而不是预处理器构造。宏的问题在于,每个使用ll后,该宏的定义将被替换:

void f() {
    int ll = 3; // whoops, error
}

使用typedef代码可以。

答案 1 :(得分:0)

基本上应该避免#define它没有经过类型检查,编译器也看不到它。

将typedef用于基本类型也不是最佳实践。

但是,两者都有它们的用途,#define当你想在编译之前做一些事情,比如在发布模式下省略调试代码,和typedef,这可以提高使用一些更长的STL结构时的可读性。

答案 2 :(得分:0)

从根本上说,#define的问题与编译器性能无关。

它与以难以调试的方式破坏编程环境有关。

人为的例子:

#include <iostream>

#define while if

int main()
{
    int i = 10;
    while (i) {
        std::cout << i-- << std::endl;
    }
}

这个程序做了什么?

随便读一下程序的人会怎么做?