小编dim*_*mba的帖子

什么是uintptr_t数据类型

什么是uintptr_t以及它可以用于什么?

c++ types pointers

233
推荐指数
5
解决办法
16万
查看次数

cmake和libpthread

我正在跑步RHEL 5.1和使用gcc.

我如何告诉cmake添加-pthread到编译和链接?

pthreads cmake

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

TCP选项SO_LINGER(零) - 何时需要

我想我理解该选项的正式含义.在我正在处理的一些遗留代码中,使用了该选项.客户抱怨RST作为对其接近的连接的FIN的回应.

我不确定我是否可以安全地将其删除,因为我不明白何时应该使用它.

能否举例说明何时需要该选项?

sockets networking tcp setsockopt so-linger

84
推荐指数
4
解决办法
12万
查看次数

auto_ptr是否已被弃用?

  1. 在传入的C++标准中是否会弃用auto_ptr?
  2. unique_ptr应该用于所有权转移而不是shared_ptr吗?
  3. 如果unique_ptr不在标准中,那么我是否需要使用shared_ptr?

c++ standards smart-pointers auto-ptr unique-ptr

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

在C++中定义全局常量

我想在C++中定义一个常量,以便在几个源文件中可见.我可以想象以下方法在头文件中定义它:

  1. #define GLOBAL_CONST_VAR 0xFF
  2. int GLOBAL_CONST_VAR = 0xFF;
  3. 一些功能可以恢复价值(例如int get_GLOBAL_CONST_VAR())
  4. enum { GLOBAL_CONST_VAR = 0xFF; }
  5. const int GLOBAL_CONST_VAR = 0xFF;
  6. extern const int GLOBAL_CONST_VAR; 并在一个源文件中 const int GLOBAL_CONST_VAR = 0xFF;

选项(1) - 绝对不是您想要使用的选项

选项(2) - 使用头文件在每个目标文件中定义变量的实例

选项(3) - 在大多数情况下,IMO过度杀戮

选项(4) - 在许多情况下可能不好,因为枚举没有具体类型(C++ 0X将增加定义类型的可能性)

所以在大多数情况下我需要在(5)和(6)之间进行选择.我的问题:

  1. 你更喜欢(5)或(6)?
  2. 为什么(5)没问题,而(2)不是?

c++

75
推荐指数
7
解决办法
9万
查看次数

将'typedef'从基于'模板'的派生类传播

我正在尝试定义基类,它只包含typedef.

template<typename T>
class A
{
public:
    typedef std::vector<T> Vec_t;
};


template<typename T>
class B : public A<T>
{
private:
    Vec_t v;  // fails - Vec_t is not recognized
};
Run Code Online (Sandbox Code Playgroud)

BI中为什么会收到Vec_t无法识别的错误,我需要明确写出来?

typename A<T>::Vec_t v;
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates typedef name-lookup

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

如何使用带有行号信息的gcc获取C++的堆栈跟踪?

我们在专有的assert宏中使用堆栈跟踪来捕获开发人员的错误 - 当捕获错误时,打印堆栈跟踪.

我发现gcc的配对backtrace()/ backtrace_symbols()方法不足:

  1. 名称被破坏了
  2. 没有行信息

第一个问题可以通过abi :: __ cxa_demangle来解决.

然而,第二个问题更加艰难.我发现了替换backtrace_symbols().这比gcc的backtrace_symbols()更好,因为它可以检索行号(如果使用-g编译),并且不需要使用-rdynamic进行编译.

Hoverer代码是GNU许可的,所以恕我直言我不能在商业代码中使用它.

任何建议?

PS

gdb能够打印传递给函数的参数.可能已经要求太多了:)

PS 2

类似的问题(感谢nobar)

c++ linux gcc stack-trace

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

列出由cmake生成的Visual Studio C++项目中的头文件

我正在为我们的产品构建基于cmake的构建系统.问题是由cmake生成的Visual Studio项目不会在解决方案浏览器中显示头文件.

我需要在CMakeList.txt中添加什么来列出头文件?首选解决方案是不需要列出每个特定的头文件.

解决方案 这是我带来的解决方案:

file(GLOB_RECURSE INCS "*.h")
add_library(myLib ${SRCS} ${INCS})
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ cmake visual-studio-2008

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

在跨平台代码中处理stdafx.h

我有一个基于Visual Studio C++的程序,它使用预编译的头文件(stdafx.h).现在我们使用gcc 4.x将应用程序移植到Linux.

问题是如何在两种环境中处理预编译的头文件.我用Google搜索但无法得出结论.

显然,我希望stdafx.h在Visual Studio中保留,因为代码库非常大,预编译的头文件可以增加编译时间.

但问题是在Linux中该怎么做.这是我发现的:

  1. 保持stdafx.h原样.gcc比VC++编译代码要快得多(或者只是我的Linux机器更强...... :)),所以我对这个选项很满意.
  2. 这里使用方法- stdafx.h看起来像(USE_PRECOMPILED_HEADER仅为VS 设置):

    #ifdef USE_PRECOMPILED_HEADER
    ... my stuff
    #endif 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用此处的方法- 编译VC++ /FI隐式包含stdafx.h在每个cpp文件中.因此,在VS中,您的代码可以轻松切换,无需预编译头文件即可编译,无需更改代码.
    我个人不喜欢依赖,而这个混乱stdafx.h正在推动一个庞大的代码库.因此,该选项对我很有吸引力 - 在你没有的Linux上stdafx.h,同时仍然/FI只能在VS上打开预编译的头文件.

  4. 在Linux上编译stdafx.h只作为预编译头(模仿Visual Studio)

你的意见?还有其他方法可以解决这个问题吗?

c++ gcc cross-platform stdafx.h visual-studio

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

如何打印pthread_t

搜索过,但没有遇到令人满意的答案.

我知道没有一种可移植的方式来打印pthread_t.

你是如何在你的应用程序中做到的?

更新:

其实我不需要pthread_t,而是一些小的数字id,在调试消息中识别不同的线程.

在我的系统(64位RHEL 5.3)上,它被定义为unsigned long int,因此它是大数字,只是打印它在调试行中占有一席之地.gdb如何分配短时间?

c c++ linux pthreads

50
推荐指数
4
解决办法
10万
查看次数