Possible Duplicates:
What are the arguments to main() for?
What does int argc, char *argv[] mean?

每个程序都从main(int argc, char *argv[])定义开始.

我不明白这是什么意思.如果有人能解释为什么我们在程序中不使用这些参数,我会非常高兴?为什么不:int main()

程序名是*argv[]中的一个元素吗?argc*argv[]中参数数的计数吗?发送到*argv[]的其他参数是什么?我们如何发送它们?

推荐答案

main的参数argcargv用作向程序发送参数的方式,可能最熟悉的方式是使用Good Ol‘终端,其中用户可以键入cat file.这里,字cat是获取文件并将其输出到标准输出(stdout)的程序.

程序接收argc中的参数数量和argv中的参数向量,在上面的argumentcount将是2(程序名计为第一个参数),argumentvector将包含[cat,file,null].而最后一个元素是空指针.

通常,你会这样写:

int  // Specifies that type of variable the function returns.
     // main() must return an integer
main ( int argc, char **argv ) {
     // code
     return 0; // Indicates that everything went well.
}

如果您的程序不需要任何参数,则以以下方式编写一个main函数同样有效:

int main() {
  // code
  return 0; // Zero indicates success, while any 
  // Non-Zero value indicates a failure/error
}

在C语言的早期版本中,main之前没有int,因为这是隐含的.今天,这被认为是一个错误.

POSIX兼容的系统(和Windows)上,存在使用包含程序environment variables的向量的第三参数char **envp的可能性.还有main函数的参数列表的更多变体,但我不会在这里详细说明,因为它是非标准的.

此外,变量的命名是convention,没有实际意义.坚持这一点始终是一个好主意,这样你就不会混淆其他人,但将main定义为

int main(int c, char **v, char **e) {
   // code
   return 0;
}

对于第二个问题,有几种方法可以向程序发送参数.我建议你看看exec*()family of functions,这是POSIX的标准,但它可能是easier只使用system("command arg1 arg2"),但使用system()通常是不赞成的,因为它不保证在每一个系统上工作.我没有亲自测试过;但是,如果*NIX系统上没有安装bashzsh或其他shell ,system()将失败.

C++相关问答推荐

ISO_C_BINDING,从Fortran调用C

为什么写入系统调用打印的字符数不正确?

在#include中使用C宏变量

GCC引发不明确的诊断消息

减法运算结果的平方的最快方法?

二进制计算器与gmp

在句子中转换单词的问题

指向不同类型的指针是否与公共初始序列规则匹配?

为什么realloc函数在此代码中修改变量?

C语言中MPI发送接收字符串时出现的分段错误

通过对一个大的Malloc内存进行切片来使用Malloc的内存片

表达式x&;&;(~x)应该返回1还是0?它依赖于编译器吗?

向左移位3如何得到以字节为单位的位数?

Matlab/Octave对conv2函数使用哪种方法?

为什么GCC不能在 struct 初始值设定项中以sizeof作为条件的三进制中处理复合文字的编译时求值?

如何解释数组中的*(ptr)和*(ptr+2)?

const struct 成员的 typedef 中的灵活数组大小

为什么 C 字符串并不总是等同于字符数组?

OpenGL 中的非渐变 colored颜色 变化

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?