程序接收 argc 中的参数个数和 argv 中的参数向量,上面的 arg ument c ount将为2(程序名称计为第一个参数), arg ument v ector将包含[ cat , file ,空值] . 而最后一个元素是一个空指针 .
通常,你会这样写:
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 ,因为这是隐含的 . 今天,这被认为是一个错误 .
8 回答
您可以使用
app -something -somethingelse
等参数运行应用程序 .int argc
表示这些参数的数量,char *argv[]
是一个将实际参数传递到应用程序的数组 . 这样您就可以在应用程序内部使用它们 .main
的参数argc
和argv
被用作向程序发送参数的一种方式,可能最熟悉的方法是使用用户可以键入cat文件的良好终端 . 这里的单词cat
是一个程序,它接收一个文件并将其输出到标准输出(stdout
) .程序接收
argc
中的参数个数和argv
中的参数向量,上面的 arg ument c ount将为2(程序名称计为第一个参数), arg ument v ector将包含[cat
,file
,空值] . 而最后一个元素是一个空指针 .通常,你会这样写:
如果您的程序不需要任何参数,则以下列方式编写
main
函数同样有效:在C语言的早期版本中,
main
之前没有int
,因为这是隐含的 . 今天,这被认为是一个错误 .在符合 POSIX 的系统(和Windows)上,可以使用第三个参数
char **envp
,其中包含程序environment variables的向量 . 存在main
函数的参数列表的进一步变体,但由于它是非标准的,因此我不会在此详细说明 .此外,变量的命名是一种惯例,没有实际意义 . 坚持这一点总是一个好主意,这样你就不会混淆他人,但将
main
定义为同样有效 .对于第二个问题,有几种方法可以将参数发送给程序 . 我建议你看exec*()family of functions这是 POSIX -standard,但是 easier 可能只是 easier ,但
system()
的使用通常不赞成,因为它不能保证在每个系统上都能正常工作 . 我自己没有测试过;但如果* NIX系统上没有安装bash
,zsh
或其他shell,system()
将失败 .这些用于在调用程序时将参数传递给程序,例如从命令行传递
上面,程序
mysort
使用一些命令行参数执行 . 在main( int argc, char * argv[])
里面,这会导致因为有7个参数(计算程序),和
以下是一个完整的例子 .
[
char
字符串"2","8"等可以使用某些字符到数字转换功能转换为数字,例如atol()
(link)]使用
argc
(参数计数)和argv
(参数向量),可以在启动应用程序时获取传递参数的数量和值 .这样,您可以在启动应用程序时以不同的方式使用参数(例如
-version
) .但你也可以使用
int main(void)
作为C的原型 .还有第三个(不太知名的和非标准的)原型,第三个参数是
envp
. 它包含环境变量 .Resources:
argc
表示传递给程序的参数个数 .char* argv[]
是传递的参数 .argv[0]
始终是程序名称本身 . 我不是100%肯定,但我认为int main()
在C / C中有效 .argc
是在运行时为程序提供的命令行参数的数量,argv
是包含这些参数的字符数组(而不是C字符串数组)的数组 . 如果您知道自己不需要命令行参数,则可以声明主要参与void
参数,而不是:根据标准,这是为
main
定义的唯一两个原型,但是一些编译器也允许返回类型void
. 更多关于这个on Wikipedia .comp.lang.c FAQ处理这个问题
in Question 11.12a .
argc
是命令行参数的数量,argv
是表示的字符串数组命令行参数 .这使您可以选择对传递给程序的参数作出反应 . 如果你没有期待,你也可以使用
int main
.