使用'assert'来验证参数的数量

huS*_*uSh 0 c++ assert

我正在为课程分配工作,我认为我让程序正常工作,但现在我想对它进行一些修改,以便更好地理解断言.代码如下 -

#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.

感谢您的帮助,对不起,如果我的格式错误.第一次发帖.

Wil*_*ell 5

这是一个完全错误的用法assert.使用assert国家的事情,你,作为一个程序员,认为在逻辑上是必要的.这在逻辑上是可能有人打电话少于4个参数的程序,所以assert是不正确的.

assert的一个常见用法是在函数的开头.(这不是验证参数.)int foo(void *k){ assert(k != NULL); ...} 再次考虑,这不是验证参数k.断言是一段文档,告诉人们在调用站点编写foo不使用NULL参数调用的代码.声称在正确编写的代码中,逻辑必然性k是非空的.如果要验证参数并生成漂亮的错误消息,请使用if语句.

一件事assert是你应该假设它没有在正常操作中执行.通常,程序将使用编译-DNDEBUG,将所有断言转换为空格.