C++ 将#define和typedef与数据类型一起使用是否是一种良好的做法?

C++ 将#define和typedef与数据类型一起使用是否是一种良好的做法?,c++,C++,我想知道他在用什么 #define ll long long typedef long long ll; 这是一个很好的实践,我在几周前查看了codeforces中顶级红色编码器的代码后采用了它 另外,请解释b/w typedef和#define的区别,因为无论我在哪里研究或发现它们,它们都是一样的 解释#定义和类型定义用途和区别 使用起来是否也很好,即使运行时间减少了0.0000001秒,运行时间是否也会减少,请告知。通常,使用语言结构而不是预处理器结构。宏的问题是,按照该宏定义使用的ll的

我想知道他在用什么

#define ll long long
typedef long long ll;
这是一个很好的实践,我在几周前查看了codeforces中顶级红色编码器的代码后采用了它

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

解释#定义和类型定义用途和区别


使用起来是否也很好,即使运行时间减少了0.0000001秒,运行时间是否也会减少,请告知。

通常,使用语言结构而不是预处理器结构。宏的问题是,按照该宏定义使用的
ll
的每一次都将被替换:

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

使用typedef,代码就可以了。

一般来说,使用语言结构而不是预处理器结构。宏的问题是,按照该宏定义使用的
ll
的每一次都将被替换:

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

使用typedef,代码就可以了。

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

对基本类型使用typedef也不是最佳做法


但是,两者都有各自的用途,#在编译之前定义您想要做的事情,例如在发布模式中省略调试代码,以及typedef,这可以在使用一些较长的STL结构时提高可读性。

基本上应该避免#定义它没有进行类型检查,编译器也看不到它

对基本类型使用typedef也不是最佳做法


然而,两者都有各自的用途,#在编译之前定义您想要做的事情,例如在发布模式中省略调试代码,以及typedef,它们可以在使用一些较长的STL结构时提高可读性。

基本上,#define的问题与编译器性能无关

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

人为的例子:

#include <iostream>

#define while if

int main()
{
    int i = 10;
    while (i) {
        std::cout << i-- << std::endl;
    }
}
#包括
#定义while if
int main()
{
int i=10;
而(i){

std::cout基本上,#define的问题与编译器性能无关

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

人为的例子:

#include <iostream>

#define while if

int main()
{
    int i = 10;
    while (i) {
        std::cout << i-- << std::endl;
    }
}
#包括
#定义while if
int main()
{
int i=10;
而(i){

std::难道
ll
long
有什么优势吗?任何人都很难理解你的代码(这比编写代码更常见)并且在键入时节省不到一秒钟,但也会浪费时间来包含任何提供此功能的标题,这也意味着引入另一个您可能不需要的标题。这两个标题都不是一个好的做法。可能重复的不使用代码质询代码作为好的做法。他们这样做是为了节省击键次数他们可以更快地编写不再使用的代码。取而代之的是使用事物的全名,编写干净、可读、可维护的代码。@shauryauppal:code density。我喜欢能够弹出一个函数甚至一个小类,并在一个屏幕上看到整个函数。
ll
long
有什么优势对于任何查看代码的人来说都很难理解(这种情况比编写代码更常见)并且在键入时节省不到一秒钟,但也会浪费时间来包含任何提供此功能的标题,这也意味着引入另一个您可能不需要的标题。这两个标题都不是一个好的做法。可能重复的不使用代码质询代码作为好的做法。他们这样做是为了节省击键次数他们可以更快地编写不再使用的代码。取而代之的是使用事物的全名,编写干净、可读、可维护的代码。@shauryauppal:code density。我喜欢能够弹出打开一个函数,甚至一个小类,并在一个屏幕上看到它的全部内容。但是,请注意,这段代码还有一个问题:它试图重新显示定义产生未定义行为的关键字。但是,请注意,此代码还有一个问题:它试图重新定义产生未定义行为的关键字。