小编msc*_*msc的帖子

为什么"sizeof(a?true:false)"给出四个字节的输出?

我有一小段关于sizeof三元运算符的运算符的代码:

#include <stdio.h>
#include <stdbool.h>

int main()
{
    bool a = true;
    printf("%zu\n", sizeof(bool));  // Ok
    printf("%zu\n", sizeof(a));     // Ok
    printf("%zu\n", sizeof(a ? true : false)); // Why 4?
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(GCC):

1
1
4 // Why 4?
Run Code Online (Sandbox Code Playgroud)

但在这里,

printf("%zu\n", sizeof(a ? true : false)); // Why 4?
Run Code Online (Sandbox Code Playgroud)

三元运算符返回boolean类型,sizeof bool类型是1C中的字节.

为什么要sizeof(a ? true : false)输出四个字节?

c boolean sizeof conditional-operator c11

131
推荐指数
5
解决办法
1万
查看次数

如何在C++中从stringstream转换为字符串?

如何从C++ 转换std::stringstreamstd::string

我是否需要在字符串流上调用方法?

c++ string stringstream

115
推荐指数
4
解决办法
14万
查看次数

关于C中数组初始化的困惑

在C语言中,如果初始化一个这样的数组:

int a[5] = {1,2};
Run Code Online (Sandbox Code Playgroud)

那么未明确初始化的数组的所有元素将用零隐式初始化.

但是,如果我初始化这样的数组:

int a[5]={a[2]=1};

printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]);
Run Code Online (Sandbox Code Playgroud)

输出:

1 0 1 0 0
Run Code Online (Sandbox Code Playgroud)

我不明白,为什么a[0]打印1而不是0?是不确定的行为?

注意:这个问题是在接受采访时提出的.

c arrays initialization language-lawyer

101
推荐指数
3
解决办法
4928
查看次数

const_cast安全吗?

我找不到太多的信息const_cast.我能找到的唯一信息(在Stack Overflow上)是:

const_cast<>()用于添加/删除变量的常量(岬)(或挥发性岬).

这让我很紧张.可能const_cast会导致意外行为?如果是这样,什么?

或者,什么时候可以使用const_cast

c++ casting const-cast

88
推荐指数
6
解决办法
5万
查看次数

为什么const成员函数可以修改静态数据成员?

在以下C++程序中,从函数修改静态数据成员const工作正常:

class A 
{
  public:   
    static int a; // static data member

    void set() const
    {
        a = 10;
    }
};
Run Code Online (Sandbox Code Playgroud)

但是从函数修改非静态数据成员const不起作用:

class A 
{
  public:   
    int a; // non-static data member

    void set() const
    {
        a = 10;
    }
};
Run Code Online (Sandbox Code Playgroud)

为什么const成员函数可以修改static数据成员?

c++ static const function c++11

82
推荐指数
3
解决办法
6570
查看次数

C++ - 为什么不能使用'const'限定符创建静态成员函数

今天我遇到了问题.我需要一个static会员功能,const不是必须而是更好.但是,我没有成功.任何人都可以说为什么或如何?

c++ static language-lawyer const-method

78
推荐指数
2
解决办法
4万
查看次数

在C中编译并运行没有main()的程序

我正在尝试编译并运行以下程序而没有main()函数C.我使用以下命令编译了我的程序.

gcc -nostartfiles nomain.c
Run Code Online (Sandbox Code Playgroud)

编译器发出警告

/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340
Run Code Online (Sandbox Code Playgroud)

好的,没问题.然后,我已经运行了可执行文件(a.out),两个printf语句都成功打印,然后得到分段错误.

那么,我的问题是,为什么在成功执行print语句后出现分段错误?

我的代码:

#include <stdio.h>

void nomain()
{
        printf("Hello World...\n");
        printf("Successfully run without main...\n");
}
Run Code Online (Sandbox Code Playgroud)

输出:

Hello World...
Successfully run without main...
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

注意:

这里,-nostartfilesgcc标志阻止编译器在链接时使用标准启动文件

c gcc program-entry-point segmentation-fault gcc-warning

78
推荐指数
2
解决办法
8596
查看次数

为什么"noreturn"函数会返回?

我读了关于属性的这个问题noreturn,它用于不返回调用者的函数.

然后我用C做了一个程序.

#include <stdio.h>
#include <stdnoreturn.h>

noreturn void func()
{
        printf("noreturn func\n");
}

int main()
{
        func();
}
Run Code Online (Sandbox Code Playgroud)

并使用以下代码生成代码的汇编:

.LC0:
        .string "func"
func:
        pushq   %rbp
        movq    %rsp, %rbp
        movl    $.LC0, %edi
        call    puts
        nop
        popq    %rbp
        ret   // ==> Here function return value.
main:
        pushq   %rbp
        movq    %rsp, %rbp
        movl    $0, %eax
        call    func
Run Code Online (Sandbox Code Playgroud)

为什么函数func()在提供noreturn属性后返回?

c assembly function-call c11 noreturn

71
推荐指数
8
解决办法
1万
查看次数

使用printf打印size_t的正确方法是什么?

Size_t被定义为一个unsigned整数,但它的大小取决于你是在32位还是64位机器上.什么是正确和便携的打印方式size_t

c c++

68
推荐指数
3
解决办法
5万
查看次数

什么是"int*p = + s;" 做?

我在这里看到了一种奇怪的程序.

int main()
{
    int s[]={3,6,9,12,18};
    int* p=+s;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序在GCCClang编译器上进行了测试,并在两个编译器上都运行良好.

我很想知道,int* p=+s;做了什么?

数组是否已s衰减为指针类型?

c++ arrays pointers unary-operator

63
推荐指数
4
解决办法
7126
查看次数