programing

C구조 내에서 함수를 정의할 수 있습니까?

firstcheck 2022. 7. 23. 11:23
반응형

C구조 내에서 함수를 정의할 수 있습니까?

일부 C++ 코드를 C로 변환하려고 하는데 몇 가지 문제가 있습니다.구조 내에서 함수를 정의하려면 어떻게 해야 합니까?

다음과 같이 합니다.

 typedef struct  {
    double x, y, z;
    struct Point *next;
    struct Point *prev;
    void act() {sth. to do here};
} Point;

아니요, 이 명령어 내에서 함수를 정의할 수 없습니다.struct주식회사.

에 함수 포인터를 설정할 수 있습니다.struct그러나 함수 포인터를 갖는 것은 C++의 멤버 함수와 매우 다르다, 즉 암묵적인 것이 없다.this포함 포인터struct사례.

의도된 예(demo http://ideone.com/kyHlQ):

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

struct point
{
    int x;
    int y;
    void (*print)(const struct point*);
};

void print_x(const struct point* p)
{
    printf("x=%d\n", p->x);
}

void print_y(const struct point* p)
{
    printf("y=%d\n", p->y);
}

int main(void)
{
    struct point p1 = { 2, 4, print_x };
    struct point p2 = { 7, 1, print_y };

    p1.print(&p1);
    p2.print(&p2);

    return 0;
}

구조에는 함수 포인터가 있을 수 있지만, 이 방법은 없습니다.

다음과 같이 정의할 수 있습니다.

예:

typedef struct cont_func 
{
    int var1;
    int (*func)(int x, int y);
    void *input;
} cont_func;


int max (int x, int y)
{
    return (x > y) ? x : y;
}

int main () {
   struct cont_func T;

   T.func = max;
}

C내부에서는 메서드를 정의할 수 없습니다.struct. 다음과 같이 구조물 내부에 함수 포인터를 정의할 수 있습니다.

typedef struct  {
  double x, y, z;
  struct Point *next;
  struct Point *prev;
  void (*act)();
} Point;

특정 함수에 포인터를 할당해야 합니다.struct.

이 아이디어는 구조 내부의 함수에 포인터를 넣는 것입니다.그런 다음 기능이 구조물 외부에 선언됩니다.이는 클래스 내에서 함수가 선언되는 C++의 클래스와는 다릅니다.

예를 들어, https://web.archive.org/web/20121024233849/http://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html 에서 코드를 훔칩니다.

struct t {
    int a;
    void (*fun) (int * a);
} ;

void get_a (int * a) {
    printf (" input : ");
    scanf ("%d", a);
}

int main () {
    struct t test;
    test.a = 0;

    printf ("a (before): %d\n", test.a);
    test.fun = get_a;
    test.fun(&test.a);
    printf ("a (after ): %d\n", test.a);

    return 0;
}

어디에 test.fun = get_a;구조체의 포인터에 함수를 할당합니다.test.fun(&test.a);라고 부릅니다.

아니요, C에서는 구조물 내부에 함수를 선언할 수 없습니다.

그것이 C와 C++의 근본적인 차이 중 하나입니다.

다음 스레드를 참조하십시오.https://web.archive.org/web/20121024233849/http : //forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html

C++와는 다른 C 프로그래밍 언어의 구조체에서만 함수 포인터를 정의할 수 있습니다.

언급URL : https://stackoverflow.com/questions/12642830/can-i-define-a-function-inside-a-c-structure

반응형