- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们有一个函数宏 #define FOO(arg) foo(arg)
和 int foo(const char* bar);
。当定义 NDEBUG 时,FOO 被定义为 #define FOO(arg) 0
,但这会导致许多编译器警告,因为在许多情况下 FOO 的返回值未被使用。该解决方案应与 ANSI C 编译器一起使用并且不会引起警告。我试过:
(void)0
: 不能赋值给变量
static int foo(const char* bar) { 返回 0;
: 在某些模块中导致未使用的静态函数警告
static inline int foo(const char* bar) { return 0;
:仅适用于 C99 编译器
感谢您的帮助!
编辑1:它有点像跟踪宏,并在整个项目中使用。大多数情况下它只是用作像 FOO("function x called");
这样的语句,但在少数情况下我看到了 if (FOO("condition a")) {/* 更多调试输出 */
。在定义了 NDEBUG 并启用了优化后,FOO 不应留下任何东西。这不是我想出来的,但我必须清理这个烂摊子 :)。
edit2:我应该补充说,对于 gcc 发布版本,使用了这些标志:-O3 -Wall -ansi
edit3:现在我要使用 __inline int dummy() { return 0; }
。 __inline 在 ansi 模式下与 VisualC 和 GCC 一起工作。
最佳答案
我猜想它有点依赖于编译器,但这应该可行:
#ifndef NDEBUG
#define FOO(arg) foo(arg)
#else
#define FOO(arg) ((int)0)
#endif
它防止“表达式无效”警告,它什么也不做,使用时它的值仍然是 0。
已编辑
它似乎不是那么便携所以(现在)你有这些条件:
(0)
或 ((int)0)
至少适用于 VC 2010。__noop
应该可以在 2003 之后的任何版本的 VC 上工作。VC6 不是问题,因为它根本不会发出 C4555 警告。对于您可能使用的其他编译器:
((void)0, 0)
它可能适用于很多编译器(也许它是更便携的?)。内联 int foo(const char* bar) { return 0; }
适用于任何其他 C99 编译器(如您所写,您可能需要在 gcc 上将其声明为 static
)。对于任何其他史前 C 编译器,使用@Jobs 指出的解决方案:abs(0)
关于c - 计算结果为零并可用作语句的函数宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10190701/
我有以下查询: SELECT I.InsuranceID FROM Insurance I INNER JOIN JobDetail JD ON I.AccountID = JD.AccountID
我想在 SwiftUI 布局中将此函数用作具有不可变值的模板,但得到错误 Result of call to 'padding' 未使用: func keys (padding: CGFloat, t
直到最近我才使用 View 的标签元素,此后发现了一些很酷的用途。我遇到了一个不寻常的问题,希望有人能回答。这可能比 Android 更通用,但我不确定。它与 Java 如何处理 Integer 类有
这个问题在这里已经有了答案: What is the purpose of the var keyword and when should I use it (or omit it)? (19 个回
我有以下脚本(见下文)。我有两个问题: 1.在 Knockoutjs 的上下文中,下面这行是什么意思? ko.observable(null); 2.如何调用这里尚未定义的函数: that.activ
Java 社区中是否存在一种使用 with-repect-to 在方法中使用多个返回的思想流派,如下所示: public SomeClass someMethod(int someValue) {
我一直在尝试为我的网站创建一个小型社交媒体栏。出于某种原因,我无法计算出我想用来创建 Sprite 的图像无法加载。我还应该提一下,我在背景图像不显示方面遇到过类似的问题。 HTML调用是这样的:
我正在尝试使用 std::pair 枚举值作为 unordered_map 容器的键,但我在定义自定义哈希函数时遇到困难。 我尝试了以下方法: // Enum and pair declaration
我正在学习 JS/JQuery 以及匿名函数和闭包。我见过这样的例子: $('.button').click(function(){ /* Animations */ /* Other
我正在尝试使用菜单列表来浏览我的应用程序。尽管应用程序和路由运行良好,但我使用这段代码在控制台中收到了一些警告: {props.itemList.map((item, index) =>(
我只是想创建一个简单的测试,我在其中使用 DelegateHandlers 来实例化一个 HttpClient 而无需引入 Asp.net Core 包。我有 2 个删除处理程序 Throttling
我是answering another question在这里,用户有一个 ListView与 ItemsSource包含 UserControls .我说我不会推荐它,并被问为什么。 这真的让我很惊
我安装了3.5.2和 3.5.3使用 pyenv 的版本。 # pyenv versions * system (set by /usr/local/pyenv/version) 3.5.2
我正在使用 android studio 制作统一插件,但这里有问题。一些 SDK 提供仅使用 AppcompatActivity 来制作 fragment 但我的MainActivity , 正是
我在 Laravel 中使用 whereHas 来构建查询: })->whereHas('results', function ($query) use ($issued, $mode, $reque
我有一个 5Gb .dat 文件(> 1000 万行)。每行的格式如 aaaa bb cccc0123 xxx kkkkkkkkkkkkkk或 aaaaabbbcccc01234xxxkkkkkkkk
我有一个消费者类,它采用 NSInputStream 作为参数,它将被异步处理,并且我想推送来自生产者类的数据,该生产者类要求它提供 NSOutputStream 作为其输出源。现在我如何设置一个缓冲
我正在尝试使用 ENVs在 Symfony2 中设置我的参数。标量值很简单,但我有一些参数是数组,我需要使用 ENV 以某种方式设置它们。 有问题的参数: parameters: redis.se
在我的类作业中,我已经成功地做到了这一点,但只是在非常简单的程序中。今天,我有一个更复杂的程序,在我将 DEBUG 定义为一个符号后,Eclipse 做了可怕的笨拙的事情,并且在我删除定义后这些可怕的
我目前有 2 个复选框类别、一个下拉列表和一个表单中的提交按钮。该按钮应保持“禁用”状态,直到选中 A 类的一个复选框和选中 B 类选项之一并选择选择列表中的一个选项。它适用于复选框(当我在没有列表的
我是一名优秀的程序员,十分优秀!