接続数

COUNTER248839FROM 2012/5/16

MISRA-C diary(C言語日誌)

MISRA-C >> 記事詳細

2017/10/08

Q&A なぜOSおよび言語の関連する試験プログラムではmainでargcを返すか 

Tweet ThisSend to Facebook | by kaizen
C/C++のいくつかの試験プログラムで、
試験するOSと言語の間で、エラーを返す規定がない場合には、
main関数の引数の int argcを宣言し、
return argcを記述することがある。

main関数は何も返さない場合で、何も引数を使わない場合は、
void main()
と宣言することがある。

OS, 言語等の試験を担当することから、いくつかの視点での試験を含んでいる。

目的
1 OSからmain関数に引数を渡しているかどうかを確かめる。
2 引数の数をargcで受け取っているかどうかを確かめる。
3 argcが実行途中で壊されていないかどうかを確かめる。

そこで、OSと言語の関係の試験を行う場合に、
一番単純な機能確認として、
argcがmain関数内部で変更されていないことを確認する。

そのためには、main関数が、OSとの関係で、エラーを返す規定をしている
のでなければ、argcを返すことにする。エラーを返す規定をしている場合には、
OSが規定しているエラーを返すことにする。

OSがmain関数からエラーを返してもらった場合に、どうするかは、
OSの規定によるため、ここでは検討しない。

コマンドであれば、コマンド名を渡しているため、
argcは1になっている。もし、関数の中で、argcの値を変更していなければ、
return argc;
では1が返ってくるはずである。

そのまま返すと、正常終了の場合に0, 異常終了の場合に1を返す機能が
働いている場合との混同を避けるため、敢えて2以上を返すように試験する。

int main(int argc, char* argv[]){/// add argc and argv
//
return argc;
}

実行記述例は下記。

試験プログラム自動実行記述


return 1は異常実行と同じになるため、

2異常を返すようにする。

何も引数がない場合には、敢えて

コマンド 3

と実行し、return argc=2になるようにして、

ret=2

との$retと比較する。



17:28 | 投票する | 投票数(0) | コメント(0)