在使用_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的意义是什么?
答案 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.h
或dos.h
中包含的某个文件中,有_argc
和_argv
的定义。
如果您没有包含dos.h
,您仍然需要声明extern int _argc;
和extern char *_argv[];
才能使用它们。否则,您将收到编译器错误,因为编译器不知道这些变量是什么。
这些变量可能由C运行时提供。构建程序时,编译器和链接器会提供与启动应用程序相关的各种支持样板代码。如果你想知道这些变量实际存在的位置,那就是这个样板启动代码。
(此启动代码是程序启动时运行的代码。启动代码然后通过调用main()
函数将控制权移交给您的程序。)
但是,对于这种特定情况,您确实希望使用C标准定义的argc
和argv
提供给main()
。这将使您的程序可移植到所有C编译器,而不仅限于您的特定(可能是古老的)编译器。标准,
程序启动时调用的函数名为main。该 实现声明此函数没有原型。有可能 没有参数定义:
int main(void) { /*...*/ }
或有两个参数(这里称为argc和argv,尽管如此) 可以使用名称,因为它们是它们所在的函数的本地名称 声明):
int main(int argc, char *argv[]) { /*...*/ }
当然,如果你使用这些argc
和argv
,你肯定不需要dos.h
。