2013-04-17 2 views
2

Я хочу объявить функцию для использования в моем коде в ANSI C. Мне удалось определить функцию после ее использования в main()? Например, функция абсолютного значения, которую я написал: может ли кто-нибудь сказать мне, если это звучит?Введение в C: Объявление функций

#include <stdio.h> 

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

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

Если это имеет значение, вы можете использовать функцию abs, которая делает то, что вы хотите, и она существует в библиотеке math.h (для C++) или cmath.h (для C). – Edeph

+3

@ Edeph вы получили те, которые включают в себя назад, '' для C++ и '' для C. – Joe

+0

Да, мне жаль, что я плохой. – Edeph

ответ

5

Вам необходимо исправить несколько вещей:

#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 было в обратном направлении

+0

+1. В качестве примечания стороны: нет необходимости объявлять прототип функции в C, хотя это определенно хорошая практика: http://stackoverflow.com/a/2575204/814702 – informatik01

+0

@ informatik01: в этом случае он * является * необходимо, поскольку параметры int по умолчанию и результат функции, очевидно, не сработают. –

+0

В этом случае я согласен. Это была всего лишь * общая заметка. Не могу не помочь, извините) – informatik01

1

Функции должны быть по крайней мере объявлен, прежде чем они используются, предпочтительно с использованием прототипа синтаксиса (который определяет количество и типы аргументов, а также тип возвращаемого значения). Таким образом, по крайней мере, вам нужна строка

double abs(double number); 

где-то в вашем коде , прежде чем вы звоните abs в main.

Вы также можете определить функцию, прежде чем он будет использоваться:

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

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

Это на самом деле мое предпочтение; все в одной единице перевода (файл) должно быть определено перед тем, как оно будет использовано. Таким образом, вам не нужно беспокоиться о том, чтобы синхронизировать декларации и определения.

Смежные вопросы