C 编译错误

C 编译错误

当我尝试编译我的代码时出现此错误 error: expected declaration or statement at end of input }error: function declaration isn’t a prototype [-Werror=strict-prototypes] void cleanup_module() error: function declaration isn’t a prototype [-Werror=strict-prototypes] int init_module()

这是我的代码:

      #define __KERNEL__
      #define MODULE

      #include <linux/module.h>
      #include <linux/kernel.h>
#include <linux/module.h>   /* Needed by all modules */
#include <linux/kernel.h>   /* Needed for KERN_INFO */
#include <linux/init.h> 
/**
 * Convert human readable IPv4 address to UINT32
 * @param pDottedQuad   Input C string e.g. "192.168.0.1"
 * @param pIpAddr       Output IP address as UINT32
 * return 1 on success, else 0
 */
int ipStringToNumber (const char*  pDottedQuad, unsigned int * pIpAddr)
{
   unsigned int            byte3;
   unsigned int            byte2;
   unsigned int            byte1;
  unsigned int            byte0;
   char              dummyString[2];

   /* The dummy string with specifier %1s searches for a non-whitespace char
    * after the last number. If it is found, the result of sscanf will be 5
    * instead of 4, indicating an erroneous format of the ip-address.
    */
   if (sscanf (pDottedQuad, "%u.%u.%u.%u%1s",
                  &byte3, &byte2, &byte1, &byte0, dummyString) == 4)
   {
 if ( (byte3 < 256) && (byte2 < 256) && (byte1 < 256) && (byte0 < 256))
      {
         *pIpAddr  = ((byte3 << 24) + (byte2 << 16) + (byte1 << 8) +  byte0);

         return 1;
      }
   }
 /* Initialisation routine */
int init_module()
      {
        printk(KERN_INFO "Hello !!!!\n");
          return 0;
      }

  /* Cleanup routine */

void cleanup_module()
      {
        printk(KERN_INFO "Goodbye !!!!\n");
}

答案1

int ipStringToNumber (const char*  pDottedQuad, unsigned int * pIpAddr)
{
    unsigned int            byte3;
    unsigned int            byte2;
    unsigned int            byte1;
    unsigned int            byte0;
    char              dummyString[2];

    /* The dummy string with specifier %1s searches for a non-whitespace char
    * after the last number. If it is found, the result of sscanf will be 5
    * instead of 4, indicating an erroneous format of the ip-address.
    */
    if (sscanf (pDottedQuad, "%u.%u.%u.%u%1s", &byte3, &byte2, &byte1, &byte0, dummyString) == 4)
    {
        if ( (byte3 < 256) && (byte2 < 256) && (byte1 < 256) && (byte0 < 256))
        {
            *pIpAddr  = ((byte3 << 24) + (byte2 << 16) + (byte1 << 8) +  byte0);

            return 1;
        }
    }
} // <-------------------------HERE
/* Initialisation routine */
int init_module()
{
    printk(KERN_INFO "Hello !!!!\n");
    return 0;
}

/* Cleanup routine */

void cleanup_module()
{
    printk(KERN_INFO "Goodbye !!!!\n");
}

相关内容