zoukankan      html  css  js  c++  java
  • c++ 预处理和多重替换

     预处理概念
     #include
     #defineextern
    
    一、 预处理概念
        
        在源代码编译成机器指令之前,都要进行预处理。
    预处理阶段一般会在编译之前处理和修改C源代码。完成预处理后预处理指令就会在源代码中删除,然后才开始编译阶段。
       注:预处理操作发生在编译之前。它们会修改程序语句,但不会被编译执行。
    二、#include
       #include<file.h>  //表示在默认路径中搜索file.h 并用file.h里的内容替换 #include<file.h>
       #include"file.h"  //表示在当前目录里搜索file.h 并用file.h里的内容替换 #include"file.h"
    三、#define
       #define filenaeme "test.txt" //在预处理时 用"test.txt" 替换所有filename  并且删掉此行
       #deinfe pi 3.1415926       //在预处时  用3.1415926 替换所有 pi        并且删掉此行
    四、 extern
       extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。(另外,在C++中extern也可用来进行链接指定。)
    
    如在a.c中定义过全局变量 int a要在hello.c中引用全局变量a则要作如下定义:
    extern int a;   
       仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。 
    
    如在a.c中定义过全局函数 int add(int a,int b)要在hello.c中引用函数add则要作如下定义:
    extern int add(int,int);   
       仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。 
    教学内容: 
     宏替换
     看起来像函数的宏
     多行上的预处理指令
     结合两个宏展开式的结果
     容易范错的宏
    
     
    一、 宏替换
          支持参数替换的#define指令,我们一般称为宏指令。它也属于预处理指令。
          例:
           #define print_int(i)  printf("%d
    ",i)
                
    二、 看起来像函数的宏
           #define add(a,b)    a+b
           #define mul(a,b)    a*b
           
    三、 多行上的预处理指令
        #define add(a,b)  
         a+b
        #define mul(a,b)  
         a*b
    
     
    四、 结合两个宏展开式的结果
        int my1=111;
        int my2=222;
        #define cat(a,b) a##b
       
       printf("%d,%d",cat(my,1),cat(my,2));
     
    五、容易范错的宏
        #define mul(a,b)    a*b
        mul(5,3-2) //按照一般的理解应该是5*(3-2)=1 实际上替换展开后是 5*3-2=13
       修改
        #define mul(a,b)    ((a)*(b))
  • 相关阅读:
    解决:Server IPC version 9 cannot communicate with client version 4
    解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
    hadoop解决windows下:Failed to set permissions of path: mp .staging to 0700
    find命令的使用
    linux解决端口冲突问题
    linux中实用的小工具lrzsz
    nginx常用命令
    编写测试用例的方法
    selenium之web自动化模拟操作(窗口,鼠标,键盘,js)
    什么是面向连接服务?什么是无连接服务?它们的区别是什么?
  • 原文地址:https://www.cnblogs.com/whzym111/p/6163819.html
Copyright © 2011-2022 走看看