我正在为课程分配工作,我认为我让程序正常工作,但现在我想对它进行一些修改,以便更好地理解断言.代码如下 -
#include <iostream>
#include <stdlib.h>
#include <assert.h>
using namespace std;
// Sample program that shows how command line arg works, in Unix g++
// Note argc and argv
// Also shows use of system call, that can launch any program
// system launches 'ls' to display files in the dir
void runAssert(int);
int main(int argc, char *argv[])
{
cout << "Number of inputs: " << argc << endl;
cout << "1st argument: " << argv[0] << endl;
system ("ls");
cout << "hello world" << endl;
runAssert(argc);
return 0;
}
void runAssert(int argc)
{
assert(argc > 4);
}
Run Code Online (Sandbox Code Playgroud)
所以该程序应该跟踪通过命令行传递到main的参数.教授指出应该采取4个论点.据我所知,此代码有效,但我不知道传递它的4个命令是什么?我做的g++ assignment.cpp -o assignment
然后./assignment - 但这最后一个命令只计为一个参数,因此断言触发.如果我将功能更改为>= 1然后它可以工作.
我的另一个问题是,当它不符合要求时,如何让它显示错误信息?
我已经尝试assert("Not the right amount of arguments", argc > 4)但是后来我收到一条错误消息,说明有太多的参数传递给main.
感谢您的帮助,对不起,如果我的格式错误.第一次发帖.
这是一个完全错误的用法assert.使用assert国家的事情,你,作为一个程序员,认为在逻辑上是必要的.这在逻辑上是可能有人打电话少于4个参数的程序,所以assert是不正确的.
assert的一个常见用法是在函数的开头.(这不是验证参数.)int foo(void *k){ assert(k != NULL); ...} 再次考虑,这不是验证参数k.断言是一段文档,告诉人们在调用站点编写foo不使用NULL参数调用的代码.声称在正确编写的代码中,逻辑必然性k是非空的.如果要验证参数并生成漂亮的错误消息,请使用if语句.
一件事assert是你应该假设它没有在正常操作中执行.通常,程序将使用编译-DNDEBUG,将所有断言转换为空格.
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |