请查看以下代码:
考虑下面的代码:
#include <stdlib.h>
#include <signal.h>
#include <stdint.h>
#include <stdio.h>
uint64_t counter = 0;
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
void sig_handler(int signo) {
printf( "%" PRIu64 "\n", counter);
}
int main() {
struct sigaction act;
act.sa_handler = &sig_handler;
sigaction(SIGINT, &act, NULL);
for( ;; ) {
counter++;
}
return 0;
}
如果我使用-O0
编译代码,当我按下CTR+C时,可以看到计数器会递增。但是使用-O1
,这个过程被优化掉了。为什么会这样,我该如何避免这种情况?
volatile
关键字了。 - d33tahvolatile sig_atomic_t
пјҲжҲ–C++11дёӯзҡ„std::atomic
зұ»еһӢд№ӢдёҖпјүж—¶пјҢжүҚиғҪи®ҝй—®е®ғ们гҖӮ - Kerrek SB