我最近在C中使用了函数指针.
继续回答你自己的问题的传统,我决定对那些需要快速深入研究这个主题的人进行一些基本的总结.
我知道这听起来很傻,我知道C不是面向对象的语言.
但有没有办法在C中实现动态方法调度?我考虑过函数指针,但没有得到完整的想法.
我怎么能实现这个?
我正在尝试编译一段包含_Noreturn的代码:
#ifndef SOMEHEADER_H
#define SOMEHEADER_H
#include <stdalign.h>
#include <stdbool.h>
#include <stdint.h>
extern struct s {
_Noreturn void (*somenoreturnfunc)(bool);
} svar;
#endif
Run Code Online (Sandbox Code Playgroud)
这给了我:
error: expected specifier-qualifier-list before '_Noreturn' 上:
_Noreturn void (*somenoreturnfunc)(bool);
所以我从这里尝试了这个建议:
#ifndef SOMEHEADER_H
#define SOMEHEADER_H
#include <stdalign.h>
#include <stdbool.h>
#include <stdint.h>
#include "noreturn.h"
extern struct s {
noreturn void (*somenoreturnfunc)(bool);
} svar;
#endif
Run Code Online (Sandbox Code Playgroud)
noreturn.h:
#ifndef NO_RETURN_H
#define NO_RETURN_H
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#define noreturn _Noreturn
#elif defined(__GNUC__)
#define noreturn __attribute__((noreturn))
#else
#define noreturn
#endif
#endif …Run Code Online (Sandbox Code Playgroud) 我被限制在比赛中使用 C,我需要模拟课程。我正在尝试构建一个简单的“点”类,它可以返回并设置一个点的 X 和 Y 坐标。然而,下面的代码返回诸如“未知类型名称点”、“预期标识符或(”和“预期参数声明符”等错误。这些错误是什么意思?我该如何纠正它们?这是编写“的正确方法”伪类”?
typedef struct object object, *setCoordinates;
struct object {
float x, y;
void (*setCoordinates)(object *self, float x, float y);
void (*getYCoordinate)(object *self);
void (*getXCoordinate)(object *self);
};
void object_setCoordinates(object *self, float x, float y){
self->x = x;
self->y = y;
}
float object_getXCoordinate(object *self){
return self->x;
}
float object_getYCoordinate(object *self){
return self->y;
}
object point;
point.setCoordinates = object_setCoordinates;
point.getYCoordinate = object_getYCoordinate;
point.getXCoordinate = object_getXCoordinate;
point.setCoordinates(&point, 1, 2);
printf("Coordinates: X Coordinate: %f, Y Coordinate: %f", point.getXCoordinate, point.getYCoordinate); …Run Code Online (Sandbox Code Playgroud) 我有一个我需要理解的C代码.有一个
typedef struct someStruct {
int i;
char c;
someStruct() {
i = 0;
c = 'c';
}
someStruct(char inpChar) {
i = 1;
c = inpChar;
}
} t_someStruct;
Run Code Online (Sandbox Code Playgroud)
(我知道,代码实际上没有意义或有用.我只是简化它.)所以有这个结构,它有两个成员(int i和char c).有趣的是它基本上有两个构造函数,这对我来说是一个新概念.它工作正常,但我们可以编写结构的构造函数吗?我在谷歌上找不到任何东西,也许我没找对.