#include <stdio.h>
#include "MyFile.h"
/** #define **/
//1、反斜线将定义延续到下一行 "\"
#define A "My First define is n\
ot so ha\
rd,And wh\
o they'er\n" //My First define is not so hard,And who they'er
//2、const 定义全局常量
const int b = 20;
//3、static 引用 define 作为数组长度
#define Num 50
static int d[Num];
const int f = 2*Num;
//错误
static int c[b]; //教程说是无效
const int e = 2*b; //教程说是无效
//4、宏重定义 macro redefined
#define Num2 2 * 3
#define Num2 2 * 4
#define Num2 2*3 //以最后一次定义为准
//5、带参数的 define
#define Num3(X) 2*X
//6、##运算符 把变量名粘合
#define Num4(n) x##n
//7、有返回值的宏
#define MAX(x,y) (x>y?x:y)
#define MIN(x,y) (x<y?x:y)
/** #undef **/
#define DE 10
#undef DE //取消宏定义
/** 条件编译 #ifdef #ifndef **/
//1、#ifdef 如果定义了
//#define MAVIX
#ifdef MAVIX
#define HOST "https://www.csdn.com"
#else
#define HOST "https://www.baidu.com"
#endif
//2、#ifndef 如果没有定义
#ifndef MAVIX
#define HOST2 "https://www.csdn.com"
#else
#define HOST2 "https://www.baidu.com"
#endif
/** #if #endif **/
#define IS_HOST 2
#if IS_HOST==1 //如果条件符合
#define HOST3 "https://www.csdn.com"
#elif IS_HOST==2
#define HOST3 "FUCK"
#else
#define HOST3 "https://www.baidu.com"
#endif
/** 配合 #if else 使用 #ifdef **/
//好处是可以配合 if elif else 使用
//#define TEST
#define TEST2
#if defined (TEST)
#define PRIF "TEST\n"
#elif defined (TEST2)
#define PRIF "TEST2\n"
#else
#define PRIF "FUCK\n"
#endif
/** 系统宏 **/
//时间 __TIME__
//日期 __DATE__
//当前源代码文件名 __FILE__
//当前源代码行号整型常量 __LINE__
//当前方法名 __func__
/** #line **/
#line 1000 //把当前行号重置为1000
#line 10 "mainn.c" //把行号重置为10,文件名重置为 mainn.c
/** #pramar **/
#pragma mark - massage
void codePring();
void codePring2();
void codePring3();
void codePring4();
void codePring5();
void codePring6();
int main(int argc, const char * argv[])
{
//#define
codePring();
//#undef
codePring2();
//条件编译
codePring3();
codePring4();
codePring5();
//系统宏
codePring6();
test2();
a = 1.0;
testNum = 10;
doit();
doit2();
return 0;
}
void codePring6()
{
printf("TIME==%s TIMESTAMP==%s\n",__TIME__,__TIMESTAMP__); //12:18:50
printf("DATE==%s\n",__DATE__); //May 31 2016
printf("LINE==%d\n",__LINE__); //143 行
printf("FILE==%s\n",__FILE__); ///Users/Apple/Desktop/精华/C/C语言预处理器(十五)/C语言预处理器(十五)/main.c
printf("func==%s\n",__func__); //codePring6 当前方法名 (预定义标识符,非预定义宏)
printf("FUNCTION==%s\n",__FUNCTION__); //codePring6 当前方法名
printf("amd64==%d\n",__amd64__); //1 当前系统是否支持64位 __amd64
printf("APPLE==%d\n",__APPLE__); //1 当前系统为苹果
printf("VERSION==%ld\n",__STDC_VERSION__); //199901 C99
printf("HOSTED==%d\n",__STDC_HOSTED__); //1 本机环境为1,否则为0
}
void codePring5()
{
printf(PRIF);
}
void codePring4()
{
printf("ISHOST? HOST3==%s\n %s",HOST3,__TIME__);
}
void codePring3()
{
printf("MAVIX? HOST==%s\n",HOST);
printf("MAVIX? HOST2==%s\n",HOST2);
}
void codePring2()
{
// printf("DE==%d\n",DE);
}
void codePring()
{
printf("%s\n",A);
puts("c==\n");
putchar(c[0]);
puts("c end\n");
printf("f==%d e==%d\n",f,e);
printf("Num2==%d\n",Num2);
printf("Num3==%d\n",Num3(10));
int Num4(1) = 10; // 相当于 x1 = 10
printf("MAX==%f\n",MAX(30, 30.11));
printf("MIN==%f\n",MIN(30, 30.11));
}