考虑此代码,该代码将在PIC32上编译(来源:openscope-mz)
static uint32_t tSLoop = ReadCoreTimer();
static inline uint32_t ReadCoreTimer(void)
{
uint32_t coreTimerCount;
__asm__ __volatile__("mfc0 %0,$9" : "=r" (coreTimerCount));
return(coreTimerCount);
}
请解释为什么这是有效的C代码。
答案 0 :(得分:2)
否,这是无效的C代码,没有实现定义的扩展。静态变量的初始化必须是一个常量表达式。 specified是一个常量表达式-函数的结果不在该列表中。 C标准允许实现接受其他形式的常量表达式,因此,通过实现定义的扩展来接受此类语句,它可以是有效的C代码。无论如何,我怀疑这里不是这种情况。
行
static uint32_t tSLoop = ReadCoreTimer();
来自C ++文件LoopStats.cpp。
答案 1 :(得分:1)
这是有效的代码,因为它是C ++,而不是C。正如Kamil Cuk所指出的那样,该代码似乎来自a C++ file项目中的openscope-mz。 C ++允许这种类型的初始化程序,而C除了作为实现相关的扩展之外,其他都不允许。