小编msc*_*msc的帖子

如何确认C中无符号长整数的范围?

unsigned long在我的Linux gcc上有8个字节.

unsigned long long在我的Linux gcc上也有8个字节.

所以我认为它们可以显示的整数范围是从0分钟到最大(2 ^ 64-1).

现在我想确认一下我是否正确.

这是我的代码:

#include <stdio.h>
int main(void)
{
    printf("long takes up %d bytes:\n", sizeof(long));
    printf("long long takes up %d bytes:\n", sizeof(long long));

    unsigned long a = 18446744073709551615;
    a++;
    printf("a + 1 = %lu\n", a); 

    unsigned long long b = 18446744073709551615;
    b++;
    printf("b + 1 = %llu\n", b); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,代码无法编译,我收到以下警告:

warning: integer constant is so large that it is unsigned
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?我该如何修改代码?

c gcc integer range literals

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

是否保证解析为"(a?b:(c?d:e))"?

假设,如果我使用这样的三元运算符: a ? b : c ? d : e

代码:

#include <stdio.h>

int main()
{
    int a=1,b=2,c=3,d=4,e=5;
    printf("%d\n", a ? b : c ? d : e);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GccClang给出一个输出2.

问题:

  • 是否保证解析为(a ? b : (c ? d : e))?要么
  • 是不明确的行为?
  • C标准对此有何评论?

c ternary-operator conditional-operator

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

为什么8051上电时SP寄存器07h的值是多少?

当8051上电时,堆栈指针寄存器包含的值07h不是00h

embedded microcontroller 8051

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

为什么不用C++调用Destructor?

我在研究C++概念.我在构造函数和Destractor概念中感到困惑.编译器在退出程序时将隐式调用析构函数.但在我的程序中,只有构造函数调用.

#include <iostream>
using namespace std;

class A
{
        int i;
public:
        A()
        {
                cout<<"Constructor call"<<endl;
        }
        ~A()
        {
                cout<<"Destructtor call"<<endl;
        }
};

int main()
{
        A *a = new A();
}
Run Code Online (Sandbox Code Playgroud)

输出:

Constructor call
Run Code Online (Sandbox Code Playgroud)

所以,我有一个问题:为什么析构函数在退出程序时不会被编译器隐式调用?

c++ constructor destructor

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

dup(file_des) 等价于 fcntl(filedes, F_DUPFD, 0) 吗?

dup(file_des)相当于fcntl(filedes, F_DUPFD, 0)?如果yes,那么哪个更好用?

c linux

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

在为switch语句使用不同语法时,优化是否有任何可能的更改?

在以下两个代码段中哪个性能更好?为什么?

小片1:

 switch(a)
 {
      case 1 ... 5:
                   printf("%d\n",a);
                   break;
     case 6 ... 10:
                  printf("%d\n",a);
                  break;
    default:
            printf("%d\n",a);
 }
Run Code Online (Sandbox Code Playgroud)

摘录2:

switch(a)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
          printf("%d\n",a);
          break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
           printf("%d\n",a);
           break;
   default:
           printf("%d\n",a);
}
Run Code Online (Sandbox Code Playgroud)

c syntax performance switch-statement

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

在C++中切换语句

以下两个switch语句的代码片段有什么区别?

哪一个更好?我什么时候可以同时使用它们?

情况1:

int i = 10;
switch(i)
{
//case
}
Run Code Online (Sandbox Code Playgroud)

案例2:

switch(int i = 10, i)
{
//case
}
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,C++ 17允许在switch语句中初始化变量.

c++ switch-statement c++17

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

()运算符的返回值

我的方法中的最后一行应该是

return methodName(xxx,xxx);
Run Code Online (Sandbox Code Playgroud)

但我有它

return (xxx,xxx);
Run Code Online (Sandbox Code Playgroud)

方法返回类型是bool,我只是在调试问题时才注意到拼写错误.我没想到return (xxx,xxx);要编译.它究竟做了什么?

c++

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

min宏的奇怪行为

当我执行以下代码时:

cout<<min(INT_MAX, INT_MAX+ INT_MAX);
Run Code Online (Sandbox Code Playgroud)

我获得-2了输出.有人可以解释原因吗?
输出不应该是值INT_MAX

c++ min

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

char指针中的分段错误

运行以下代码时出现分段错误.这个错误的原因是什么?请帮忙

int main()
{
    char *str2 = "Hello";
    str2[3] = 'J';
    printf("%s\n",str2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c string-literals

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