小编Evg*_*Evg的帖子

C++ 中 #ifdef Defined() 的奇怪行为

我正在 Visual Studio Community 中使用 C++20 编写跨平台代码,但我陷入了以下代码的输出:


#define WINDOWS (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__))
#define UNIX (defined(__unix__) || defined(__unix))

constexpr bool is_unix1()
{
#ifdef UNIX
    return true;
#else
    return false;
#endif
}

constexpr bool is_unix2()
{
#ifdef defined(UNIX)
    return true;
#else
    return false;
#endif
}


int main()
{
    cout << std::boolalpha << is_unix1() << " " << is_unix2() << endl;
}
Run Code Online (Sandbox Code Playgroud)

当我在 Windows 中从 VS Community 内部运行此代码时,我得到以下输出:

true false
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么is_unix1()评估为falsewhileis_unix2()评估为吗true? …

c++ macros conditional-compilation defined

0
推荐指数
1
解决办法
125
查看次数

如果/其他(初学者)

int x = 0;

printf("Geben Sie bitte ihr Alter ein \n");
scanf_s("%i",&x);

if (x <= 15)
{
    printf("Sie duerfen keinen Alkohol trinken! \n");
}

else
{
    printf("Sie duerfen Bier trinken \n");

    if (x >= 18)
    {
        printf("Sie duerfen Alkohol jeglicher Art trinken! \n");
    }
}
Run Code Online (Sandbox Code Playgroud)

条件:

  • 0-15之间:无酒精
  • 16-17岁之间:允许啤酒
  • 18岁以上:允许所有含酒精的饮料

问题是,当您说您已年满18岁时,它显示了第二部分

printf("Sie duerfen Bier trinken \n");
Run Code Online (Sandbox Code Playgroud)

同样,我真的不知道该如何解决。

c++ if-statement

-1
推荐指数
1
解决办法
102
查看次数

cpp, "\0" == NULL 返回 false?如何判断它是否为 null ptr?

我得到了这些结果。我究竟做错了什么?

const char *c = "\0";
cout << (c == NULL); // false
cout << (c == nullptr); //false
Run Code Online (Sandbox Code Playgroud)

c++ string-literals null-pointer

-1
推荐指数
1
解决办法
91
查看次数

C++ 问题中的输出

#include<iostream>
using namespace std;
int main()
{
    int a = 5;
    int c;
    c = a+ a++;
    cout<<"c = a + a++ : "<<c<<" = "<<a<<" + "<<a++;
}
Run Code Online (Sandbox Code Playgroud)

我的代码是如何输出的: c = a + a++ : 11 = 7 + 6 为什么我的 a 会自动添加 2?

c++

-2
推荐指数
1
解决办法
52
查看次数