问题标签 [compiler-warnings]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
shell - 模拟警告作为错误的Shell脚本?
一些编译器允许您将警告设置为错误,这样您就永远不会留下任何编译器警告,因为如果您这样做,代码将无法构建。这是一件好事。
不幸的是,一些编译器没有警告作为错误的标志。
我需要编写一个提供该功能的 shell 脚本或包装器。
大概它解析编译控制台输出并在有任何编译器警告(或错误)时返回失败,否则返回成功。“失败”也意味着(我认为)不应该产生目标代码。
什么是您可以编写的最短、最简单的 UNIX/Linux shell 脚本,它满足上述显式要求,以及以下隐含要求,否则其行为就像编译器一样: - 接受所有标志、选项、参数 - 支持 stdout 和 stderr 的重定向- 按照指示生成目标代码和链接
关键词:优雅,满足所有要求。
额外的功劳:易于合并到 GNU make 文件中。
谢谢你的帮助。
===线索===这个解决不同问题的方法,使用shell函数(?),将文本附加到 bash 中的stderr重定向,可能会出现。想知道如何邀请litb的朋友“非常了解 bash”来解决我的问题?
===回答状态===
感谢查理马丁的简短回答,但不幸的是,这就是我开始的。不久前,我使用它,将其发布以供办公室使用,并在几个小时内向我指出了它最严重的缺点:它将通过编译而没有警告,但只有错误。这真的很糟糕,因为那时我们正在交付编译器肯定不会工作的目标代码。简单的解决方案也不满足列出的其他要求。
感谢Adam Rosenfield的速记,以及Chris Dodd将 pipefail 引入解决方案。Chris 的回答看起来最接近,因为我认为 pipefail 应该确保如果编译实际上因错误而失败,我们将得到应有的失败。克里斯,管道故障是否适用于所有外壳?对上面列出的其他隐含要求有什么想法吗?
c - SQLite C 警告
我正在使用 sqlite3.c 库。
它编译时带有 140 个转换警告。
我的设置有什么问题?
谢谢。
c++ - 使用 qmake/gcc 有条件地禁用警告?
我参与了一个用 Qt 编写并在 Linux 上使用 qmake 和 gcc 构建的软件项目。我们必须链接到一个质量相当低并且会发出大量警告的第三方库。我想在我们的源代码上使用 -W -Wall,但是将 -w 传递给讨厌的第三方库以保持控制台没有噪音和混乱,这样我们就可以专注于我们的代码质量。
在 qmake 中,有没有办法有条件地将 CFLAGS/CXXFLAGS 添加到某些文件和库中?
java - 消除 Jasper 生成的 Java 源文件中 JSP 的 Javac 警告?
当使用 Jasper 编译器(使用 Tomcat)和 Java 编译器预编译 JSP 时,我看到javac
这样的警告(我启用了javac
's-Xlint
标志):
现在,它“只是一个警告”,但我喜欢干净的构建,所以我自然想摆脱警告。当然,我可以-Xlint
关闭 JSP 编译,但这-Xlint
是好东西,所以它会保留。
在此示例警告中,问题在于未使用通用语法。取而代之的是List<String>
,我们只有List
。我意识到编写 Jasper 的好人必须迎合那些仍然被困在 Java5 之前的世界中的不幸灵魂。这很好,但我为什么要遭受这些警告呢?
是否有一些众所周知的方法可以消除由 Jasper JSP 编译器创建的 Java 源代码引起的 javac 警告?我对特定于 IDE 的解决方案不感兴趣(尽管对于某些使用特定 IDE 的人来说,这将是部分解决方案)。我正在寻找一个普遍适用的解决方案。
对 Jasper 源代码的扫描没有发现任何会导致泛型语法发射的“Java 5+”开关。事实上,恰恰相反,我发现了这一点:
这清楚地表明硬编码的代码没有任何注入优雅的通用语法的希望。
c - “警告:返回使指针从没有强制转换的整数”在C中是什么意思?
我正在用 C 编写一个简单的函数,其目的是获取一个 6 位数字,计算出前 3 位,并在此基础上返回一个“r”、“w”或“o”。
但是,当我编译时,我收到此警告:'return 从指针中生成整数而不进行强制转换'。然后,当我运行程序时,我发现该函数正在返回一个奇怪的字符,它绝对不是我所追求的三个字符之一。
这里发生了什么?提前致谢。
这是我的功能:
c - 在 C 中使用函数指针时的警告
这实际上是一个非关键问题,但我在大多数情况下使用函数指针时都会收到此警告,但我自己仍然无法弄清楚为什么。考虑以下原型:
到目前为止,我可以编译我的千行代码并获得零警告。所以我假设我正确地编写了声明。但后来我在代码中调用它,将 free 作为我的析构函数传递,因为存储在树节点中的数据是简单的结构:
这让我得到了一个"warning: passing argument 2 of 'tree_destroyLineage' from incompatible pointer type"
信息。我的第一个假设是编译器在编译时无法弄清楚这是同一件事Pointer
,void *
所以我尝试使用完全相同类型的函数指针创建另一个函数,以“重新传递”调用free()
并更改函数指针声明接受 avoid *
而不是指针。这两种方法在同一个地方给了我同样的警告。
我做错了什么,我该如何解决?
delphi - 有没有办法从包含文件中获取当前单位的名称?
我正在将一些代码从一个框架库移植到另一个框架库,这需要我注释掉大部分代码只是为了让它编译,然后小心地恢复它们。与此同时,由于所有注释掉的代码,我收到了大量警告。所以我决定写一个快速的包含文件来抑制它们:
我将它包含在所有给我大量警告的单元中,但是现在当我编译时,编译器返回的消息如下:
[DCC 警告] unfinished.inc(1):未移植单元的 W1054 警告被抑制,带有注释掉的代码
我希望它告诉我警告来自执行包含的单元,而不是包含文件本身。有没有办法做到这一点,或者将单元的名称放入消息中,而无需实际将 $MESSAGE 指令从包含文件中移出并移到我执行此操作的每个单元中?
eclipse - Eclipse - @SuppressWarnings("javadoc") 不起作用
我将 Eclipse 配置为在缺少公共元素的 javadoc 注释和标签时显示警告。这对我来说非常有用,可以很好地记录我的代码。
但有时我有一个类,我有几个常量描述例如 DFA 的状态或其他东西.. 没有必要记录这些常量,因为它们是不言自明的..
所以我在类中添加了注解@SuppressWarnings("javadoc"),这就是我的观点——Eclipse 不考虑注解并且仍然在缺少 javadocs 时显示警告。
@SuppressWarnings("all")完成了这项工作,但这有副作用,这是不希望的;-)
您是否遇到同样的问题?这是一个错误还是我只有配置错误的东西?有什么解决方法吗?或者这在新版本中是否得到纠正?
PS:我正在使用版本:3.3.2 Build id:M20080221-1800
c++ - 在 C++ 中,什么时候可以在同一范围内看到两个同名变量?
这段代码说明了一些我认为应该被视为不好的做法,并引发编译器关于重新定义或屏蔽变量的警告:
它的输出(用 g++ 编译):
我查看了一些参考资料(Stroustrup 和 The Complete C++ Reference),但找不到任何关于何时以及为何允许这样做的信息。不过,我知道它不在一个本地范围内。
何时以及为何允许这样做?这个结构有什么好的用途吗?我怎样才能让 g++ 警告我呢?其他编译器是否对此大喊大叫?
c++ - 仅针对部分翻译单元有选择地禁用 GCC 警告
与此MSVC预处理器代码最接近的 GCC 是什么?
我们在通常包含的标头中有代码,我们不想为其生成特定的警告。但是,我们希望包含这些标头的文件继续生成该警告(如果项目启用了该警告)。