为什么编译器会对未使用的函数发出警告?

时间:2015-08-03 07:44:39

标签: c function

我刚刚编写了一个示例程序来理解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'

我认为我调用我的功能的方式不对。有人可以帮助我吗提前告诉你。

2 个答案:

答案 0 :(得分:1)

免责声明:嵌套函数是非标准C,我只知道GNU extension。因此,我在此声称的任何内容在另一个实现中可能都是不真实的。我的建议是你根本不使用它们。

您的嵌套test_function正在影响全局声明。因此,您在test_function之上声明的main永远不会被调用,因为main内的调用是指嵌套函数。因此,你会收到警告。

答案 1 :(得分:0)

你应该在main

之外声明int test_function

例如。

 int test_function(int x)

然后在main中调用该函数。

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;
   }

请注意,如果您不需要返回值,则可以使该函数无效。 并初始化您的变量。您可以搜索几小时来查找此类错误