我从Codeforces博客上读到,如果我们在C++程序中包含#include <bits/stdc++.h> ,那么就不需要包含任何其他头文件。 #include <bits/stdc++.h>是如何工作的,可以使用它而不是包含单独的头文件吗?
我最近有一个课程项目,我不得不使用G ++编写程序。 我使用了一个makefile,出于某种原因,偶尔会留下一个.h.gch文件。 有时候,这并不影响编译,但是每隔一段时间就会导致编译器针对已经修复或没有意义的问题发布错误。 我有两个问题: 1)什么是.h.gch文件,用于什么? 和 2)为什么在没有清理的时候会造成这样的问题? 谢谢您的帮助。
您好我正在尝试使用G ++的std::thread 。 这是我的testing代码 #include <thread> #include <iostream> int main(int, char **){ std::thread tt([](){ std::cout<<"Thread!"<<std::endl; }); tt.join(); } 它编译,但是当我尝试运行它的结果是: terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted Aborted 我的编译器版本: $ g++ –version g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for […]
我有最简单的代码: #include <iostream> #include <thread> void worker() { std::cout << "another thread"; } int main() { std::thread t(worker); std::cout << "main thread" << std::endl; t.join(); return 0; } 尽pipe我仍然不能用g++编译运行。 更多细节: $ g++ –version g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There […]
通常在gcc下的C中,我将从以下一组警告标志开始(从多个来源痛苦地组装): -Wall -Wextra -Wformat-nonliteral -Wcast-align -Wpointer-arith -Wbad-function-cast \ -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Winline -Wundef \ -Wnested-externs -Wcast-qual -Wshadow -Wwrite-strings -Wno-unused-parameter \ -Wfloat-equal -pedantic -ansi 我将构build(至less我的debugging版本)这个警告,并修复我可能可以(通常是一切)的一切,然后只删除标志,如果他们不相关或不可修复(几乎从来没有这样的情况下)。 有时候,如果我不得不在编译的时候离开,那么我还会添加 – -Werror 。 我只是拿起C ++(是的,我比时代落后了15年),而且我想从右脚开始。 我的问题是:是否有人有一个预编译的类似的完整的警告标志为C ++下g++ ? (我知道他们中的很多人会是一样的)
考虑一下这个奇怪的程序: int main() { int(*){} Is it C++14 or any other language? } ( 在这里和这里看到一个现场演示。) 即使注释//缺失,即使在g ++ 6.0中使用-pedantic-errors选项,代码也能正常编译,不会出现任何错误和警告。 这对我来说似乎是一个编译器错误。 它真的是编译器中的错误吗?
我正在开发一些工程模拟。 这涉及到实施一些长方程,如这个方程来计算橡胶材料的应力: T = ( mu * ( pow(l1 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a * ( pow(l1 * l2 * l3, -0.1e1 / 0.3e1) – l1 * l2 * l3 * pow(l1 * l2 * l3, -0.4e1 / 0.3e1) / 0.3e1 ) * pow(l1 * l2 * l3, […]
我正在构build一个简单的C ++程序,我想临时replace一个系统提供的共享库和更新的版本,用于开发和testing。 我尝试设置LD_LIBRARY_PATHvariables,但链接器(ld)失败: / usr / bin / ld:找不到-lyaml-cpp 我期望这样做,因为根据ld手册页: 链接器使用以下searchpath来查找所需的共享库:…对于本机链接器,环境variables“LD_LIBRARY_PATH”的内容… 然后我尝试设置LIBRARY_PATH,并工作。 根据GCC手册: LIBRARY_PATH的值是一个以冒号分隔的目录列表,非常像PATH。 当configuration为本机编译器时,GCC在search特殊链接器文件时尝试search指定的目录,如果找不到,则使用GCC_EXEC_PREFIX。 在使用GCC进行链接时,也会在为-l选项search普通库时使用这些目录(但使用-L指定的目录优先)。 正如(GCC)手册所build议的,LIBRARY_PATH的工作原理是因为我与GCC链接。 但.. 由于我与gcc链接,为什么ld被调用,如错误消息所示? 有两个variables用于同一目的有什么意义? 还有其他的区别吗?
g ++ -Wall选项包括-Wreorder。 下面介绍这个选项的作用。 我不明白为什么有人会关心(特别是在-Wall中默认打开这个function)。 -Wreorder(仅限C ++) 警告代码中给出的成员初始值设定项的顺序不是 匹配他们必须执行的顺序。 例如: struct A { int i; int j; A():j(0),i(1){} }; 编译器将重新排列i和j的成员初始值设定项 匹配成员的声明顺序,发出警告 影响。 此警告由-Wall启用。
#ifndef __TEST__ #define __TEST__ namespace std { template<typename T> class list; } template<typename T> void Pop(std::list<T> * l) { while(!l->empty()) l->pop(); } #endif 并在我的主要使用该function。 我得到错误。 当然,我知道有更多的模板参数为std::list (分配器,我认为)。 但是,这是重要的。 我是否必须知道模板类的完整模板声明才能够转发声明? 编辑:我以前没有使用指针 – 这是一个参考。 我会用指针试一试。