小编Ari*_*ing的帖子

聚合初始值设定项之外的 C99 指示符成员

struct Foo {\n    char a[10];\n    int b;\n};\n\nstatic Foo foo = {.a="bla"};\n
Run Code Online (Sandbox Code Playgroud)\n

编译上面的代码会出现以下 gcc 错误:

\n
$ gcc -std=gnu++2a test.cpp \n\nC99 designator \xe2\x80\x98a\xe2\x80\x99 outside aggregate initializer\n
Run Code Online (Sandbox Code Playgroud)\n

我认为像这样的初始化列表中的 C 字符串指示符在 C++20 中可以吗?我缺少什么?我正在使用 gcc 版本 10。

\n

c++ gcc

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

Visual Studio Code中每个工作区的keybindings.json

是否可以将keybindings.json作为工作空间设置的一部分而不是用户设置?

由于我有与工作空间相关联的特定任务,因此我还希望能够分配特定于工作空间的快捷方式。因为我将在单独的Windows和Linux环境中使用这些快捷方式,所以我不希望看到这些键绑定定义最终出现在特定于环境的用户设置中。

visual-studio-code vscode-settings vscode-tasks

7
推荐指数
3
解决办法
1722
查看次数

当select()系统调用中的nfds = 0时会发生什么

我正在Linux上调试应用程序。它具有几个线程,这些线程会定期调用select系统调用:

strace 显示:

select(0, NULL, NULL, NULL, {1, 342414})
Run Code Online (Sandbox Code Playgroud)

所以nfds=0。我以为nfds是出现在任何集合中的最高文件描述符号readfdswritefdsexceptfds增加一个。它不能是标准输入(fd=0),因为这样会有nfds=1

那么nfds=0在这种情况下是什么意思呢?

谢谢!

c linux

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

编译器警告:负值左移

我认为GCC错误地产生了[-Wshift-负值]警告。

我有一个函数,应该产生一个由单个输入参数提供的一定长度的后缀掩码:

#include <stdint.h>

uint16_t get_suffix_mask_sht(uint8_t shift) {
    return (~(~((uint16_t) 0) << shift));
}
Run Code Online (Sandbox Code Playgroud)

我试图在不同版本的gcc上使用以下编译器选项来编译此函数

-Werror -Wextra
Run Code Online (Sandbox Code Playgroud)

如果我改变输出从这个警告也发生uint16_tuint8_t。更大的输出类型,即uint32_t不产生此警告。

我使用的是旧版GCC:7.4。但是我已经使用最新的GCC 9.x版本在Godbolt上进行了尝试,它们都发出相同的警告。但是Clang版本不会产生此错误。

c gcc gcc-warning

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