2015-08-03 4 views
1

Я только что написал образец программы, чтобы понять работу функций в C. Я объявил функцию в C и назову ее во время выполнения своих программ. Однако мой компилятор дает мне предупреждение о неиспользуемой функции. Мой код выглядит следующим образом:Почему компилятор дает предупреждение о неиспользуемой функции?

#include <stdlib.h> 
#include <stdio.h> 

int test_function(x); 
int main(){ 

    int x; 
    char letter[] ={"HAAA"}; 
    char cmpre[] = {"AHD"}; 
    int value; 

    for(int i=0; i<4;i++) 
    { 
     if(letter[i] == cmpre[i]) 
     { 
      x=0; 
     } 
    } 

    int test_function(x) 
     { 
      if (x==0) 
      { 
      printf("the letters are the same"); 
      } 
     return value; 
     } 

    printf("To check if the letters are the same go to the function"); 
    test_function(x); 

    return 0; 
    } 

Программа, кажется, выполнить хорошо, но я получаю предупреждение в четвертой строке, где я объявил функцию в начале программы. Предупреждение:

Multiple markers at this line 
- parameter names (without types) in function declaration [enabled by 
default] 
- Unused declaration of function 'test_function' 

Я думаю, что способ, которым я звоню, является неправильным. Может кто-нибудь, пожалуйста, помогите мне. Thnak вас заранее.

+0

написать функцию вне основной функции –

+0

@RaghuSrikanthReddy: Но тогда вы не можете использовать локальную переменную 'значение' в' test_function'. (В коде используются нестандартные вложенные функции.) –

+0

'int test_function (x);' не является допустимым объявлением функции. 'x' не является типом. – juanchopanza

ответ

0

Вы должны объявить Int test_function за пределами основного

, например.

int test_function(int x) 

, а затем вызвать функцию в главном.

value = test_function(x) 

Это то, что ваш код должен выглядеть следующим образом:

#include <stdlib.h> 
#include <stdio.h> 

int test_function(x) 
     { 
      int value = 0; 

      if (x==0) 
      { 
      printf("the letters are the same"); 
      } 
     return value; 
     } 

int main(){ 

    int x = 0; 
    char letter[] ={"HAAA"}; 
    char cmpre[] = {"AHD"}; 
    int value = 0; // unused 

    for(int i=0; i<4;i++) 
    { 
     if(letter[i] == cmpre[i]) 
     { 
      x=0; 
     } 
    } 

    printf("To check if the letters are the same go to the function"); 
    test_function(x); 

    return 0; 
    } 

Обратите внимание, что если вам не нужно возвращать значение вы могли бы сделать функцию пустоту. И инициализируйте свои переменные. Вы можете найти часы, чтобы найти такую ​​ошибку.

+0

'значение' не объявляется, а внутри' test_function'; это не скомпилируется. –

+0

Ваше право. Сожалею. – user281874

1

Отказ от ответственности: вложенные функции являются нестандартными C, и для этого я знаю только GNU extension. Как и все, что я утверждаю здесь, вполне может оказаться неверным в другой реализации. Моя рекомендация в том, что вы просто не используете их вообще.

Ваш вложенный test_function затеняет глобальную декларацию. Таким образом, test_function, который вы указали выше main, никогда не вызывается, потому что вызов внутри main относится к вложенной функции. Следовательно, вы получаете предупреждение.