美文网首页
刷题No2 宏定义#define

刷题No2 宏定义#define

作者: mylocal | 来源:发表于2016-09-27 21:22 被阅读0次
    1. 宏定义:c++宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以只定的字符串来代替。
      带参数的宏定义的一般形式如下:#define <宏名>(<参数表>) <宏体>
      <宏名>是一个标识符,<参数表>中的参数可以是一个,也可以是多个,视具体情况而定,当有多个参数的时候,每个参数之间用逗号分隔。<宏体>是被替换用的字符串,宏体中的字符串是由参数表中的各个参数组成的表达式。
      例如:#define SUB(a,b) a-b
      如果在程序中出现如下语句:
      result=SUB(2, 3); 则被替换为:result=2-3;
      如果程序中出现如下语句:result= SUB(x+1, y+2); 则被替换为:result=x+1-y+2;
      在这样的宏替换过程中,其实只是将参数表中的参数代入到宏体的表达式中去,上述例子中,即是将表达式中的a和b分别用2和3代入。
      注意事项:
      1)<宏名>和<宏体>直接用空格分开,而不是等号连接
    1. 在书写带参数的宏定义时,<宏名>与左括号之间不能出现空格,否则空格右边的部分都作为宏体。
      例如:#define ADD (x,y) x+y
      将会把"(x,y)x+y"的一个整体作为被定义的字符串。
    2. 使用#define定义的标识符不是变量,它只用作宏替换,因此不占有内存。
    3. 如果某一个标识符被定义为宏名后,在取消该宏定义之前,不允许重新对它进行宏定义。取消宏定义使用如下命令:#undef<标识符>(标识符一般以大写表示,从而与变量名进行区分)
    4. 宏定义可以嵌套,已被定义的标识符可以用来定义新的标识符。
      例如:#define PI 3.14159265#define R 10#define AREA (PI*R*R)
    5. 宏定义的参数尽量添加括号,以避免产生上述现象。
    1. 用预处理指令#define声明一个常数,用以表面1年中有多少秒(忽略闰年的情况)。
      答案:#define SECONDS_PER_YEAR 60*60*24*365UL
      注意:不能将
      #define SECONDS_PER_YEAR 60*60*24*365UL 写成
      #define SECONDS_PER_YEAR (60*60*24*365)UL在
      编译GCC程序,提示这个错误 error: expected ‘,’ or ‘;’ before ‘UL’;是因为UL写在了括号外面,无法与数据进行匹配;

    相关文章

      网友评论

          本文标题:刷题No2 宏定义#define

          本文链接:https://www.haomeiwen.com/subject/kbfhyttx.html