- 主题:同事间因为一个问题差点吵起来了
为了说明优点,生造出来栈上使用的场景
本来就是变长的数据,非要用定长的结构去承载
【 在 flw 的大作中提到: 】
: offset 宏就可以了。当然 0 1 效果更佳。
: 早期标准不支持 0,大家实践中用 1 居多。
: 但 maxlen 方便在栈上用,各有各的好处。
: ...................
--
FROM 223.104.40.*
这返回的是数据指针
你要复制出来么
如果不复制出来,你最后用一个指针指过去就行了
你为什么要用一个buf
如果你要复制出来,那你就需要知道长度
【 在 flyren911 的大作中提到: 】
: 可能我说的不清楚,我们接收信号是在图形化的编程语言里面,接收信号的逻辑用C语言表达就是:
: DataTypeT data = *(DataTypeT *)receive(SIG_ID);
: 这个逻辑是没法修改的,第三方的工具。
: ...................
--
FROM 223.104.40.*
我没说明白,下面这一句是在第三方工具的内核里面实现的,不可更改。
DataTypeT data = *(DataTypeT *)receive(SIG_ID);
我们只能拿到DataTypeT类型的data,如果你不分配足够的空间,数据就丢失了。
【 在 slowaction 的大作中提到: 】
: 这返回的是数据指针
: 你要复制出来么
: 如果不复制出来,你最后用一个指针指过去就行了
: ...................
--
FROM 183.221.16.*
我感觉跟同事之间的争议点可以等价于这道面试题:
给定这样一个结构体
typedef struct house
{
int price;
} houseT;
typedef struct member
{
int num;
houseT house[1];
} memberT;
typedef struct family
{
int num;
memberT member[10];
} familyT;
familyT family;
如何获取第3个member的house的num?
A:
直接取值
result = family.member[2].num
B:
通过偏移取值
memberT *pm = NULL;
houseT *ph = NULL;
pm = family.member;
for(int i=0; i<3; i++)
{
ph = pm->house;
for(j=0; j<pm->num; j++)
{
ph++;
}
pm = (memberT *)ph;
}
result = pm->num;
我同事说选A的会拒掉,我觉得选B的我会拒掉。
--
修改:flyren911 FROM 183.221.16.*
FROM 183.221.16.*
说实话,我没明白b在干什么
ph没在等号右侧出现过
这变量干什么用的
【 在 flyren911 的大作中提到: 】
: 我感觉跟同事之间的争议点可以等价于这道面试题:
: 给定这样一个结构体
: typedef struct house
: ...................
--
FROM 118.29.7.*
不好意思,写的有点问题,我表达的意思就是给定这样一个结构体,正常人是直接取值还是通过偏移取值?
就是说给定这样一个结构体familyT ,对于你来说这个结构体到底是静态的还是动态的?
--
FROM 183.221.16.*
你前面定义只有一个PortCapT, 后面肯定是PortCapT[0]啊。
后面的也许是你预留或者干嘛,反正取只能取第一个。
逻辑清楚就可以了。
只要收发两边用同一套,并且都能看到源代码,我觉得不容易出错。
当然要是写代码的人粗心大意瞎写那怎样也拦不住。
【 在 flyren911 的大作中提到: 】
: 就是解析数据可能会出错啊,
: 接收信号的逻辑是这样的,这个不能更改,receive返回的就是发送方分配的那块内存:
: local_radioCapT local_radioCap = *(local_radioCapT *)receive(SIG_ID);
: ...................
--
FROM 27.154.185.*
你的处理更好些,你同事没说一下自己为啥用MAX_NUM吗?这个number定义值是多少?
【 在 flyren911 (都是浮云) 的大作中提到: 】
: 今天同事因为这个事差点吵起来了,事情是这样的:
: 两个process之间通过信号通信,A发了一个动态信号给B,B需要用一个静态数据结构保存下来在本地处理。信号数据结构简化了一下,看起来像这样,portCap的长度是动态的,band的长度也是动态的。
: typedef struct bandType
: {
--
FROM 111.201.51.*
我们可以看到原始的定义文件,但是跟我们的代码分开管理的,我们适配好之后就以我们的结构为准了,一般不会去看他们的结构定义了。其实问题最终可以归结为我前面几楼提出的一个面试题,也就是对结构体语义的理解,给定我同事的这样一个结构体,没有其他信息,你是看成静态数据结构还是动态数据结构?
- 来自 水木社区APP v3.4.4
【 在 gluon521 的大作中提到: 】
你前面定义只有一个PortCapT, 后面肯定是PortCapT[0]啊。
后面的也许是你预留或者干嘛,反正取只能取第一
- 来自 水木社区APP v3.4.4
--
FROM 223.104.215.*
根据我多年的经验,我不会只看数据结构就瞎猜。
会结合上下文逻辑和运行时调试结果,最终得出一个结论。
尤其是有文档说明的情况下,会先看文档。但也不会无条件相信文档。
【 在 flyren911 的大作中提到: 】
: 我们可以看到原始的定义文件,但是跟我们的代码分开管理的,我们适配好之后就以我们的结构为准了,一般不会去看他们的结构定义了。其实问题最终可以归结为我前面几楼提出的一个面试题,也就是对结构体语义的理解,给定我同事的这样一个结构体,没有其他信息,你是看成静态数据结构还是动态数据结构?
: - 来自 水木社区APP v3.4.4
:
: ...................
--
FROM 27.154.192.*