c++学习笔记九

 程序文件和预处理指令
   1 程序文件
      头文件:类型定义和其他用于程序中一个或多个源文件的代码 后缀名为:.h
      源文件:要编译成机器指令的代码  后缀名为:.cpp  .c  .cxx
  
       引入头文件 代码格式如下:
            #include<iostream>
    
      名称的作用域
      
      程序文件的连链接
            确定名称的链接属性
                    内部链接属性  可以在同一个转换单元的任何地方访问
                    外部链接属性  同上,还可以在别外一个转换单元中访问
                    没有链接属性  只能在该名称的作用域中访问
      外部名称 
             如果想访问当前转换单元外部的变量,代码如下:extern 类型 变量名
             迫使const变量具有外部链接属性
                 例如:fun1.cpp 有如下定义 const int num1=100;
                                           const int num2=200;
                       fun2.cpp 就不能访问以上变量
                       如想访部就必需用extern重写这两个属性
                                           extern const int num1=100;
                                           extern const int num2=200;
                       这样fun2.cpp就可以通过如下代码进行访问
                                            xtern const int num1;
            extern const int num2
     2 命名空间
         代码格式如下:using namespace std;
           全局命名空间
           定义命名空间 (main应放在所有命名空间的外部)
              代码如下:
                       namespace myRegion{
//content
}
           使用using声明命名空间 using namespace::identifier
           函数和命名空间
               代码如下(以下文件可以放在头文件中 temp.h):
                       namespace test{
                                       double max(const int x,const int y);
      double min(const int x,const int y)
                                      }
                使用时需要将头文件引入: #include "temp.h"
          函数模板和命名空间
            可在命名空间中定义函数模板
               例如:
                  namespace compare{
 template<class T>T max(const T * data,int size){
T result=data[0];
for(int i=0;i<size;i++){
if(result<data[i]){
result=data[i];
}
}
return result;
}               
                     }
           扩展命名空间
               例如:
                   namespace compare{
                   
                      }
                   namespace compare{
                   
                      }
                第二个模板为第一个模析的扩充
            未指定名称的命名空间 
                    namespace{}
            命名空间的别名
                    namespace 别名=原来的命名空间名称
           嵌套的命名空间
                    namespace temp1{
                      namespace temp2{}
                     }
       3 预处理器  是编译器的一个组成部分,是在.cpp源文件编译成机器码之前执



           指令                             功能
        #incluce                       支持包含头文件
       ===========================================================
        #if                            允许条件编译
        #else                          同上配对
        #elif                          #else #if
        #endif                         标记#if指令结束
        #if defined(#ifdef)             如果定义了一个符号,就执行操作
        #if ! defined(#ifndef)         如果没有定义一个符号就执行
        ==============================================================
        #define                        定义一个符号
        #undef                         删除一个符号
        ===========================================================
        #line                          重新定义当前行号和文件名
        ============================================================
        #error                         输出编译错误消息,停止编译
        ============================================================
        #programe                      提供机器专用的特性,同时保证与c++的完


全兼容  
        程序中的置换   #define PI=3.1415926 (不支持类型检查,不考虑作用域,


符号名不能限制在一个命名空间中)
        从程序中删除标志  #define PI (不给初值)
        取消宏名定义 #undef PI
        宏置换 #define Print(var) cout<<(var)<<endl
        放在多行中的预处理器指令 
               示例代码: #define PI=(x*y)\
                                           (x/y)
        把字符串作为宏参数 #define MYSTR "this is a string"
        在宏表达式中连接参数#define join(a,b) ab 或者是  #define join(a,b) 


a##b
        逻辑预处理器指令
              逻辑#if指令 使用方式有两种:一种是测试一个符号是否用#define定


义过
                                         另一种是测试某个常量表达式是否为真
               示例代码头: #if
                           #endif 
               测试特定的指令: #if CPU==PENTIUM4
                               #endif
               多个代码块选择:#if 
                              #else
                              #endif
               标准的预处理器宏:
===========================================================================


=          宏名    |                    说明
===========================================================================


=
   _LINE_        |   当前源文件中的代码行号 十进制
===========================================================================


=
   _FILE_        |   源文件的名称
===========================================================================


=
   _DATA_        |   源文件的处理日期
===========================================================================


=
   _TIME_        |   源文件的编译时间
===========================================================================


=
  _STDC_         |   如果编译器选项设置为编译标准的c代码,就定义他否则不定义
===========================================================================
  _cplusplus     |
===========================================================================


=


      #error和#pragma指令
        #error一般是在某个测试条件后执行
        #pragma实现预定义好的选项
   


       4 调试方法
             集成调试器功能:
                   跟踪程序流
                   设置断点
                   设置观察窗口
                   检查程序元素
             调试中的预处理指令
             使用assert宏:在头文件<cassert>中定义         
             关闭断言机制    在程序的开始定义#define NDEBUG  
posted @ 2012-09-20 23:14  retacn_yue  阅读(109)  评论(0编辑  收藏  举报