了解c语言的条件编译2

简言

  了解c语言的条件编译1 条件编译还是有很多东西要学.

条件编译 走起

1. #pragma once 对单个c文件只包含一次,多个c文件无效

// once.h
#pragma once
int a;

//main.c
#include <stdio.h>
#include "once.h"
#include "once.h"


int main(int argc, char *argv[])
{
	return 0;
}

2. #pragma comment 连接自定义库 可以用相对路径和绝对路径

#pragma comment(lib,"test.lib")

3. #pragma warning

//可以禁用某个警告
#pragma warning(disable:4996)
//只提示一个错误
#pragma warning(once,4996)
//将警告提示改为错误提示
#pragma warning(error:4047)
//默认
#pragma warning(default:4007)
//多个处理
#pragma warning(disable:6996;error:4047)

//让一个或多个warning进栈
#pragma warning(push,)
#pragma warning(push)
#pragma warning(disable:4996)
//让无效警告出栈
#pragma warning(pop)

#pragma pack 让字节对齐

//让内存字节对齐,可以节约内存 参数只能是1,2,4,8,16
#pragma pack(4)		//4字节对齐

内置宏

 ANSI标准说明了五个预定义:
  1. __LINE__
  2. __FILE__
  3. __DATE__
  4. __TIME__
  5. __STDC__
用这几个宏,可以很方便的去实现assert,具体还是看代码吧
#define ASSERT(x)		\
	if((x))			\
        {			\
		printf("所在文件%s\n",__FILE__);			\
		printf("所在行号%d\n",__LINE__);			\
		printf("所在函数%s\n",__FUNCTION__);	        \
		printf("编译时间%s\n",__TIME__);			\
		abort();				        \
	}

int main(int argc, char *argv[])
{
	int nunA = 1;
	ASSERT(nunA!=0);

	system("pause");
}

效果图


秋风 2016-08-21