LOG巨集的引數問題

syrchina發表於2018-07-26

如下定義LOG巨集:

#include <stdio.h>
#define DBG_LOG	printf

int main(int argc, char *argv[])
{
	int x = 9;
	DBG_LOG("x=%d\n", x=(x>5?6:4));
	printf("x=%d\n", x);
	return 0;
}

想在某模組中取消LOG巨集:

#include <stdio.h>
#define DBG_LOG	printf
#undef DBG_LOG
#define DBG_LOG
int main(int argc, char *argv[])
{
	int x = 9;
	DBG_LOG("x=%d\n", x=(x>5?6:4));
	printf("x=%d\n", x);//x == 6, 說明上面的巨集引數列表仍被執行
	return 0;
}

防止#undef的巨集引數列表被執行的方法:

#include <stdio.h>
#define DBG_LOG(...)	printf(__VA_ARGS__)
#undef DBG_LOG
#define DBG_LOG(...)	//printf(__VA_ARGS__)
int main(int argc, char *argv[])
{
	int x = 9;
	DBG_LOG("x=%d\n", x=(x>5?6:4));
	printf("x=%d\n", x);//x == 9
	return 0;
}

 

相關文章