小编Osa*_*aid的帖子

函数原型是否应始终位于其头文件中?

比方说,我们有几个C源文件,如file1.c,file2.cmain.c.我们的功能如下:

file1.c
      |---> file1Func1()
      |---> file1Func2()

file2.c
      |---> file2Func1()
      |---> file2Func2()
Run Code Online (Sandbox Code Playgroud)

并且主文件使用这些功能.现在,很自然,我创建并在头文件中添加相应的函数原型file1.hfile2.h,然后在包括这些头main.c使用该功能.

如果我有一个包含超过一千个源(C)文件的非常大的项目,我应该总是为每个源文件创建一个标题(然后添加函数原型).然后包括使用函数的标题?

或使用EXTERN使用别处定义的函数(在其他一些源文件),并依靠链接程序搜索,并在链接时获取从对象文件中的函数?

注意:使用后一种方法会触发没有函数原型的MISRA警告.

c prototype header misra extern

5
推荐指数
2
解决办法
2737
查看次数

为什么微秒时间戳使用(私有)gettimeoftheday()即epoch是重复的

我使用gettimeofday()连续打印微秒.如在程序输出中给出的那样,您可以看到时间不是更新的微秒间隔,而是某些样本的重复时间,然后增量不是以微秒为单位,而是以毫秒为单位.

while(1)
{
  gettimeofday(&capture_time, NULL);
  printf(".%ld\n", capture_time.tv_usec);
}
Run Code Online (Sandbox Code Playgroud)

节目输出:

.414719
.414719
.414719
.414719
.430344
.430344
.430344
.430344

 e.t.c
Run Code Online (Sandbox Code Playgroud)

我希望输出顺序递增,如,

.414719
.414720
.414721
.414722
.414723
Run Code Online (Sandbox Code Playgroud)

要么

.414723, .414723+x, .414723+2x, .414723 +3x + ...+ .414723+nx
Run Code Online (Sandbox Code Playgroud)

当我从capture_time.tv_usec获取它时,似乎没有刷新微秒.

================================= //完整计划

#include <iostream>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <stdio.h>

#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
  #define DELTA_EPOCH_IN_MICROSECS  11644473600000000Ui64
#else
  #define DELTA_EPOCH_IN_MICROSECS  11644473600000000ULL
#endif

struct timezone 
{
  int  tz_minuteswest; /* minutes W of Greenwich */
  int  tz_dsttime;     /* type of dst correction */
};

timeval capture_time; …
Run Code Online (Sandbox Code Playgroud)

c++ performance time timestamp epoch

2
推荐指数
1
解决办法
1216
查看次数

当作为参数传递时,更新函数中的指针地址.[在C中将指针作为参考传递]

CONCEPT:通过引用传递指针

试图实现:从函数获取更新的指针地址,作为参数传递时.

int main(void)
{
    uint8_t unArray[10] = {0};  // unint8_t is type def as unsigned char
    uint8_t * pmyPtr;

    pmyPtr = unArray;

    func(pmyPtr);

    *pmyPtr = someValue3; 

}

void func(uint8_t * unPtr)
{
    *unPtr = someValue1;
     unPtr++;
    *unPtr = someValue2;  
     unPtr++;  

}
Run Code Online (Sandbox Code Playgroud)

假设我们的unArray地址为0x0001000.所以pmyPtr将为0x0001000分配一个常量指针.

当指针传递给函数func时,一些索引(前两个)由DE引用更新.

当我在func执行后回到main时,我正在尝试更新第三个索引.如何实现这一目标.我有一种预感,即双重引用可能很方便.

c embedded pointers pass-by-reference dereference

1
推荐指数
1
解决办法
148
查看次数