草庐IT

c++ - 有符号右移 : which compiler use logical shift

我用VisualStudio、Ubuntu的GCC、Intel编译器、MinGW测试了右移。全部移入符号位。我想Xcode的GCC也是如此。我知道该行为是特定于实现的,但看起来所有主要的桌面/服务器编译器都实现了算术移位。有没有符号位不移位的广泛使用的编译器?谢谢。 最佳答案 C在很多不同的架构上运行。我的意思是很多不同的架构。您可以获得在嵌入式DSP和Craysuper计算机上运行的C代码。人们认为理所当然的C标准中的大多数“实现定义”部分实际上只会破坏晦涩的体系结构。例如,有一些DSP和Craysuper计算机,其中CHAR_B

c++ - 对符号 '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4' 的 undefined reference 在 Ubuntu 上构建 OpenCV

我在UbuntuTrusty上使用此命令构建以下代码。我是clang的新手,我可以使用帮助来调试这些错误。这些C绑定(bind)的cpp和hpp文件来自编译良好。我将这些文件中的header复制到我在此处列出的以下文件中,w.cppclang-std=c++11w.cpp-ow`pkg-config--cflags--libsopencv`错误如下:/usr/bin/ld:/tmp/w-2a90f4.o:undefinedreferencetosymbol'_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'//usr/lib/x86_64-linux-gnu/l

c++ - 导出符号是什么意思?

我一直在寻找“导出符号”这个术语。导出符号在C/C++中或对于库(共享/静态)意味着什么?我们从哪里导出符号,为什么?导出符号名称被编译器重整有什么关系? 最佳答案 导出符号意味着“宣传”它在目标文件/库中的存在以及它所在的位置,以便它可以被其他模块导入(=链接到)。链接可以静态或动态完成,但无论哪种方式,链接器都必须知道符号是什么以及它在哪里,并且导出符号和导入符号必须匹配才能发生。Namemangling与此相关(C++namemangling在符号名称中包含符号的类型定义,导出和导入符号的修饰必须匹配,链接器才能正确链接导入导

c++ - clang iostream - 找不到符号

所以我试图让clang编译器工作。我自然而然的首选程序是以下极其复杂的代码:#includeusingstd::cout;usingstd::endl;/*helloworld.cpp*/intmain(){cout在命令行上我执行了:clanghelloworld.cpp并且我得到了以下错误:Undefinedsymbolsforarchitecturex86_64:"std::ios_base::Init::~Init()",referencedfrom:___cxx_global_var_initincc-4iziZq.o"std::ios_base::Init::Init()"

c++ - 在 C++ 中的函数名前使用符号的含义?

举个例子:inlinestring&GetLabel(){returnm_Label;};其中m_Label是私有(private)类成员变量。按照我的理解,此函数将返回对变量m_Label的引用。在我的整个程序中使用它会有什么影响,只返回值而不是引用会更好吗?谢谢! 最佳答案 &符号不是在函数名之前,而是在返回类型之后。它返回对string的引用。这意味着此函数的调用者可以通过引用修改m_label的值。另一方面,它避免了复制字符串。您可能希望引用和函数是const,如下所示:inlineconststring&GetLabel(

c++ - 如何知道(在 GCC 中)何时声明了给定的宏/预处理器符号?

假设我在各种头文件中有#definefoo。它可能会扩展到一些不同的事物。我想知道(在编译.cc文件时)遇到#define时,它​​将扩展到什么,它是哪个文件以及它从何处包含。这可能吗?如果没有,是否有任何可能有帮助的部分解决方案?请随时添加带有澄清请求的评论。编辑:当前的答案似乎集中在有#define的情况下,我只想跳转到定义或知道定义是什么。这是简单的情况,是的,您的解决方案有效。但是当我在不同的文件中有相同的#define,并且想知道先启动哪个时,这些技术都没有用。好吧,我其实很小心地使用#warning找到了正确的地方。但这需要很多工作。 最佳答案

c++ - 头文件中的全局函数定义——如何避免重复符号链接(symbolic link)错误

我在仅header文件中有以下代码。#pragmaonceclasserror_code{public:unsigned__int64hi;unsigned__int64lo;};std::ostream&operator当项目中有2个cpp包含此头文件时,出现链接错误。errorLNK2005:"classerror_code__cdecloperator|(classerror_codeconst&,classViTrox::error_codeconst&)"(??U@@YA?AVerror_code@0@ABV10@0@Z)alreadydefinedinxxx.obj我知道我

c++ - 我可以鼓励 g++ 内联一个返回符号的开关吗?

我有一堆如下代码:intsign(MyEnume){switch(e){caseA:caseB:return1;caseC:caseD:return-1;default:throwstd::runtime_error("Invalidenumvalue");}}intf(inta,intb,intc,MyEnume){constintsign=sign(e);constintx=a*b-sign*c;constinty=a+sign*c;returnx/y;}这里的算法只是一个例子。实际代码更复杂,但要点是sign是-1或1,具体取决于枚举值,我们做了一堆计算,其中各种东西乘以sign

c++ - 两个无符号相减得到有符号

我有以下代码:#includetemplateTtest(Ta,Tb){floataabb=reinterpret_cast(a-b);}intmain(intargc,constchar*argv[]){std::uint8_ta8,b8;test(a8,b8);return0;}我知道reinterpret_cast无法工作,并且在编译时会出错。我正在使用该错误,以便编译器告诉我a-b的类型.问题是在这种情况下,它表示a-b的类型是int当它们都是uint8_t(unsignedchar)时.uint16_t也是如此.但不是uint32_t它说a-b是unsignedint.所以,

c++ - 两个无符号短裤的乘法真的会导致未定义的行为吗?

我花了一些时间浏览这个网站;特别是这个问题:Is((a+(b&255))&255)thesameas((a+b)&255)?在这样做的过程中,我得出的结论是intmain(){unsignedshorti=std::numeric_limits::max();unsignedshortj=i;autoy=i*j;}由于i和j到int的类型提升可能导致未定义的行为,随后在乘法时溢出!或许i和j甚至不需要这么大。我的结论是,例如,在unsignedshort是16位而int是32位的系统上,行为可以是未定义。我在这里是正确的吗? 最佳答案