#include<stdio.h>
#define TEST
//#开头 以if开头 必须以endif结尾
#ifdef TEST
void print_message()
{
printf("这里是定义的\n");
}
#else
void print_message
{
printf("这里是未定义的\n");
}
#endif
int main(int argc,char const *argv[])
{
print_message();
return 0;
}
结果:
gcc -E con.c //用于查看编译过程
它只加载了”这里是定义的“这段代码,并没有加载”未定义“else中的代码,然后我们再下面加上#undef TEST
#include<stdio.h>
#define TEST
//取消已经定义的宏
#undef TEST
//#开头 以if开头 必须以endif结尾
//#ifdef if defined如果已经定义
//#ifndef if not defined如果尚未定义
#ifdef TEST
void print_message()
{
printf("这里是定义的\n");
}
#else
void print_message
{
printf("这里是未定义的\n");
}
#endif
//这里是条件起始,必须加上条件,否则会导致预编译错误,其实是语法错误
#if 1
int a=100;
//如果前一个宏不成立,才会处理下面的,此时如果没有规定成立条件,会导致报错
#elif //else if 需要加条件
int a=1000;
#else
int a =10000;
#endif
//一般来说,对于代码当中尚未开发完成的代码,而又可能会导致一些不可预见的问题
//但是又不想让程序无法执行,可以加上这样一个宏定义,代表代码仍需处理
#warning 这里会出现什么问题
//之戒抛出一个预编译错误
#error 这里会出现错误吗?
//这个指令功能非常强大
//这个叫非致命性警告,只有添加了 gcc -Wall c.c才会编译时显示出来,-Wall表示warning all所有的警告
#pragma warning("这是什么?")
//显示一个信息
#pragma message("这是一段信息")
//内存对齐方式,括号内指定内存对齐的字节数,用在结构体会多一点
#pragma pack(3)
int main(int argc,char const *argv[])
{
print_message();
return 0;
}
结果: