码迷,mamicode.com
首页 > 其他好文 > 详细

20170426

时间:2017-04-26 18:12:33      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:local   strong   ifd   标识   定义   参数   font   字符   end   

如果一个里面需要经过复杂的处理才能得到一个结果数字,则这个宏必须写成一个表达式
  1 /*
  2     宏演示
  3  */
  4 #include <stdio.h>
  5 #define SQUARE(n)   ((n) * (n))
  6 int main() {
  7     int num = 4;
  8     printf("%d\n", SQUARE(++num));//((++num) * (++num)),第一个++num,num为5,第二个++num,num为6,然后相乘36
  9     return 0;
 10 }
结果:36
宏操作符包括#和##
#操作符可以把宏的一个参数转换成字符串字面值
  1 #include <stdio.h>
  2 #define STR(n)  #n
  3 int main() {
  4     printf("%s\n", STR(abc));
  5     return 0;
  6 }
  STR(abc)先替换成 #abc, 然后二次替换 "abc"
##操作符可以把一个代表标识符参数和其它内容合并形成一个新的标识符
  1 #include <stdio.h>
  2 #define LOCAL(n)    l_##n
  3 int main() {
  4     int LOCAL(num) = 0;
  5     printf("%d\n", LOCAL(num));
  6     return 0;
  7 }
LOCAL(num)先替换成l_##num,然后二次替换为l_num(##抛弃)

条件编译可以在编译时只编译某些语句而忽略另外一些语句
#ifdef(#ifndef) <宏名称>
    ...
#else
    ...
#endif
以上语句结构可以根据某个宏是否被定义过而从两组语句中选择一组编译
  1 /*
  2     条件编译
  3  */
  4 #include <stdio.h>
  5 int main() {
  6 #ifdef  ONE
  7     printf("1\n");
  8 #else
  9     printf("2\n");
 10 #endif
 11     return 0;
 12 }
如果定义了ONE的宏,执行第7行,否则执行第8行

#ifndef 表示没有定义过

#if        逻辑表达式
    ...
#elif    逻辑表达式(多个)
    ...
#else
    ...
#endif
以上结构可以根据任何逻辑表达式多组语句中选择一组编译
  1 /*
  2     折扣
  3  */
  4 #include <stdio.h>
  5 int main() {
  6 #if defined(FACTORY)
  7     printf("80%%\n");
  8 #elif !defined(FACTORY) && !defined(ELITE)
  9     printf("100%%\n");
 10 #else
 11     printf("120%%\n");
 12 #endif
 13     return 0;
 14 }

多文件程序编写时,某个函数必须属于某个文件,一个文件中可以包含多个函数
  1 /*
  2     多文件编程演示
  3  */
  4 #include <stdio.h>
  5 int add(int x, int y) {
  6     return x + y;
  7 }
  8
  9 int main() {
 10     printf("%d\n", add(3, 6));
 11     return 0;
 12 }

20170426

标签:local   strong   ifd   标识   定义   参数   font   字符   end   

原文地址:http://www.cnblogs.com/dongjian16/p/6769891.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!