#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 -std = c99 filename.c -g。
编译它答案 0 :(得分:1)
使用问题中的更新代码,您有几个问题:
您有一个拼写错误:您声明了变量doenstwork
,但之后您尝试引用doesntwork
。
由于您说您可以编译并运行您的程序,因此您发布的内容显然与您实际运行的内容不同。 始终复制并粘贴您的确切代码。如果你重新输入它,你就会犯这样的错误,我们这些试图帮助你的人无法区分你在问题中输入代码时出现的错误与你在代码中实际出现的错误之间的区别编译和运行。
main
返回的值是程序的状态,而不是其输出。在类Unix系统上,除了该值的低8位之外的所有系统都将被忽略,因此这不是您的程序返回详细信息的好方法。
一旦我纠正了错字,我就可以使用你的程序了:
$ gcc c.c -o c
$ ./c 7 ; echo $?
14
但它仅适用于一小部分值:
$ ./c 1000 ; echo $?
208
程序的状态用于指示程序是成功还是失败,并且可能返回小量的有关其失败原因的信息。返回值0表示成功执行;返回EXIT_FAILURE
(在<stdlib.h>
中定义)表示失败。在类Unix系统上,通常是EXIT_FAILURE == 1
;有时像2这样的值用于表示不同类型的失败。例如,grep
如果找到匹配则返回0状态,如果未找到匹配则返回1,如果出现其他错误则返回2(例如格式错误的正则表达式或丢失文件)。
要从程序中获取信息,最简单的方法是将文本形式的信息打印到标准输出。你可以替换
return multiply(n);
通过
printf("%d\n", multiply(n));
之后可以添加return 0;
;从C99开始,它不是必需的,但要明确这一点并不是一个坏主意。
答案 1 :(得分:0)
您没有定义变量“doesntwork”。这不应该编译。
您不会使用右括号“加倍”结束您的功能。这不应该编译。
您没有为“multiply”函数包含函数原型。这不应该编译。
如果您的IDE非常懒,它会编译它,那么您怎么知道它“无法正常工作”?也许它返回了一些int到操作系统。
答案 2 :(得分:0)
实际上比利鲍勃是对的。不同的IDE和编译器需要不同的严格程度。完全符合ANSI / ISO标准,需要原型等,可以为您节省很多麻烦。你的编译器应该需要一个原型。
该行:
n = atoi(argv[1]);
也是可疑的,因为在C数组中从零开始索引,因此数组中的第一项应该是argv[0]
。