我正在寻找一种方法可靠地确定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)
谢谢.
今天,我发现了一个相当有趣的事情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) 是否有适用于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只能建议使用语法正确的变体,例如只列出此结构的类字段,类.
结果:(从答案中合并):
如何尝试从超时的套接字读取数据?我知道,select,pselect,poll,有一个超时字段,但使用它们会禁用tcp reno stack中的"tcp fast-path".
我唯一的想法是在循环中使用recv(fd,...,MSG_DONTWAIT)
有机器(或编译器),在哪里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什么?
我有2个静态的Linux库,通过创建ar cr,libabc.a和libxyz.a.
我想将它们合并到一个静态库中libaz.a.
我怎样才能做到这一点.
我想创建一个合并的静态库,而不是让两个库都给应用程序的最终链接.
原子操作的成本是什么(比较和交换或原子添加/减少中的任何一个)?它消耗了多少周期?它会暂停SMP或NUMA上的其他处理器,还是会阻止内存访问?它会在无序CPU中刷新重新排序缓冲区吗?
缓存有什么影响?
我对现代流行的CPU感兴趣:x86,x86_64,PowerPC,SPARC,Itanium.
我有两个char*我要比较的邮政编码,忽略了大小写.有这个功能吗?
或者我是否必须遍历每个使用tolower函数然后进行比较?
知道这个函数如何对字符串中的数字做出反应
谢谢
为了简化问题,我有一个图表,其中包含2D平面上的节点和边.
我想要做的是单击一个按钮,它会自动布局图形看起来干净.我的意思是边缘的最小交叉,节点之间的漂亮空间,甚至可能代表图形比例(加权边缘).
我知道这是一个看起来很干净的图表是完全主观的,但有没有人知道一个算法开始,而不是重新发明轮子?
谢谢.