问我的问题是,即使我们在命令提示符下提供了integer / float参数,它们仍被视为字符串或不是C语言。我不确定那可以帮助一点点。这是真的与否C语言,为什么?那些像Java或python的其他人呢?
答案 0 :(得分:2)
确实,独立于语言,Unix上程序的命令行参数是字符串。如果程序选择将它们解释为数字,那很好,但这是因为程序(或程序员)选择这样做。类似地,对语言的运行时支持可能会将o / s传递的参数更改为integer或float类型,但是o / s将字符串传递给该运行时(我知道没有语言可以执行此操作,但我没有声明了解所有语言。)
要看到这一点,请注意执行程序的方法是exec*()
函数系列,每个函数都采用一个字符串,该字符串是要执行的程序的名称,以及一个字符串数组是传递给程序的参数。 system()
和popen()
等函数构建在exec*()
函数族的顶部 - 当然,它们也使用fork()
。甚至posix_spawn()
函数也会为生成程序的参数获取指向字符串的指针数组。
答案 1 :(得分:1)
与邮寄没有信封的信件没有什么不同。我们都同意使用称为信封的通用外壳。操作系统使用称为字符串的公共项将参数传递给程序。理解程序想要对参数做什么,超出了操作系统的范围。
有一些例外,我想到的是将参数传递给Linux内核模块。这些可以作为字符串以外的项目传递。
答案 2 :(得分:0)
基本上,这是在操作系统和程序之间创建接口的问题。 任何计划。请记住,程序并不总是用C语言编写,您甚至不知道语言中是否有float
或int
等内容。
您希望能够传递多个参数(使用自然分隔符),这些参数可以轻松编码任意信息。在C中,字符串可以是任意长度,对它们的唯一约束是它们中的零字节表示字符串的结尾。这是一种将任意信息传递给程序的高度灵活和自然的方式。
所以你永远不能直接向程序提供任意整数/浮点数参数;操作系统(Unix / Linux / Windows /等)不会让你。您没有任何工具可以为您提供该界面,就像您无法将鼠标单击作为参数传递一样。你提供的只是一系列字符。
由于Unix和C是一起设计的,它也是C编程语言的一部分,从那里开始用于C ++,Java,Python和大多数其他现代编程语言,并以同样的方式进入Linux,Windows和大多数其他操作系统。