C 这个代码片段是否定义良好?

C 这个代码片段是否定义良好?,c,gcc,armv7,C,Gcc,Armv7,在进行研究练习时,我偶然发现了以下为ARMv7体系结构编写的代码: register char* reg_r0 asm ("r0"); *reg_r0 = putch(*reg_r0); 包含此代码的函数由汇编程序例程调用,“r0”将包含指向某个静态变量的某些地址。代码是用gcc和-O0编译的,并按照您的预期工作(它将putch的返回值写入前面提到的静态变量)。按照惯例,返回值是在R0中返回的,因此我想知道在putch返回后,是否有编译器可以取消引用并写入reg\u R0中包含的地址,如果返回

在进行研究练习时,我偶然发现了以下为ARMv7体系结构编写的代码:

register char* reg_r0 asm ("r0");
*reg_r0 = putch(*reg_r0);

包含此代码的函数由汇编程序例程调用,“r0”将包含指向某个静态变量的某些地址。代码是用gcc和-O0编译的,并按照您的预期工作(它将
putch
的返回值写入前面提到的静态变量)。按照惯例,返回值是在R0中返回的,因此我想知道在
putch
返回后,是否有编译器可以取消引用并写入
reg\u R0
中包含的地址,如果返回值不是您应该写入的地址,则会导致访问冲突

它使用编译器扩展,因此不,它不能由C标准很好地定义。如果必须使用完整的汇编函数而不是内联汇编函数或-best-C,则必须符合ABI。您的意思是除了
putch(*reg\u r0)
的“取消引用未初始化变量”方面之外,这绝对是未定义的C行为?@不太像,好的观点。既然你这么说了,我也明白了。@Olaf谢谢,我就是这么想的,只是想听听其他的意见。