我有一小段关于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++ 转换std::stringstream为std::string?
我是否需要在字符串流上调用方法?
在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?是不确定的行为?
注意:这个问题是在接受采访时提出的.
我找不到太多的信息const_cast.我能找到的唯一信息(在Stack Overflow上)是:
将
const_cast<>()用于添加/删除变量的常量(岬)(或挥发性岬).
这让我很紧张.可能const_cast会导致意外行为?如果是这样,什么?
或者,什么时候可以使用const_cast?
在以下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数据成员?
今天我遇到了问题.我需要一个static会员功能,const不是必须而是更好.但是,我没有成功.任何人都可以说为什么或如何?
我正在尝试编译并运行以下程序而没有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标志阻止编译器在链接时使用标准启动文件
我读了关于属性的这个问题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属性后返回?
Size_t被定义为一个unsigned整数,但它的大小取决于你是在32位还是64位机器上.什么是正确和便携的打印方式size_t?
我在这里看到了一种奇怪的程序.
int main()
{
int s[]={3,6,9,12,18};
int* p=+s;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序在GCC和Clang编译器上进行了测试,并在两个编译器上都运行良好.
我很想知道,int* p=+s;做了什么?
数组是否已s衰减为指针类型?
c++ ×6
c ×5
arrays ×2
c11 ×2
static ×2
assembly ×1
boolean ×1
c++11 ×1
casting ×1
const ×1
const-cast ×1
const-method ×1
function ×1
gcc ×1
gcc-warning ×1
noreturn ×1
pointers ×1
sizeof ×1
string ×1
stringstream ×1