我在代码中写了几个"assert(...)",以确保满足前置条件和后置条件.我们可以告诉Delphi编译器,是否在调试版本中使用断言进行编译,而在发布版本中没有断言.
我想知道,如果有可能,像其他Pascal关键字一样突出"断言"?
如何测试void方法在.NET中引发特定异常.
我有一个方法,根据输入抛出3种不同类型的异常.我如何测试我每次都获得当前的一个,并且还测试它在通过正确输入时不会抛出任何内容.
谢谢!
我的代码中有一个奇怪的问题.我有许多分散在代码周围的断言,一切都运行良好.每当断言失败时,我都会收到一条消息,告诉我故障发生的位置.今天我在一个加载文件的函数中写了另一个断言.只是想确保fie存在.一个非常简单的断言.这是相关代码:
//Check that the file exists and can be opened
FILE* f = fopen(filename, "rb");
#ifdef ASSERTIONS_ON
assert(f!=NULL);//@problem For some reason while all other asserts work, this one just crashes the program without reporting line
#else
if(f == NULL)
return MODEL_LOAD_FILENOTFOUND;
#endif
fclose(f);
Run Code Online (Sandbox Code Playgroud)
我知道这并没有多大帮助,只是想展示我的问题所在.我的操作系统是Windows 7.编译器是GCC.我从Windows获得的错误消息是通常的运行时错误但没有行报告:
"该应用程序已要求Runtime以不寻常的方式终止它.请联系应用程序的支持团队以获取更多信息"
可能是什么问题呢?什么可能导致断言失败只是请求终止而不报告它发生的行,而在相同的代码中的每个其他情况下它按预期工作?在此先感谢您的帮助!
第一次海报,请原谅我,如果我的格式是关闭或任何东西:)
我正在使用XNA在C#中使用我的游戏引擎但是当我检查现有节点的新节点的名称时,即使列表中没有匹配的名称,Assert也会无法预测地触发.这是我所指的代码:
public void CheckNameIsUnique(string cName)
{
for (int i = 0; i < m_aNodeList.Count; ++i)
{
Debug.Assert(m_aNodeList[i].GetName().Equals(cName),
"USE OF NON-UNIQUE NAME: " + cName);
}
}
Run Code Online (Sandbox Code Playgroud)
断言将触发 - 例如 - 在检查时,"box1"并且列表中唯一的节点具有名称"RootNode".
我使用以下方法获得了相同的不可预测的结果:
string == string和string.CompareTo(string) > 0
有任何想法吗?= \
我使用的是sphinx 0.9.8版本.我的php版本是5.3.1.在集成sphinx api后,我收到一些关于assert()的警告.我该如何解决这个问题?任何人都可以帮助我?
谢谢
我想知道什么是更好/更好:
>>> def command():
... return False
...
>>> assert command() == False
>>> assert command() is False
>>> assert not command()
Run Code Online (Sandbox Code Playgroud)
干杯,马库斯
嗨,当我尝试在程序中使用assert函数时,它会转储代码。谁能告诉我我的代码有什么问题。
#include <stdio.h>
#include <assert.h>
void print_number(int myConfig) {
assert (myConfig > 20);
printf("\nConfig value is : %d",myConfig);
}
int main ()
{
int configArr[]={21,27,15};
for(int i=0;i<=2;i++)
print_number (configArr[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
配置值是:21
配置值是:27断言失败:myConfig> 20,文件assert.cpp,第4行
中止(核心已转储)
在我正在研究的一个项目中,用C89编写,assert()当一些预先定义的假设不成立时,我使用语句作为代码在我的开发机器上失败的一种方式.但是,代码还包含一些错误处理代码,以便程序不会因生产环境中的断言失败而崩溃.
该项目使用GNU Autotools编译和分发源代码分发.
现在,我的问题是如何确保运行make dist将从我的代码中删除所有断言,然后生成分发tarball?
我正在尝试实现CS107 - Programming Paradigms(斯坦福大学的在线课程)中讲座5和6中所示的通用堆栈.下面的代码,代表演讲中提供的一个示例,编译,但似乎并不表现一致,因为我经常得到一个断言失败.
我注意到了Geany和gcc($ gcc --version
gcc (Debian 6.3.0-18) 6.3.0 20170516)中的行为,但没有注意到` https://www.tutorialspoint.com/compile_c_online.php '所以我想知道它是由gcc中的某些东西引起的还是我看起来不是什么bug现在看.
码:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include <assert.h>
typedef struct {
void *elems;
int elemSize;
int logLen;
int allocLen;
} stack;
void StackNew(stack *s, int elemSize);
void StackDispose(stack *s);
void StackPush(stack *s, void *elemAddr);
void StackPop(stack *s, void * elemAddr);
void StackNew(stack *s, int elemSize)
{
assert(s->elemSize > 0);
s->elemSize = elemSize;
s->logLen = 0;
s->allocLen = 4;
s->elems = malloc(4 * elemSize);
assert(s->elems != NULL); …Run Code Online (Sandbox Code Playgroud) 目前,我写
assert(false);
Run Code Online (Sandbox Code Playgroud)
在我的代码永远无法到达的地方。一个非常C风格的示例是:
int findzero( int length, int * array ) {
for( int i = 0; i < length; i++ )
if( array[i] == 0 )
return i;
assert(false);
}
Run Code Online (Sandbox Code Playgroud)
一旦达到assert(false),我的编译器就会意识到程序已完成。但是,每当出于性能原因使用-DNDEBUG进行编译时,最后一个断言都会消失,并且编译器会警告执行将在没有return语句的情况下完成该函数。
如果已经达到了代码的一个所谓的无法到达的部分,那么完成程序的更好的替代方法是什么?解决方案应该
无论是现代C ++还是90s C,我都对解决方案特别感兴趣。