-2
#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 编译它。

4

3 回答 3

1

使用您问题中的更新代码,您有几个问题:

  1. 您有一个错字:您声明了一个变量doenstwork,但随后您尝试引用doesntwork.

  2. 既然您说您能够编译和运行您的程序,那么您发布的内容显然与您实际运行的内容不同。始终复制并粘贴您的确切代码。如果你重新输入它,你会犯这样的错误,而我们这些试图帮助你的人无法区分你在问题中输入代码所犯的错误和实际上在你的代码中的错误编译和运行。

  3. 返回的值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 开始,它不是必需的,但明确表示不是一个坏主意。

于 2013-09-14T23:10:36.153 回答
0
  1. 您没有定义变量“doesntwork”。这不应该编译。

  2. 你不会用右括号来结束你的函数“乘法”。这不应该编译。

  3. 您不包括函数“乘法”的函数原型。这不应该编译。

  4. 如果您的 IDE 太懒了以至于它会编译它,那么您怎么知道它“不起作用”?也许它返回了一些 int 给操作系统。

于 2013-09-14T21:37:23.440 回答
0

事实上,比利鲍勃是正确的。不同的 IDE 和编译器需要不同级别的严格性。完全符合 ANSI/ISO、需要原型等可以为您省去很多麻烦。你的编译器应该需要一个原型。

该行:

n = atoi(argv[1]);

也是可疑的,因为在 C 中,数组从零开始索引,所以数组中的第一项应该是argv[0].

于 2013-09-15T01:08:06.767 回答