作者descent (「雄辩是银,沉默是金」)
看板C_and_CPP
标题Re: [问题] struct alignment
时间Fri Dec 13 16:45:39 2019
用 cfront 来测试。
t.h
#ifndef t_h
#define t_h
#include <stdio.h>
class Base
{
public:
Base()
{
printf("Base ctor\n");
num_ = 5;
}
~Base()
{
printf("Base dtor\n");
}
int get_num();
private:
int num_;
};
class D1 : public Base
{
public:
D1()
{
printf("D1 ctor\n");
a_ = 12;
}
~D1()
{
printf("D1 dtor\n");
}
private:
int a_;
};
class D2 : public Base
{
public:
D2()
{
printf("D2 ctor\n");
b_ = 78;
}
~D2()
{
printf("D2 dtor\n");
}
private:
int b_;
};
#endif
t.C
#include "t.h"
int Base::get_num()
{
return num_;
}
m.C
#include "t.h"
int main(int argc, char *argv[])
{
D1 d1;
D2 d2;
printf("d1.num: %d\n", d1.get_num());
printf("d2.num: %d\n", d1.get_num());
return 0;
}
编译指令
main_fn=t
cpp-5 -Iincl-master/incl-linux32/ $main_fn.C > $main_fn.i # 处理 header files
./cfront +a1 +L +f$main_fn.C < $main_fn.i > $main_fn..c # 将 cpp 档 (.C) 转成
.c 档
main_fn=m
cpp-5 -Iincl-master/incl-linux32/ $main_fn.C > $main_fn.i # 处理 header files
./cfront +a1 +L +f$main_fn.C < $main_fn.i > $main_fn..c
gcc-5 m..c t..c m.cdts..c ./libC.a -o m2
执行结果
./m2
Base ctor
D1 ctor
Base ctor
D2 ctor
d1.num: 5
d2.num: 5
D2 dtor
Base dtor
D1 dtor
Base dtor
好奇测试了一下, 不算太难, 连 ctor/dtor 都送给你了。
只是转出的 ..c code 超级难看就是, 但用 macro 自己来, 应该也不会简单到哪里。
应付最基本的继承语法应该是绰绰有余。
用 c89 应该也是没问题。
※ 引述《DJWS (...)》之铭言:
: // C99
: struct SuperClass {
: int num;
: };
: struct ClassA {
: int num;
: int a;
: };
: struct ClassB {
: int num;
: int b;
: };
: struct ClassA objA = {
: .num = 0,
: .a = 0
: };
: struct ClassB objB = {
: .num = 0,
: .b = 0
: };
: void func(void* obj)
: {
: struct SuperClass* object = obj;
: object->num++;
: }
: int main(void) {
: func(&objA);
: func(&objB);
: return 0;
: }
: 我想做类似的事情,请问在C99要怎麽写?
: 不能使用malloc
--
纸上得来终觉浅,绝知此事要躬行。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.218.53.138 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1576226744.A.6FE.html
※ 编辑: descent (61.218.53.138 台湾), 12/13/2019 16:56:36
1F:推 DJWS: 谢谢 我会考虑看看 12/13 18:11