c语言中的主要参数和函数 #包括 整数乘法(整数n){ int-doenstwork=n*2; 回归网络; } int main(int argc,char*argv[]){ int n; n=atoi(argv[1]); 返回乘法(n); }
我编译,但当我用一个参数运行它时,我什么也看不到。用gcc-std=c99 filename.c-g编译它c语言中的主要参数和函数 #包括 整数乘法(整数n){ int-doenstwork=n*2; 回归网络; } int main(int argc,char*argv[]){ int n; n=atoi(argv[1]); 返回乘法(n); },c,main,C,Main,我编译,但当我用一个参数运行它时,我什么也看不到。用gcc-std=c99 filename.c-g编译它 您没有定义变量“DoesNetwork”。这不应该编译 函数“乘法”的结尾不能是一个右括号。这不应该编译 函数“multiply”不包含函数原型。这不应该编译 如果你的IDE是如此懒惰,它将编译这个,那么你怎么知道它“不工作”?也许它向操作系统返回了一些int 使用问题中的更新代码,您有几个问题: 输入错误:声明变量doenstwork,然后尝试引用doestwork 既然你说你可以编译并
使用问题中的更新代码,您有几个问题:
doenstwork
,然后尝试引用doestwork
main
返回的值是程序的状态,而不是其输出。在类Unix系统上,此值的低阶8位被忽略,因此这不是程序返回详细信息的好方法#include <stdio.h>
int multiply(int n){
int doenstwork = n * 2;
return doesntwork;
}
int main(int argc, char *argv[]){
int n;
n = atoi(argv[1]);
return multiply(n);
}
但它只适用于小范围的值:
$ gcc c.c -o c
$ ./c 7 ; echo $?
14
程序的状态用于指示它是成功还是失败,并可能返回有关失败原因的少量信息。返回值0表示执行成功;返回EXIT\u FAILURE
(在
中定义)表示失败。在类Unix系统上,通常EXIT_FAILURE==1
;有时,类似于2的值用于表示不同类型的故障。例如,grep
如果找到匹配项,则返回状态0;如果未找到匹配项,则返回状态1;如果出现其他错误(例如格式错误的正则表达式或缺少文件),则返回状态2
要从程序中获取信息,最简单的方法是以文本形式将信息打印到标准输出。你可以替换
$ ./c 1000 ; echo $?
208
借
您可以添加一个
返回0代码>之后;从C99开始,这不是必需的,但明确是个不错的主意。事实上,比利·鲍勃是正确的。不同的IDE和编译器需要不同级别的严格性。完全符合ANSI/ISO标准,需要原型等可以为您节省很多麻烦。您的编译器应该需要一个原型
该行:
printf("%d\n", multiply(n));
也是可疑的,因为在C中数组是从零开始索引的,所以数组中的第一项应该是argv[0]
作为参考,}
是一个“大括号”<代码>]
是一个“括号”。好吧,我修正了所有问题,但不知道这意味着什么:函数“multiply”不包含函数原型。这不应该编译。@user2682811,Billy Bob错了。您的代码不需要向前声明,因为multiply
在main
之前声明。仍然不起作用。。。可以编译,但当发送一个参数时,我得到了分段错误,编译器会说什么?你发布的代码不会编译,它与参数无关。#包括int-multiply(int-n){int-doenstwork=n*2;return-doestwork;}int-main(int-argc,char*argv[]){int-n;n=atoi(argv[1]);return multiply(n)}如果你想编辑你的问题,请单击编辑按钮,不要发表评论。另外,你应该解释它到底是如何工作的。预期的行为是什么?代码实际上是做什么的?不,使用argv[1]
并不特别可疑argv[0]
指向表示程序名的字符串argv[1]
指向第一个命令行参数。(请注意,argv[1]
如果没有提供参数,将是一个空指针;您需要检查这一点,可能是通过检查argc
的值)顺便说一句,ISO C标准不需要原型;根据1999年的标准,任何调用都需要一个可见的声明,但该声明不需要是原型(即,它不需要指定参数类型)。但标准头中的所有函数声明都是原型。
printf("%d\n", multiply(n));
n = atoi(argv[1]);