草庐IT

c++ - GCC 会为运行时保留固定值的算术运算还是编译输出?

我想知道GCC是否会将具有固定值的算术保留在运行时执行,或者是否会将其设置为它的答案,例如。constfloathalfPi=M_PI/2;它会“归结”方程并设置constfloathalfPi=1.57079;还是将算法留给运行时? 最佳答案 嗯...如果我们谈论积分,答案将是明确的是(在通用术语ConstantFolding).即使冗长的计算也可以在编译时完成……这实际上是模板非类型参数评估和(现在)constexpr变量所必需的。在浮点表示的情况下,一旦计算变得更复杂,事情就会变得有点复杂。问题在于,不同大小(以及精度)的浮点

c++ - 将无符号字符写入和读取二进制文件

我正在编写一个简单的程序,该程序写入一个二进制文件,关闭它,然后读取刚刚写入的数据。我正在尝试编写一个无符号字符数组。我在读取数据时遇到了一些问题。我不确定我是在不正确地写入数据还是读取错误。当我读取数据时,我得到的输出为:5bytes表示读取的字节数,但我得到的输出与我写入文件的值不同。FILE*binFile=fopen("sample","wb");unsignedchardata[5]={5,10,15,20,25};fwrite(data,sizeof(unsignedchar),sizeof(data),binFile);fclose(binFile);unsignedch

c++ - 位操作 : keeping the common part at the left of the last different bit

考虑两个用二进制写的数字(左边是MSB):X=x7x6x5x4x3x2x1x0和Y=y7y6y5y4y3y2y1y0这些数字可以有任意位数,但都是同一类型。现在考虑x7==y7、x6==y6、x5==y5,但是x4!=y4。如何计算:Z=x7x6x500000或者换句话说,如何有效地计算一个数字,使公共(public)部分保持在最后一个不同位的左侧?templateinlineTf(constTx,constTy){//Somethinghere}例如,对于:x=10100101y=10110010它应该返回z=10100000注意:这是为了super计算的目的,这个操作将被执行数千亿

c++ - 缩小从 int 到 long unsigned int {} 的转换在 C++11 中格式错误

当我运行以下代码时-我收到警告“在C++11[-Wnarrowing]中,{}中从int到longunsignedint的缩小转换是错误的。我正在使用GNU4.8编译器。typedefstructTableEntry{unsignedlongvalue;constchar*label;}TableEntry;enumFunctionType{NORMAL=0,RANGE=1};TableEntryfunctionTypes[]={{NORMAL,"NORMAL"},{RANGE,"RANGE"}};我不明白为什么编译器将枚举视为整数?这是GCC4.8中的错误吗?有什么解决方法吗?任何帮

c++ - C/C++ 字节顺序和 tcp 套接字

我有一个关于字节序及其如何影响与C/C++的tcp套接字通信的一般概念性问题。这是一个例子:您有两台服务器与tcp套接字通信,一台使用大端,另一台使用小端。如果您通过套接字从一台服务器向另一台服务器发送一个整数,我知道字节顺序是相反的,整数将不会打印出预期的内容。正确的?我在某个地方看到(我再也找不到哪里了)如果你通过套接字字节顺序发送一个char不会改变值并且它会按预期打印。这个对吗?如果是这样,为什么?我觉得我以前做过这种事,但我可能是错觉了。谁能帮我解决这个问题?谢谢。编辑:是不是因为char只有1个字节? 最佳答案 考虑每种

c++ - printf 会导致未定义的行为吗?

这个问题在这里已经有了答案:Whydoesprintf("%f",0);giveundefinedbehavior?(10个答案)关闭6年前。intmain(){unsignedinti=12;printf("%lu",i);//Thisyieldsacompilerwarning}在32位平台上,使用printf和使用%lu的int会产生垃圾吗?

c++ - 从 LLVM 解析树重新生成源代码?

我很好奇是否有任何项目可以采用LLVM解析树并从中重新生成源代码。我特别想到C/C++。 最佳答案 如果“LLVM解析树”是来自clang的AST是的,您可以从clang的AST重新生成源代码。一些引用资料:Basicsource-to-sourcetransformationwithClang伊莱,2012年Modernsource-to-sourcetransformationwithClangandlibTooling伊莱,2014年PerformingSource-to-SourceTransformationswithCl

c++ - 如何有效地检查位掩码?

我正在使用inotify并希望有效地检查报告的位掩码事件(参见inotifymanpage)。现在我可以粗暴地检查每个事件的每一点,但如果不是愚蠢的话,那将是非常粗鲁的,因为我每次都会有N个条件。或者正在调用(bitmask&mask)==mask对于每个掩码已经super有效?由于生成的位掩码基本上只是一个定义明确的数字,我应该能够为此使用基本的算术运算。但在我自己想出一些东西之前,我想问一下是否有一种众所周知的、有效的方法来检查给定的位掩码。那么,有吗? 最佳答案 如果你想检查一个位掩码,那么if((value&mask)==m

c++ - 从 C 中用 C++ 开发的 DLL 调用函数

dll中的函数原型(prototype)如下voidFoo(intarg1,int&arg2);问题是,如何在C中声明函数原型(prototype)?声明是否合法?voidFoo(int,int*); 最佳答案 Isthedeclarationlegal?是的,但它没有声明相同的功能。如果您需要CAPI,则不能使用引用。坚持指针,并确保该函数具有C链接:extern"C"voidFoo(int,int*){//Functionbody}如果您无法修改DLL代码,则需要为其编写一个C++包装器,以公开适当的CAPI。

c++ - 我可以在扩展 Python 的同时使用 C++ 功能吗?

Python手册说您可以在C和C++中为Python创建模块。使用C++时可以利用类和模板之类的东西吗?它不会与其他库和解释器产生不兼容吗? 最佳答案 Hook函数的实现是用C还是用C++实现并不重要。事实上,我已经看到一些积极使用C++模板甚至Boost库的Python扩展。没问题。:-) 关于c++-我可以在扩展Python的同时使用C++功能吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/