小编Laz*_*zer的帖子

用C或C++打印调用堆栈

有没有办法在每次调用某个函数时在C或C++中正在运行的进程中转储调用堆栈?我的想法是这样的:

void foo()
{
   print_stack_trace();

   // foo's body

   return
}
Run Code Online (Sandbox Code Playgroud)

其中的print_stack_trace工作方式类似于callerPerl.

或类似的东西:

int main (void)
{
    // will print out debug info every time foo() is called
    register_stack_trace_function(foo); 

    // etc...
}
Run Code Online (Sandbox Code Playgroud)

在哪里register_stack_trace_function放置某种内部断点,这将导致在调用时打印堆栈跟踪foo.

在某些标准C库中是否存在这样的事情?

我正在使用GCC在Linux上工作.


背景

我有一个测试运行,基于一些不应该影响此行为的命令行开关,行为不同.我的代码有一个伪随机数生成器,我假设它是基于这些开关被不同地调用的.我希望能够使用每组开关运行测试,并查看随机数生成器是否针对每个开关进行不同的调用.

c c++ linux callstack

98
推荐指数
8
解决办法
15万
查看次数

如何在github上传新代码?

我有一个包含所有编码项目的目录.

我想使用命令行上传(正确的术语?)它到GitHub.

我已经看过旧问题.

我知道如何克隆现有项目,以及如何在进行任何更改后推送它.

但在这种情况下,我想创建一个新项目并添加文件.

如何使用命令行完成此操作?

git github

97
推荐指数
4
解决办法
13万
查看次数

Eratosthenes算法筛选的时间复杂度

来自维基百科:

算法的复杂性是 O(n(logn)(loglogn))位操作.

你怎么到达那个?

复杂性包括这个loglogn术语告诉我有一个sqrt(n)地方.


假设我在前100个数字(n = 100)上运行筛子,假设将数字标记为复合需要恒定时间(数组实现),我们使用的次数mark_composite()将类似于

n/2 + n/3 + n/5 + n/7 + ... + n/97        =      O(n^2)                         
Run Code Online (Sandbox Code Playgroud)

并且为了找到下一个素数(例如,7在越过所有数字的多个之后跳转到5),操作的数量将是O(n).

因此,复杂性将是O(n^3).你同意吗?

algorithm performance time-complexity sieve-of-eratosthenes

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

函数式编程语言如何工作?

如果函数式编程语言不能保存任何状态,他们如何做一些简单的事情,比如从用户那里读取输入?他们如何"存储"输入(或存储任何数据?)

例如:这个简单的C语言如何转换为像Haskell这样的函数式编程语言?

#include<stdio.h>
int main() {
    int no;
    scanf("%d",&no);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(我的问题受到了这篇优秀文章的启发:"名词王国的执行".阅读它让我更好地理解了什么是面向对象的编程,Java如何以一种极端的方式实现它,以及函数式编程语言是如何实现的对比.)

oop paradigms haskell programming-languages functional-programming

91
推荐指数
6
解决办法
1万
查看次数

这个程序如何运作?

#include <stdio.h>

int main() {
    float a = 1234.5f;
    printf("%d\n", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它显示0!! 怎么可能?是什么原因?


我故意%dprintf声明中加入研究行为printf.

c c++ memory printf endianness

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

如何使用awk打印特定数字后的所有列?

在shell上,当我需要一个特定的列时,我会输入awk.

这打印了第9列,例如:

... | awk '{print $9}'
Run Code Online (Sandbox Code Playgroud)

如何告诉awk打印所有列,包括和列9之后,而不仅仅是第9列?

shell awk

79
推荐指数
6
解决办法
8万
查看次数

deque和list STL容器有什么区别?

两者有什么区别?我的意思是方法都是一样的.因此,对于用户来说,他们的工作方式相同.

那是对的吗??

c++ stl list deque

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

继承:'A'是'B'无法访问的基础

$ cat inheritance.cpp 
#include <iostream>

using namespace std;

class A { };
class B : private A { };

int main() {
    A* ab = new B;
}
$
$ g++ inheritance.cpp
inheritance.cpp: In function 'int main()':
inheritance.cpp:9: error: 'A' is an inaccessible base of 'B'
$
Run Code Online (Sandbox Code Playgroud)

我只是不明白这个错误.

据我所知,正如本教程所证实的那样,private继承只应改变class B外部世界可见成员的方式.

我认为私有说明者所做的不仅仅是改变class B成员的可见性.

  • 我该怎么得到这个错误,这是什么意思?
  • 基本上在C++中允许这种类型的代码有什么问题?看起来完全无害.

c++ inheritance

77
推荐指数
4
解决办法
7万
查看次数

为什么DFS而不是BFS在图中查找周期

主要是DFS用于在图中找到循环而不是BFS.有什么原因?两者都可以在遍历树/图时查找是否已访问过节点.

algorithm tree graph breadth-first-search depth-first-search

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

C++ 0x和C++ 11有什么区别?

我在这里看到这两个术语的混合用法.

维基百科说

C++ 11,以前也称为C++ 0x ...

但我不确定为什么.

  • 为什么它首先被称为C++ 0x然后是C++ 11?
  • 另外,x代表什么?我猜 - 就像一个变量?

c++ c++11

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