C - 基础 - C预处理器和C库

#define

#include <stdio.h>

#define TWO 2
#define OW "woow"
#define FOUR TWO * TWO
#define PX printf("X is %d \n",x) // 宏 定义函数
#define FMT "X is %d \n"	// 定义格式模版
#define SQUARE(X) X*X	// 带参数宏
#define XNAME(n) x ## n	// ## 运算符
int main(int argc, char *argv[])
{
	int x = TWO;
	PX;
	x = FOUR;
	printf(FMT, x);
	printf("square(2) is %d \n", SQUARE(2));
	char * XNAME(4) = "x4";
	printf("预处理器粘合剂 ##运算符:%s .\n", XNAME(4));

	return 0;
}


其他指令

#include <stdio.h>

#pragma c9x on // 编译器设置都可以定义 强大到没朋友
#define TWO 2
#undef TWO // 取消宏
#ifdef TWO	// 条件编译 相反为 #ifndef
#define TWO 23
#else
#define TWO 3
#endif 
int main(int argc, char *argv[])
{
#ifdef TWO
	printf("TOW is %d \n", TWO);
#endif // TWO

#if TWO == 3    // 条件判断
	printf("oh , 3 \n");
#elif TWO ==2
	printf("oh , 2 \n");
#endif
	return 0;
}

内联函数

就是不需要声明,直接定义然后调用的使用inline修饰函数,无法获取地址,可放在头文件供外部调用。
相当于将方法体拷贝到调用处。

C库

数学库 math.h

#include <stdio.h>
#include <stdlib.h>
#include <math.h>   // 数学库
void bye();
void print_array(const int array[] , int size);
int my_compar(const void * p1, const void * p2);    // 自定义 排序比较器
int main(int argc, const char * argv[]) {
    atexit(bye); // 程序结束时回调函数
    double angle = 30.0 * 3.14/180; // 角度是这么定义的。。要跪
    double x = sin(angle);
    printf("sin(%f) = %0.2f \n",angle,x);
  
    int array[3] = {4,2,3};
    print_array(array,3);
    int (* fp)(const void *, const void *)  = my_compar;
    qsort(array, 3, sizeof(int),fp); // 排序,传入自定义比较器
    print_array(array,3);
    return 0;
}
void bye()
{
    printf("bye \n");
}
int my_compar(const void * p1, const void * p2)
{
    const int * p3 = (const int *)p1;
    const int * p4 = (const int *)p2;
    if(*p3 > *p4)return 1;
    else if(*p3 < *p4)return -1;
    else return 0;
}
void print_array(const int array[] , int size)
{
    for(int i = 0 ; i < size ; i++)
    {
        printf("%d",array[i]);
    }
    printf("\n");
}

string.h库中的内存拷贝函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 3
void print_array(const int array[] , int size);
int main(int argc, const char * argv[]) {
    int array[SIZE] ={2,1,3};
    int target[SIZE];
    print_array(array,SIZE);
    memcpy(target, array, SIZE * sizeof(int)); // 内存拷贝,若要考虑重叠则使用memmove
    print_array(target, SIZE);
    return 0;
}

void print_array(const int array[] , int size)
{
    for(int i = 0 ; i < size ; i++)
    {
        printf("%d",array[i]);
    }
    printf("\n");
}
posted @ 2017-05-14 09:03  张狂莫怪  Views(140)  Comments(0Edit  收藏  举报