在Microsoft编译器上,可以使用#pragma禁用特定警告,而不禁用其他警告。 如果编译器警告“必须完成”的事情,这是非常有用的function。 GCC在这一点上是否有类似的function? 这似乎是一个足够明显的function,它是不可能的,它不会有这个function,但networking上的旧信息表明这个function不存在。 在GCC中使用什么? 具体来说,我喜欢使用多字符常量,比如'abc'。 这些评估有效地作为一个基地256号码 – 一个非常方便的function,但它会触发警告。 它非常方便在一个case语句中切换四个string。
尝试调用组合函数时,GCC在什么情况下不能抛出“未定义的引用”链接错误消息? 例如,这个C代码被GCC编译和链接的情况: void function() { made_up_function_name(); return; } 即使made_up_function_name不存在于代码中的任何地方 (不是头文件,源文件,声明或任何第三方库)。 GCC可以在一定条件下接受和编译这样的代码,而不必触摸实际的代码? 如果是这样,哪个? 谢谢。 编辑:没有以前的声明或提到made_up_function_name是否在其他地方。 这意味着整个文件系统的grep -R将只显示确切的单行代码。
考虑下面的程序: #include <array> int main() { std::array<int, 1> x = { 0 }; // warning! x = { { 0 } }; // no warning return 0; } 第一次初始化导致gcc 4.7.2上的警告… main.cpp:5:22: warning: unused variable 'x' [-Wunused-variable] …和铿锵3.1 main.cpp:5:28: warning: suggest braces around initialization of subobject [-Wmissing-braces] std::array<int, 1> x = { 0 }; 就标准而言,至less在这个例子中,双花括号或单花括号应该没有区别。 有两种方法来处理警告: […]
我有一个类暴露了一些方法,其实现是由一个内部对象提供的。 我正在使用forward调用来在运行时调度内部对象的方法调用,但XCode抱怨,因为它找不到声明的方法的实现。 我发现了其他一些类似的问题,但所有这些问题都是通过devise更改来解决的。 我并不是要在这里讨论这个devise,但是如果有人对此有所build议的话,我对Code Review有一个公开的问题 ,比较适合这种讨论。 我的问题是这里是否存在closuresXCode中的Incomplete Implementation警告的方法。
我有这样一个超类: class Parent { public: virtual void Function(int param); }; void Parent::Function(int param) { std::cout << param << std::endl; } ..和这样的子类: class Child : public Parent { public: void Function(int param); }; void Child::Function(int param) { ;//Do nothing } 当我编译子类.cpp文件,我得到这个错误 warning C4100: 'param' : unreferenced formal parameter 作为一种习惯,我们曾经把警告视为错误。 如何避免上述警告? 谢谢。
我有一个简单的C ++ Boost像这样: #include <boost/algorithm/string.hpp> int main() { std::string latlonStr = "hello,ergr()()rg(rg)"; boost::find_format_all(latlonStr,boost::token_finder(boost::is_any_of("(,)")),boost::const_formatter(" ")); 这工作正常; 它代替()的每一个出现,用“” 不过,编译时出现这个警告: 我正在使用MSVC 2008,升压1.37.0。 1>Compiling… 1>mainTest.cpp 1>c:\work\minescout-feat-000\extlib\boost\algorithm\string\detail\classification.hpp(102) : warning C4996: 'std::copy': Function call with parameters that may be unsafe – this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. […]
我经常在我的#defines中使用do-while(0)构造,出于在这个答案中描述的原因。 另外我试图尽可能使用编译器提供的警告级别来捕捉更多的潜在问题,并使我的代码更加健壮和跨平台。 所以我通常使用-Wall与gcc和/Wall与MSVC。 不幸的是MSVC抱怨do-while(0)构造: foo.c(36) : warning C4127: conditional expression is constant 我应该怎么做这个警告? 只需全局禁用所有文件? 对我来说这似乎不是个好主意。
我今天正在编写一些代码,并且出现了一个奇怪的编译错误,这个错误似乎是由于以不同的顺序初始化成员variables而导致的。 例: class Test { int a; int b; public: Test() : b(1), a(2) { } }; int main() { Test test; return 0; } 那么如果我用-Werror -Wall编译它: $ g++ -Werror -Wall test.cpp test.cpp: In constructor 'Test::Test()': test.cpp:3:9: error: 'Test::b' will be initialized after [-Werror=reorder] test.cpp:2:9: error: 'int Test::a' [-Werror=reorder] test.cpp:6:5: error: when initialized here [-Werror=reorder] […]
所以,(似乎)突然间,我的项目开始得到编译器警告1685年: 预定义types“System.Runtime.CompilerServices.ExtensionAttribute”在全局别名中的多个程序集中定义; 使用“c:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll”中的定义 困惑,我研究了MSDN文章找出其原因。 以下是我find的信息: Visual C#参考:错误和警告编译器警告(1级)CS1685 错误消息预定义types“System.type name”在全局别名中的多个程序集中定义; 使用“文件名”中的定义 在两个程序集中find预定义的系统types(如System.int32)时,会发生此错误。 这种情况发生的一种方式是,如果你是从两个不同的地方引用mscorlib,比如试图运行.Net Framework 1.0和1.1版本。 编译器将只使用其中一个程序集的定义。 编译器仅search全局别名,不search定义的库/引用。 如果指定了/ nostdlib,则编译器将searchObject,并且将来会在findObject的文件中启动对预定义types的所有search。 现在我真的在挠挠我的脑袋。 我没有运行两个不同版本的.NET Framework(除非你计算2.0和3.5)。 我没有提到可能会让我怀疑的任何奇怪的程序集。 我不记得对我的应用程序做出任何改变,这将促使这种变化。 我已经validation所有组件的目标是.NET Framework版本v2.0.50727。 我愿意接受build议,或者有关如何解决这个问题的想法。 我把警告视为错误,这让我发疯。 真正让我感到困惑的是,我不知道为什么会这样。 发生的事情应该有一个明显的原因,我应该知道他们为什么发生。 如果我不能解释它,我不能准确地补救它。 猜测是永远不会令人满意的。 该应用程序很简单,由一个类库和一个Windows窗体应用程序组成。 AC#类库DLL提供封装数据库访问的基本function。 此DLL引用以下组件: 系统 System.Core程序 System.Core.Data System.Data System.Data.DataSetExtensions System.Data.OracleClient的 System.Drawing中 System.Windows.Forms的 […]
当我编译时,javac输出: Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details.` 我想压制这个警告。 尝试-Xlint:没有一个似乎没有帮助。