اطلاعیه

Collapse
No announcement yet.

آیا این اشاره گر به تابع هست ؟؟؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    آیا این اشاره گر به تابع هست ؟؟؟

    سلام
    به قطعه کد زیر توجه بفرمایید
    typedef enum
    }
    x
    y
    z
    example;{
    در جای دیگه ای از برنامه

    typedef struct
    {
    example (*function1) (BYTE);
    example (*function2) (BYTE);

    }example2;

    در جای دیگه ای از برنامه برای تعریف اولیه تابع
    example function1 (BYTE);
    example function2 (BYTE);
    همانطور که می بینید خیلی ساده تابع را تعریف کرده و فقط برای مقدار بازگشتی تابع از typedef enum استفاده کرده

    من ارتباط این ها رو خیلی متوجه نمیشه قسمتی که توابع را با همان enum به صورت اشاره گر استفاده کرده چه طور این اتفاق ممکنه ؟؟
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    #2
    پاسخ : آیا این اشاره گر به تابع هست ؟؟؟

    هرکدام از typedef های بالا در هدرهای مختلفی نوشته شده اند
    ولی ظاهرا یک ارتباطی بینشون هست
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    دیدگاه


      #3
      پاسخ : آیا این اشاره گر به تابع هست ؟؟؟

      نوشته اصلی توسط seyed saeed نمایش پست ها
      سلام
      به قطعه کد زیر توجه بفرمایید
      typedef enum
      }
      x
      y
      z
      example;{
      در جای دیگه ای از برنامه

      typedef struct
      {
      example (*function1) (BYTE);
      example (*function2) (BYTE);

      }example2;

      در جای دیگه ای از برنامه برای تعریف اولیه تابع
      example function1 (BYTE);
      example function2 (BYTE);
      همانطور که می بینید خیلی ساده تابع را تعریف کرده و فقط برای مقدار بازگشتی تابع از typedef enum استفاده کرده

      من ارتباط این ها رو خیلی متوجه نمیشه قسمتی که توابع را با همان enum به صورت اشاره گر استفاده کرده چه طور این اتفاق ممکنه ؟؟
      typedef اولی یک نوع enum را تعریف کرده است که قرار است نوع برگشتی تابع باشد
      در تعریف دوم یک ساختمان تعریف شده که حاوی دو اشاره گر به تابع است که این توابع یک کاراکتر را میگیرند و یک داده از نوع enum بالایی را برمیگردانند

      دیدگاه


        #4
        پاسخ : آیا این اشاره گر به تابع هست ؟؟؟

        نوشته اصلی توسط x935418 نمایش پست ها
        typedef اولی یک نوع enum را تعریف کرده است که قرار است نوع برگشتی تابع باشد
        در تعریف دوم یک ساختمان تعریف شده که حاوی دو اشاره گر به تابع است که این توابع یک کاراکتر را میگیرند و یک داده از نوع enum بالایی را برمیگردانند
        یعنی اشاره گر به تابع را هم نام با خود تابع اصلی تعریف کرده ؟؟؟
        بگذارید تا قطعه کد اصلی بگذارم
        البته جای دیگه ای برنامه برایم نا مفهوم تر است

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        typedef struct
        {
        DSTATUS (*disk_initialize) (BYTE); /*!< Initialize Disk Drive */
        DSTATUS (*disk_status) (BYTE); /*!< Get Disk Status */
        DRESULT (*disk_read) (BYTE, BYTE*, DWORD, UINT); /*!< Read Sector(s) */
        #if _USE_WRITE == 1
        DRESULT (*disk_write) (BYTE, const BYTE*, DWORD, UINT); /*!< Write Sector(s) when _USE_WRITE = 0 */
        #endif /* _USE_WRITE == 1 */
        #if _USE_IOCTL == 1
        DRESULT (*disk_ioctl) (BYTE, BYTE, void*); /*!< I/O control operation when _USE_IOCTL = 1 */
        #endif /* _USE_IOCTL == 1 */

        }Diskio_drvTypeDef;

        /**
        * @brief Global Disk IO Drivers structure definition
        */
        typedef struct
        {
        uint8_t is_initialized[_VOLUMES];
        const Diskio_drvTypeDef *drv[_VOLUMES];
        uint8_t lun[_VOLUMES];
        volatile uint8_t nbr;

        }Disk_drvTypeDef;
        این ها در یک هدر موجود هستند
        DRESULT disk_read (
        BYTE pdrv, /* Physical drive nmuber to identify the drive */
        BYTE *buff, /* Data buffer to store read data */
        DWORD sector, /* Sector address in LBA */
        UINT count /* Number of sectors to read */
        )
        {
        DRESULT res;

        res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count);
        return res;
        }
        این هم در فایل C خود قرار دارد که البته نام تابع در هدر فایل قرار گرفته با یک enum
        typedef enum {
        RES_OK = 0, /* 0: Successful */
        RES_ERROR, /* 1: R/W Error */
        RES_WRPRT, /* 2: Write Protected */
        RES_NOTRDY, /* 3: Not Ready */
        RES_PARERR /* 4: Invalid Parameter */
        } DRESULT;


        /*---------------------------------------*/
        /* Prototypes for disk control functions */


        DSTATUS disk_initialize (BYTE pdrv);
        DSTATUS disk_status (BYTE pdrv);
        DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
        DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
        DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
        DWORD get_fattime (void);
        این هم از هدر فایل

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        من دستورات اولیه ای که گذاشتم را در ویژوال تست کردم ولی ایراد می گیره
        یعنی زمانی که
        DRESULT disk_read (
        BYTE pdrv, /* Physical drive nmuber to identify the drive */
        BYTE *buff, /* Data buffer to store read data */
        DWORD sector, /* Sector address in LBA */
        UINT count /* Number of sectors to read */
        )
        {
        DRESULT res;

        res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count);
        return res;
        }
        تعریف می کنم از داخل تابع ایراد می گیره
        اللهم صل علی محمد و ال محمد و عجل فرجهم
        پیامبر اکرم(ص):زکات علم نشر آن است.
        در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

        دیدگاه

        لطفا صبر کنید...
        X