- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在一篇文章中读到,放置以下预处理器行会忽略所有后续的断言预处理器指令。但这似乎不起作用,实际上 assert 语句由预处理器处理,并在不满足 assert 中的条件时中止程序(我知道当不满足 assert 条件时中止是正确的行为)。我的问题是为什么放置#define NDEBUG 不会忽略断言语句。代码是
#include<stdio.h>
#include<assert.h>
#define NDEBUG
int main(){
int x = 0;
assert (x!=0);
}
最佳答案
改变出现的顺序,然后它应该工作:
#define NDEBUG
#include <assert.h>
NDEBUG
用于定义 assert()
宏 <assert.h>
有条件地。
关于c++ - #define NDEBUG 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32476753/
所以基本上我有一个用 C 编写的程序,它由几个 .c 文件组成。它们的 makefile 如下所示: CC=gcc CFLAGS=-I. DEBUGFLAGS=-D NDEBUG -O3 defaul
在阅读了一些关于滥用异常的线程后(基本上是说如果函数前提条件不正确你不想展开堆栈 - 可能表示你所有的内存都已损坏或同样危险的东西)我正在考虑使用断言() 更频繁。以前我只使用 assert() 作为
C++ Primer 说 The behavior of assert depends on the status of a preprocessor variable named NDEBUG. W
考虑在 my_lib.a 和与 my_lib.a 链接的 my_prog 中编译的 C++ 头文件。该库是在没有 NDEBUG 的情况下编译的,而 my_prog - 有 NDEBUG。会导致 ODR
对于上面的例子,我试图弄清楚 increment 方法是否真的会被内联。如果在我定义 NDEBUG 标志时断言将被编译器删除,增量方法将变成单行,因此它被实际内联的可能性会增加。所以问题归结为删除断言
我想定义一个与标准 assert(3) 相同的 assert 宏除了在定义 NDEBUG 时它不会被预处理器删除外,调用其他情况。 这样的调用,让我们在这里称它为 assert2,例如,如果您希望在软
我的大部分类都有调试变量,这使得它们通常看起来像这样: class A { // stuff #ifndef NDEBUG int check = 0; #endif }; 方法可能如
我有相当大的一段代码,在开发版本中运行良好,代码中有许多 assert()。我使用传递给 g++ 的 -DNDEBUG 指令禁用了断言,现在我的代码因 seg 而中断。过错。关于 assert() 有
我在一篇文章中读到,放置以下预处理器行会忽略所有后续的断言预处理器指令。但这似乎不起作用,实际上 assert 语句由预处理器处理,并在不满足 assert 中的条件时中止程序(我知道当不满足 ass
应该使用哪个预处理器定义来指定代码的调试部分? 使用 #ifdef _DEBUG 或 #ifndef NDEBUG 或者有更好的方法,例如#define MY_DEBUG? 我认为 _DEBUG 是
我正在使用以下宏来打印我在网络上找到的调试信息。效果很好。但是,我想在调试调用函数 A 的函数 B 时关闭函数 A 的调试打印。我尝试了 #define NDEBUG function A #unde
Why does assert not work here? ^ 显然,Rcpp 有自己定义 NDEBUG 的习惯,即使不是我自己定义的。 m@m-X555LJ:~/wtfdir$ cat WTF.r
我正在审核一些使用 Qt 框架编写的源代码。典型的发布构建命令行输出包括 QT_NO_DEBUG 预处理器宏,但不包括 Posix 的 NDEBUG 预处理器宏。 Qt documentation o
当宏 NDEBUG 定义时,标准 C assert 宏被禁用,意思是“不调试”。这会导致非常糟糕的双重否定情况,例如 #ifndef NDEBUG//DebuggingCode #endif。似乎 R
我对各种平台/编译器(“实现”)/框架分配给 C 和 C++ 预处理器宏 NDEBUG 的用途感兴趣。 C和C++标准只提到过一次这个定义,即控制assert()宏的行为。 我会要求只包含具体的答案,
我读到有人担心过度使用 noexcept 可能会阻碍可测试的库。 考虑: T& vector::front() noexcept { assert(!empty()); //
当与 boost::serialization 链接时,我在项目的“发布”版本中遇到问题。我的“调试”和“发布”构建之间唯一真正的区别是我定义了 DEBUG 并在调试中使用了 -O0 并且我定义了 N
可以在我们的开发和生产应用程序的控制台中看到以下代码: #ifndef NDEBUG NSLog(@"log message"); #endif 谁能告诉我发布应用程序怎么可能?我们使用 Xc
如果我在 main.cpp 的顶部定义 NDEBUG,我会得到所有这些错误: 1> All outputs are up-to-date. 1>libcmt.lib(invarg.obj) : er
环境: $ g++ --version g++ (Ubuntu 7.4.0-1ubuntu1~18.04) 7.4.0 众所周知,在包含 assert.h 之前定义的 NDEBUG 可以禁用用于调试的
我是一名优秀的程序员,十分优秀!