Tag: 铿锵

更新OSX命令行工具6.3后缺lessC ++头<__ debug>

从App Store更新到命令行工具6.3后,内部包含<__ debug>的<vector>或<iterator>程序将导致文件未find错误,如下所示。 该cpp没有什么有趣的,但包括在其中一个包含的标题。 c++ -O3 -I/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers -L/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/build/binaries/clusterStaticLibrary /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp -o streamit -lcluster -lpthread -lstdc++ In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp:9: In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/node_server.h:22: In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/thread_info.h:20: In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/connection_info.h:19: /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/socket_holder.h:43:25: warning: delete called on 'mysocket' that is abstract but has non-virtual destructor [-Wdelete-non-virtual-dtor] if (!is_mem_socket) delete sock; ^ In file […]

为什么memcmp(a,b,4)只是有时被优化为uint32比较?

鉴于此代码: #include <string.h> int equal4(const char* a, const char* b) { return memcmp(a, b, 4) == 0; } int less4(const char* a, const char* b) { return memcmp(a, b, 4) < 0; } x86_64上的GCC 7引入了对第一种情况的优化(Clang已经做了很长一段时间): mov eax, DWORD PTR [rsi] cmp DWORD PTR [rdi], eax sete al movzx eax, al 但第二种情况仍然调用memcmp() : sub rsp, 8 […]

在cmake中,如何testing编译器是否是Clang?

我们有一套跨平台的CMake构build脚本 ,我们支持使用MSVC和GCC构build。 我们正在尝试Clang ,但我不知道如何testing编译器是否与我们的CMake脚本Clang。 我应该testing一下,看看编译器是否是Clang? 我们目前使用MSVC和CMAKE_COMPILER_IS_GNU<LANG>分别testingMSVC和GCC。

禁止警告“类别正在实施一个方法,也将由其主要类实施”

我想知道如何抑制这个警告: 类正在实现一个方法,也将由其主要类实现。 我有这个特定的代码类别: + (UIFont *)systemFontOfSize:(CGFloat)fontSize { return [self aCustomFontOfSize:fontSize]; }

-std = c ++ 11和-std = gnu ++ 11之间有什么区别?

-std=c++11和-std=gnu++11作为gcc和clang的编译参数有什么区别? 与c99和gnu99同样的问题? 我知道C ++和C标准,这是我感兴趣的参数的差异。 我已经在某个地方看到它与一些扩展有关,但是我不清楚哪些扩展,以及如何在一个新项目中select其中之一。

C ++标准委员会打算在C ++ 11中使用unordered_map破坏它所插入的内容吗?

已解决:这是libstdc ++ <v4.8.2中的一个错误,如果系统上存在GCC v4.8和clang> v3.2将会使用它。 有关报告,请参阅http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57619 。 感谢凯西和布赖恩给出了正确的答案。 尼尔 原始问题: 我刚刚失去了三天的时间跟踪一个非常奇怪的bug,unordered_map :: insert()破坏了你插入的variables。 这种非常不明显的行为仅出现在最近的编译器中:我发现叮当3.2-3.4和GCC 4.8是唯一certificate这个“特性”的编译器。 下面是我的主要代码库中的一些简化代码,它演示了这个问题: #include <memory> #include <unordered_map> #include <iostream> int main(void) { std::unordered_map<int, std::shared_ptr<int>> map; auto a(std::make_pair(5, std::make_shared<int>(5))); std::cout << "a.second is " << a.second.get() << std::endl; map.insert(a); // Note we are NOT doing insert(std::move(a)) std::cout << "a.second is now " << […]

为什么Clang会优化x * 1.0而不是x + 0.0?

为什么铿锵优化了这个代码中的循环 #include <time.h> #include <stdio.h> static size_t const N = 1 << 27; static double arr[N] = { /* initialize to zero */ }; int main() { clock_t const start = clock(); for (int i = 0; i < N; ++i) { arr[i] *= 1.0; } printf("%u ms\n", (unsigned)(clock() – start) * 1000 / CLOCKS_PER_SEC); […]

铿锵VS GCC为我的Linux开发项目

我在上大学,我们正在使用一个项目C.我们已经探索了GCC和Clang,并且Clang似乎比GCC更加用户友好。 因此,我想知道使用clang(而不是GCC)在Linux上用C和C ++进行开发的优缺点是什么? 在我的情况下,这将用于学生级别的程序,而不是生产。 如果我使用Clang,我应该使用GDB进行debugging并使用GNU Make,或者使用另一个debugging器并生成实用程序?

为什么是一个简单的循环优化时,极限是959而不是960?

考虑这个简单的循环: float f(float x[]) { float p = 1.0; for (int i = 0; i < 959; i++) p += 1; return p; } 如果使用-march=core-avx2 -Ofast编译gcc 7(快照)或clang(trunk), -march=core-avx2 -Ofast得到与之非常相似的内容。 .LCPI0_0: .long 1148190720 # float 960 f: # @f vmovss xmm0, dword ptr [rip + .LCPI0_0] # xmm0 = mem[0],zero,zero,zero ret 换句话说,它只是将答案设置为960而不循环。 但是,如果您将代码更改为: float f(float x[]) […]

是否有一个编译器错误暴露了我的实现is_completetypes特质?

我编写了这个C ++ 11 trait模板来检查一个types是否完整: template <typename…> using void_t = void; template <typename T, typename = void> struct is_complete : std::false_type {}; template <typename T> struct is_complete<T, void_t<decltype(sizeof(T))>> : std::true_type {}; 并像这样testing它: struct Complete {}; int main() { std::cout << is_complete<Complete>::value << is_complete<class Incomplete>::value << '\n'; } 我期望testing程序打印10 ,这是我得到的输出,当我编译与叮当3.4。 但是,使用gcc 4.9编译时,它会打印11字符 – 错误地将class Incomplete完整的class Incomplete识别为完整的。 我不知道我的代码是否正确,但在我看来,即使它是错误的,它应该在两个编译器上performance相同。 […]