2013-04-17 1 views
2

Je veux déclarer une fonction à utiliser dans mon code en ANSI C. Puis-je définir la fonction après l'avoir utilisée dans main()? Par exemple une fonction de valeur absolue que j'ai écrite: quelqu'un peut-il me dire si c'est un son?Intro to C: Déclaration des fonctions

#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

Si cela est important, vous pouvez utiliser la fonction abs qui fait ce que vous voulez et elle existe dans la bibliothèque math.h (pour C++) ou cmath.h (pour C). – Edeph

+3

@Edeph vous avez ceux à l'envers, '' pour C++ et '' pour C. – Joe

+0

Oui, je suis désolé ma mauvaise. – Edeph

Répondre

5

Vous devez fixer un certain nombre de choses:

#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. la fonction abs a besoin d'un prototype de sorte que le compilateur connaît sa signature de la fonction avant de l'appeler

  2. votre expression pour annuler number était de retour à

+0

+1. En remarque: il n'est pas nécessaire de déclarer un prototype de fonction en C, bien que ce soit une bonne pratique: http://stackoverflow.com/a/2575204/814702 – informatik01

+0

@ informatik01: dans ce cas c'est * nécessaire, car les paramètres int par défaut et le résultat de la fonction ne fonctionneront évidemment pas. –

+0

Dans ce cas, je suis d'accord. C'était juste une note de côté * générale *. N'a pas pu aider cela, désolé) – informatik01

1

Les fonctions doivent au moins être déclaré avant leur utilisation, de préférence en utilisant la syntaxe prototype (qui spécifie le nombre et les types d'arguments, ainsi que le type de retour). Donc, à tout le moins, vous avez besoin d'une ligne comme

double abs(double number); 

quelque part dans votre code avant vous appelez abs dans main.

Vous pouvez également définir une fonction avant qu'il ne soit utilisé:

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

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

Ceci est en fait ma préférence; tout dans la même unité de traduction (fichier) doit être défini avant son utilisation. De cette façon, vous n'avez pas à vous soucier de la synchronisation des déclarations et des définitions.