C/C++学习笔记一(2006/11/14)
1、#ifndef:
指示符#ifndef用来检查头文件的内容是否在前面已经被定义
过,如果定义过,则#ifndef与#endif之间的语句将不被执行.所以
习惯上要把头文件的定义写在这两个语句之间.
如:对于MYHEAD.H这个头文件
#ifndef MYHEAD_H
#define MYHEAD_H
#include "myhead.h"
......
#endif
2、 #ifdef
指示符#ifdef常常被用来判断一个预处理器常量是否已被定
义,以便有条件地包含程序代码。
如:
int main()
{
#ifdef DEBUG
cout<<"Beginning execution of main()/n";
#endif
string word;
vector<string> text;
while(cin>>word)
{
#ifdef DEBUG
cout<<"word read:"<<word<<"/n";
#endif
text.push_back(word);
}
//.....
}
在此程序中,如果定义了DEBUG,则其中包含的两个语句都将被
执行,如果没有定义,则其中的两个输出语句不被执行。
编译C++程序时,编译器自动定义了一个预处理器名字__cpluspl
us(前面是两个下划线)
在编译标准C时,编译器自动定义了一个预处理器名字__STDC__
可以用此来区分是C还是C++程序
比较有用几个预定义名字:
__LINE__和__FILE__
__LINE__记录文件已经被编译的行数
__FILE__包含正在被编译的文件的名字
如:
if(element_count==0)
cerr<<"Error:"<<__FILE__
<<":line"<<__LINE__
<<"element_count must be non-zero./n";
__TIME__和__DATE__
__TIME__当前被编译文件的编译时间
__DATE__当前被编译文件的编译日期
格式 hh:mm:ss
如:
08:17:05 Oct 31 2006
assert 使用:
assert()是C语言标准库中提供的一个通用预处理器宏。常用其
来判断一个必需的前提条件,以便程序能够正确执行。与其关联
的头文件是:#include <assert.h>
如:
assert(filename!=0);
表示:如果后面的程序能够正确执行,需要filename不为0,如是
条件为假,即其等于0,断言失败,则程序将输出诊断消息,然后
终止。
其c++名字是:cassert
C库头文件的C++名字总是以字母C开头
注:在C++中使用C标准库中的头文件时,一定要使用using
namespace std;来使其处在一个名字空间中,才能正确使用,还
如:<bitset>
C++中的文件输入输出
头文件:#include <fstream>
使用文件输入输出实例:
#include <fstream>
//为了打开一个输出文件,先声明一个ofstream类型的对象:
ofstream outfile("name-of-file");
//为了测试是否已经成功打开了一个文件,如下判断:
//如文件不能打开值为false
if(!outfile)
cerr<<"Sorry! We were unable to open the file!/n";
//为了打开一个输入文件,先声明一个ifstream类型的对象:
ifstream infile("name of file");
if(!infile)
cerr<<"Sorry! We were unable to open the file!/n";
一个简单程序:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
ofstream outfile("out_file");
ifstream infile("in_file");
if(!infile){
cerr<<"error:unable to open input file!/n";
return -1;
}
if(!outfile) {
cerr<<"error:unable to open output file!/n";
return -2;
}
string word;
while (infile>>word)
outfile<<word<<' ';
return 0;
}
参考文献:
C++ Primer 3rd Edition