2014-12-05 43 views
0

我不知道如何解释这个问题,所以我会举一个我期望做的例子。C - 放弃指针参数

我有一个函数从FIFO中获取下一个字节。

void fifoGet(uint8_t * byte) { 
    *byte = somefunction(); 
} 

我正在做一个函数来刷新FIFO

void fifoFlush(void) { 
    uint8_t i; 
    uint8_t discardByte; 

    for (i=0; i<fifoLength; i++) { 
     fifoGet(&discardByte); 
    } 

} 

什么我不知道,因为我不需要那么discardByte,可我避开分配内存,只是传递void指针指向fifoGet()?

喜欢的东西

void fifoFlush(void) { 
    uint8_t i; 

    for (i=0; i<fifoLength; i++) { 
     fifoGet(&void); 
    } 

} 
+0

没有你不能。在某些情况下,您会停止该程序。这是破坏性的。原来的方式是够好的。 – HuStmpHrrr 2014-12-05 19:14:51

回答

2

没有,空洞的方法会导致出现不确定的程序的行为,你会被提领指向未知的记忆。

您使用discardByte可能是最好的做法。

+0

'discardByte'具有函数作用域,所以当函数'fifoFlush'结束时它被释放 - 所以存储问题是没有意义的。 – 2014-12-05 19:12:15

+0

@ DavidC.Rankin它不是一个存储问题,我只是希望解决创建/处理变量的开销(无可否认)。 – user3817250 2014-12-05 19:16:16

+0

不是没有重构fifoGet – Bathsheba 2014-12-05 19:17:24

1

它不会采取太多的结构变更为:

uint8_t fifoGet() { 
    return somefunction(); 
} 

void fifoFlush(void) { 
    uint8_t i; 

    for (i=0; i<fifoLength; i++) { 
     fifoGet(); 
    } 

} 
+0

我同意,这将是如何处理我的具体例子,但在我的实际应用fifoGet()是在ROM中,不能被修改。我应该在问题中包括这一点。 – user3817250 2014-12-05 19:20:49

+0

从这个角度来看,为什么不让'fifoGet'返回'value'或'NULL'来允许'fifoflush(){while(fifoGet()!= NULL); }(这是对HuStmpHrrr的回应),你的ROM改变了一切。您可以将最后一个元素设置为'sentinel元素'设置为'NULL'并保留指向'fifo'的指针,该指针将清空可指向最后一个元素'NULL'。 – 2014-12-05 19:21:56

+0

@ DavidC.Rankin我不能同意这一点。什么阻止'fifoGet'返回有效的'0'?将不同类型的值绑定到一个返回类型的函数并不酷。 – HuStmpHrrr 2014-12-05 19:35:05