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
'programing' 카테고리의 다른 글
GCC 메모리 장벽 __sync_synchronize vs asm volatile("") ::"memory") (0) | 2022.07.23 |
---|---|
Vuex + Mocha: 테스트에서 돌연변이를 커밋하면 'vuex 스토어 상태 변환 안 함' 경고가 발생합니다. (0) | 2022.07.23 |
비동기 작업이 완료되기 전의 Vuex 액세스 상태 (0) | 2022.07.23 |
변수 선언은 비용이 많이 드나요? (0) | 2022.07.23 |
Java에서 문자열을 InputStreamReader로 변환하려면 어떻게 해야 하나요? (0) | 2022.07.23 |