我想知道正在使用
#define ll long long
typedef long long ll;
一个很好的做法,几个星期前我在查看代码中的顶级红色编码器代码后采用了它。
另外请解释b / w typedef和#define的区别,因为无论我在哪里学习或发现它们,它们都是一样的。
解释#define和typedef使用和区别?
使用也很好,运行时间减少了,即使它减少了0.0000001秒,请告诉你。
答案 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;
}
}
这个程序做了什么?
随便读一下程序的人会怎么做?