小编nim*_*odm的帖子

GDB - 访问复数的实部和虚部

调试使用(C或C++)的程序时,将gdb复数显示为_M_value = xxx + yyy*I(具有类型complex double).

在调试时,我需要打印该数字乘以一个因子.

以下不起作用:

print a * 8.0
Run Code Online (Sandbox Code Playgroud)

我得到Argument to arithmetic operation not a number or boolean.

此外,我无法访问实部和虚部,以便我可以编写一个gdb宏来执行上述操作.我目前的解决方案是编写一个C函数来处理复杂的值和数组,并从gdb调用该函数.不知何故,这感觉不对.

c c++ gdb complex-numbers

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

使用Ocamllex作为lexing字符串(The Tiger Compiler)

我正在尝试遵循Appel的"ML中的现代编译器实现",并且正在使用Ocamllex编写词法分析器.

规范要求词法分析器转换转义序列返回字符串.以下代码摘自ocamllex输入文件:

 rule tiger = parse
 ...
 | '"'
     { let buffer = Buffer.create 1 in
       STRING (stringl buffer lexbuf)
     }
 and  stringl buffer = parse
 | '"' { Buffer.contents buffer }
 | "\\t" { Buffer.add_char buffer '\t'; stringl buffer lexbuf }
 | "\\n" { Buffer.add_char buffer '\n'; stringl buffer lexbuf }
 | "\\n" { Buffer.add_char buffer '\n'; stringl buffer lexbuf }
 | '\\' '"' { Buffer.add_char buffer '"'; stringl buffer lexbuf }
 | '\\' '\\' …
Run Code Online (Sandbox Code Playgroud)

ocaml lex tiger ocamllex

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

operator new []和非POD类型

我正在尝试重载operator new以跟踪内存分配(用于调试).我在分配非POD类型的数组时遇到了麻烦(例如,持有std :: string的类的数组).

似乎operator new调用为数组分配内存+ 8个字节,用于存储数组长度(可能是因为编译器可以在销毁数组时调用正确数量的析构函数).

如何operator new[]确定实际数据是放在返回的地址(POD数组)还是返回地址+8?(我需要这个,以便我可以搜索结构的指针)

c++ new-operator

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

C:&array_name的类型是什么?

&a以下代码中的类型是什么?

char a[100];
myfunc(&a)
Run Code Online (Sandbox Code Playgroud)

这甚至是有效的代码吗?gcc -Wall抱怨缺少原型,但否则会生成代码,就好像myfunc(a)写了一样.

c

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

接受C/C++数组类型的函数

在将数组作为参数传递时,似乎g ++忽略了数组大小的差异.即,即使使用,以下编译也没有警告-Wall.

void getarray(int a[500])
{
    a[0] = 1;
}

int main()
{
    int aaa[100];
    getarray(aaa);
}
Run Code Online (Sandbox Code Playgroud)

现在,我理解传递指针的基础模型,显然我可以将函数定义为getarray(int *a).但是,我预计,当我明确指定数组大小时,gcc至少会发出警告.

这种限制有什么办法吗?(我的guest boost :: array是一个解决方案,但我有很多旧代码使用c-style数组,它被提升为C++ ...)

c++ strong-typing

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

VIM在替换模式下"更改单词"等效

我习惯了vim中的"更改对象"命令:cw,ci"等.

但是,有时我正在处理格式化的文本文件,并希望保持间距.例如,在以下示例中

abc123  efg456
Run Code Online (Sandbox Code Playgroud)

我真的想要一个rw命令,当站在第一个a字符并用just替换第一个字时ABC,将123用空格替换字符.所以我会得到:

ABC     efg456
Run Code Online (Sandbox Code Playgroud)

(这是在rwABC<esc>光标最初打开a并处于命令模式时键入之后.

有任何想法吗?

vim

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

标签 统计

c++ ×3

c ×2

complex-numbers ×1

gdb ×1

lex ×1

new-operator ×1

ocaml ×1

ocamllex ×1

strong-typing ×1

tiger ×1

vim ×1