【问题标题】:Intro to C: Declaration of FunctionsC 简介:函数声明
【发布时间】:2013-04-17 21:08:27
【问题描述】:

我想声明一个函数以在我的 ANSI C 代码中使用。 我可以在 main() 中使用后定义函数吗? 例如我写的一个绝对值函数:谁能告诉我它是否正确?

#include <stdio.h>

int main()
{
    double value1 = -5;
    printf("%lf",
           abs(value1));
}

double abs(double number)
{
    if (number < 0) {
        (number * (-1) = number);
    }
    return number;
}

【问题讨论】:

  • 是的,很抱歉我的错。

标签: c function debugging declaration absolute-value


【解决方案1】:

你需要解决几个问题:

#include <stdio.h>

double abs(double number); // <<< 1. prototype here

int main()
{
    double value1 = -5;

    printf("%lf",
           abs(value1));
}

double abs(double number)
{
    if (number < 0) {
        number = number * -1.0; // <<< 2. fix here
    }
    return number;
}
  1. abs 函数需要一个原型,以便编译器在您调用它之前知道它的函数签名

  2. 你否定number的表达是从后到前

【讨论】:

  • +1。附带说明:不需要在 C 中声明函数原型,尽管这绝对是一个好习惯:stackoverflow.com/a/2575204/814702
  • @informatik01:在这种情况下必要的,因为默认的int参数和函数结果显然不起作用。
  • 在这种情况下我同意。这只是一个一般的旁注。没办法,抱歉)
  • @informatik01 但是,如您链接的答案中所述,有必要在调用函数之前声明函数。函数原型是指定参数类型的函数声明。即使没有声明,C 的过时版本也允许函数定义。这种白痴在 C99 标准中被删除。不幸的是,您仍然可以声明不带参数的函数(非原型格式),但它在 C 标准中被标记为过时的特性。
  • @Lundin 恕我直言,我从未告诉过您不必在调用函数之前声明函数。我想表达的唯一 是关于函数prototype 的(在我链接到的答案中,在第一句话中明确说明了这一点)。尽管正如该答案的作者在他的附加说明中指出的那样,对于 some 功能,这是一项要求。我当然同意 Paul R 的观点,在他的例子中这是必要的。不管怎样,谢谢你的评论。
【解决方案2】:

函数必须至少在使用前声明,最好使用原型语法(它指定参数的数量和类型,以及返回类型)。所以至少,你需要这样一行

double abs( double number ); 

在代码中的某处之前你在main 中调用abs

你也可以在使用之前定义一个函数:

double abs( double number )
{
   // compute absolute value
}

int main( void )
{
  ...
  x = abs(x);
  ...
}

这实际上是我的偏好;同一个翻译单元(文件)中的所有内容在使用之前都应该定义。这样您就不必担心保持声明和定义同步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多