这个C++函数有什么作用?

Mar*_*gan -5 c++ volatile i2c

我需要点击一个I2C设备,我在维基百科上遇到了这个代码.

#define I2CSPEED 100

void I2C_delay(void) { 
  volatile int v;
  int i;

  for (i = 0; i < I2CSPEED / 2; ++i) {
    v;
  }
}
Run Code Online (Sandbox Code Playgroud)

我很困惑

v;
Run Code Online (Sandbox Code Playgroud)

确实.这延迟多久了?

Dav*_*rtz 5

可能这是一个访问volatile变量强制实际内存读取操作的平台.如果这是真的,那么循环可能至少需要100次内存读取.可能需要更长时间,具体取决于CPU的设计方式.

请注意,在典型计算机可能使用的大多数x86 CPU上,此处不会有实际的内存读取.但据推测,这可能就像Raspberry Pi一样.

包含相同代码Wikipedia页面清楚地表明它是伪C而不是您实际运行的代码,而是更多编写代码的指南.如果您实际上要使用此代码,则应该使用适合您平台的延迟函数替换该循环.