小编PSk*_*cik的帖子

获取`:map`的输出到缓冲区

我想获得无参数:map调用的输出,以便我可以使用vim的搜索功能来查找映射.

我找到了:redir,它将ex命令的输出重定向到变量,寄存器或文件中,但它似乎不适用于map,它必须以某种不同的方式输出映射,例如:echo 'hello world'.

vim

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

正则表达式在C++中逃脱

我如何正则表达式转义动态输入的字符串.我想用实际的正则表达式代码包围然后做匹配,但我需要输入转义中的所有正则表达式特殊字符.

regex c++11

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

gcc预处理器中的destringification

是否可以编写一个解析字符串文字参数的gcc宏?我知道相反的可能性#.可以逆转吗?

例如,__func__ 以字符串文字的形式计算当前函数的名称.我可以删除它周围的双引号吗?

c c-preprocessor

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

C中的两部分循环

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

提到

for ( declaration expression opt ; expression opt ) statement
Run Code Online (Sandbox Code Playgroud)

6.8.5下的迭代语句.

这是一个错字或不C11有两个表达式,在最括号循环?

c c11

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

同类型的联盟成员

假设我有一个具有两个成员ab具有相同类型的联合u (例如,int).

union u{
    int a,b;
    char c;
};
Run Code Online (Sandbox Code Playgroud)

如果我写入a,通过值传递给函数,并且函数读取b,期望获得a值,是否会有任何问题,考虑ab具有相同的类型?成员读取是否需要镜像成员写入?

c unions

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

复合文字的生命周期

6.5.2.5p5

如果复合文字出现在函数体外,则该对象具有静态存储持续时间; 否则,它具有与封闭块相关的自动存储持续时间.

我是否正确将"封闭块"解释为"最里面的封闭块"?(因为如果它不是最里面的那个,那是什么?) 为什么gcc和clang表现得好像文字的生命周期是它的封闭函数?

例:

long foo(long*);

void call_foo()
{
    {foo(&(long){42});}
    {foo(&(long){42});}
    {foo(&(long){42});}
    {foo(&(long){42});}
}

//for comparison

void call_foo2()
{
    {long x=42;foo(&x);}
    {long x=42;foo(&x);}
    {long x=42;foo(&x);}
    {long x=42;foo(&x);}
}
Run Code Online (Sandbox Code Playgroud)

gcc/clang在-O3生成的代码:

call_foo:
  sub rsp, 40
  mov rdi, rsp
  mov QWORD PTR [rsp], 42
  call foo
  lea rdi, [rsp+8]
  mov QWORD PTR [rsp+8], 42
  call foo
  lea rdi, [rsp+16]
  mov QWORD PTR [rsp+16], 42
  call foo
  lea rdi, [rsp+24]
  mov QWORD PTR [rsp+24], 42
  call foo
  add rsp, 40
  ret …
Run Code Online (Sandbox Code Playgroud)

c gcc clang compound-literals language-lawyer

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

在错误/警告输出中禁用某些宏的扩展

我有一个非常常用的,有点复杂的宏(MAC(...)为了这个问题,我们称之为),它必须是一个宏(因为它是非常通用的类型)。该宏在语法上表现得像函数调用,但在内部调用了 10 多个其他宏。

因此,如果我在调用时出错,MAC()例如,如果我这样做:MAC(1-)gcc/clang 将向我转储我根本不 感兴趣的相当长的预处理器堆栈跟踪MAC()

如果我像这样定义 MAC():

#if DEBUG_MAC
    int MAC(); //so I get a nice preprocessor stack trace
#else
    #define MAC(...) //here would come the actual definition
#endif
Run Code Online (Sandbox Code Playgroud)

然后,在遇到我用 重新编译的错误时-DDEBUG_MAC,我得到了一个很好的(=不存在的)预处理器堆栈跟踪,但这种方法感觉很笨拙,只能用于诊断硬错误,而不是警告。

有没有办法让 gcc 或 clang 表现得像这样,即,为了错误报告的目的,将宏视为不透明的函数调用,而不进行这种声明/宏改组?

c gcc clang c-preprocessor

5
推荐指数
0
解决办法
266
查看次数

stdint.h 中的 {U,}INTn_C 宏有什么意义?

什么时候真正需要这些宏?

我的系统 (gcc/glibc/linux/x86_64)stdint.h使用__这些( -prefixed) 变体来定义:

# define INT64_MIN      (-__INT64_C(9223372036854775807)-1)
# define INT64_MAX      (__INT64_C(9223372036854775807))
# define UINT64_MAX     (__UINT64_C(18446744073709551615))
# define INT_LEAST64_MIN    (-__INT64_C(9223372036854775807)-1)
# define INT_LEAST64_MAX    (__INT64_C(9223372036854775807))
# define UINT_LEAST64_MAX   (__UINT64_C(18446744073709551615))
# define INT_FAST64_MIN     (-__INT64_C(9223372036854775807)-1)
# define INT_FAST64_MAX     (__INT64_C(9223372036854775807))
# define UINT_FAST64_MAX    (__UINT64_C(18446744073709551615))
# define INTMAX_MIN     (-__INT64_C(9223372036854775807)-1)
# define INTMAX_MAX     (__INT64_C(9223372036854775807))
# define UINTMAX_MAX        (__UINT64_C(18446744073709551615))
Run Code Online (Sandbox Code Playgroud)

然而,limits.h它似乎与:

#   define LONG_MAX 9223372036854775807L
#   define ULONG_MAX    18446744073709551615UL
Run Code Online (Sandbox Code Playgroud)

为什么不能stdint.h忘记_C宏并简单地做:

#   define INT_LEAST64_MAX  9223372036854775807 //let it grow …
Run Code Online (Sandbox Code Playgroud)

c language-lawyer

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

NULL是指针吗?

因此,我与我的教授较早地争论过,认为NULL不是指针,但他坚持认为这是因为存在诸如NULL指针之类的东西。所以,现在我有点困惑,如果NULL确实是一个指针

我已经尝试过在互联网上搜索,但找不到任何答案,所以我的最后选择是在这里

c null pointers conceptual concept

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

字符常量是否始终为正?

我很好奇我能否编译

int map [] = { [ /*(unsigned char)*/ 'a' ]=1 };
Run Code Online (Sandbox Code Playgroud)

不论平台如何,还是unsigned char在使用字符常量作为索引之前将其转换为更好。

c language-lawyer

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