小编osg*_*sgx的帖子

在C++中确定32对64位

我正在寻找一种方法可靠地确定C++代码是在32位还是64位编译.我们已经提出了我们认为使用宏的合理解决方案,但很想知道人们是否可以想到这可能会失败的情况,或者是否有更好的方法来做到这一点.请注意,我们正在尝试在跨平台的多编译器环境中执行此操作.

#if ((ULONG_MAX) == (UINT_MAX))
# define IS32BIT
#else
# define IS64BIT
#endif

#ifdef IS64BIT
DoMy64BitOperation()
#else
DoMy32BitOperation()
#endif
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ conditional-compilation 32bit-64bit

127
推荐指数
8
解决办法
11万
查看次数

构造符号的双重发射

今天,我发现了一个相当有趣的事情g++或者nm......构造函数定义似乎在库中有两个条目.

我有一个标题thing.hpp:

class Thing
{
    Thing();

    Thing(int x);

    void foo();
};
Run Code Online (Sandbox Code Playgroud)

而且thing.cpp:

#include "thing.hpp"

Thing::Thing()
{ }

Thing::Thing(int x)
{ }

void Thing::foo()
{ }
Run Code Online (Sandbox Code Playgroud)

我编译它:

g++ thing.cpp -c -o libthing.a
Run Code Online (Sandbox Code Playgroud)

然后,我继续nm:

%> nm -gC libthing.a
0000000000000030 T Thing::foo()
0000000000000022 T Thing::Thing(int)
000000000000000a T Thing::Thing()
0000000000000014 T Thing::Thing(int)
0000000000000000 T Thing::Thing()
                 U __gxx_personality_v0
Run Code Online (Sandbox Code Playgroud)

如您所见,两个构造函数Thing都在生成的静态库中列出了两个条目.我的g++是4.4.3,但是同样的行为发生在clang,所以这不仅仅是一个gcc问题.

这不会引起任何明显的问题,但我想知道:

  • 为什么定义的构造函数列出两次?
  • 为什么这不会导致"符号__的多重定义"问题?

编辑:对于卡尔,没有C参数的输出:

%> …
Run Code Online (Sandbox Code Playgroud)

c++ gcc constructor

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

适用于Windows的LLVM C++ IDE

是否有适用于Windows的C/C++ IDE,它与LLVM编译器(和Clang C/C++分析器)集成,就像现代Xcode一样.

我有Dev-Cpp(它使用过时的GCC)和Code :: Blocks(带有一些GCC).但GCC给了我非常神秘的错误信息.我想从Clang前端获得一些用户友好的错误消息.

是的,Clang无法用于复杂的C++代码,但是主干Clang已经可以编译LLVM本身了.所以我想知道是否有任何LLVM IDE正在开发或测试版中.

是的,我可以使用Clang作为其他编译器与GCC兼容的IDE.但是有没有与Clang 集成的 IDE ?Clang具有不同的输出格式,因此IDE必须解析它.Clang可以提供IDE解析源.Clang有一个分析选项,必须在IDE中支持.看看,例如http://iosdevelopertips.com/xcode/static-code-analysis-clang-and-xcode-3-2.html

而Clang最需要的功能是智能自动完成功能,因此IDE只能建议使用语法正确的变体,例如只列出此结构的类字段,类.

结果:(从答案中合并):

c++ windows ide llvm clang

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

Linux:是否有超时的套接字读取或recv?

如何尝试从超时的套接字读取数据?我知道,select,pselect,poll,有一个超时字段,但使用它们会禁用tcp reno stack中的"tcp fast-path".

我唯一的想法是在循环中使用recv(fd,...,MSG_DONTWAIT)

c sockets linux tcp

92
推荐指数
2
解决办法
13万
查看次数

有机器,sizeof(char)!= 1,或者至少CHAR_BIT> 8?

有机器(或编译器),在哪里sizeof(char) != 1

C99标准是否说sizeof(char)标准合规性实施必须正好1?如果有,请给我部分编号和引文.

更新: 如果我有一台机器(CPU),它不能寻址字节(最小读取是4个字节,对齐),但只有4-s的字节(uint32_t),这个机器的编译器可以定义sizeof(char)为4吗? sizeof(char)将是1,但char将有32位(CHAR_BIT宏)

Update2: 但是sizeof结果不是BYTES!这是CHAR的大小.char可以是2个字节,或者(可能是)7位?

Update3: 好的.所有机器都有sizeof(char) == 1.但机器有CHAR_BIT > 8什么?

c standards sizeof c99 char

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

如何将两个"ar"静态库合并为一个?

我有2个静态的Linux库,通过创建ar cr,libabc.alibxyz.a.
我想将它们合并到一个静态库中libaz.a.
我怎样才能做到这一点.

我想创建一个合并的静态库,而不是让两个库都给应用程序的最终链接.

linux static-libraries unix-ar

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

原子操作成本

原子操作的成本是什么(比较和交换或原子添加/减少中的任何一个)?它消耗了多少周期?它会暂停SMP或NUMA上的其他处理器,还是会阻止内存访问?它会在无序CPU中刷新重新排序缓冲区吗?

缓存有什么影响?

我对现代流行的CPU感兴趣:x86,x86_64,PowerPC,SPARC,Itanium.

performance atomic cpu-architecture lock-free

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

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

C中的Case Insensitive String comp

我有两个char*我要比较的邮政编码,忽略了大小写.有这个功能吗?

或者我是否必须遍历每个使用tolower函数然后进行比较?

知道这个函数如何对字符串中的数字做出反应

谢谢

c string standard-library

63
推荐指数
5
解决办法
13万
查看次数

图自动布局算法

为了简化问题,我有一个图表,其中包含2D平面上的节点和边.

我想要做的是单击一个按钮,它会自动布局图形看起来干净.我的意思是边缘的最小交叉,节点之间的漂亮空间,甚至可能代表图形比例(加权边缘).

我知道这是一个看起来很干净的图表是完全主观的,但有没有人知道一个算法开始,而不是重新发明轮子?

谢谢.

algorithm layout graph edges nodes

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