是否为_argc和_argv包含dos.h?

时间:2014-03-20 19:53:27

标签: c

在使用_argc和_argv全局变量时,是否有必要在c程序中包含dos.h头文件?

如下例所示: -

/* sample.c */
#include<stdio.h>
#include<dos.h>
int main()
    {
        int i;
        for(i=1; i<_argc; i++)
            printf("%s ", _argv[i]);
        return 0;
    }

如果是,包含dos.h的意义是什么?

3 个答案:

答案 0 :(得分:1)

如果你打算使用程序参数,标准方法看起来像这样:

int main(int argc, **argv)
{
/* use argc and argv here */
}

这些不是全局的,但您可以将它们复制到全局变量。 如果那些_argc和_argv意味着别的东西,那么dos就很混乱了。

答案 1 :(得分:1)

Turbo C有这个变量,您可以在以下网址阅读更多内容:

http://www.indiabix.com/c-programming/command-line-arguments/discussion-477

http://webcache.googleusercontent.com/search?q=cache:NEjvrTslYvEJ:www.codeforge.com/read/93772/DOS.H__html

所以是的,如果您需要使用这些变量包括dos.h ...否则只需使用标准主数据,就像在其他答案中一样。

答案 2 :(得分:0)

您问题的直接答案是必须将变量声明为某处,以便编译器找到它们。在dos.hdos.h中包含的某个文件中,有_argc_argv的定义。

如果您没有包含dos.h,您仍然需要声明extern int _argc;extern char *_argv[];才能使用它们。否则,您将收到编译器错误,因为编译器不知道这些变量是什么。

这些变量可能由C运行时提供。构建程序时,编译器和链接器会提供与启动应用程序相关的各种支持样板代码。如果你想知道这些变量实际存在的位置,那就是这个样板启动代码。

(此启动代码是程序启动时运行的代码。启动代码然后通过调用main()函数将控制权移交给您的程序。)

但是,对于这种特定情况,您确实希望使用C标准定义的argcargv提供给main()。这将使您的程序可移植到所有C编译器,而不仅限于您的特定(可能是古老的)编译器。标准,

  

程序启动时调用的函数名为main。该   实现声明此函数没有原型。有可能   没有参数定义:

     int main(void) { /*...*/ }
     

或有两个参数(这里称为argc和argv,尽管如此)   可以使用名称,因为它们是它们所在的函数的本地名称   声明):

     int main(int argc, char *argv[]) { /*...*/ }

当然,如果你使用这些argcargv,你肯定不需要dos.h