基本语法特性
#ifndef #define #endif条件编译
含义
#ifndef预处理指令:如果宏没有定义,则编译下面代码
格式
格式是这样的:
#ifndef <标识>
#define <标识>
……
#endif
作用
防止头文件被重复引用
无名命名空间
标准C++引入命名空间,除了可以避免成员的名称发生冲突之外,还可以使代码保持局部性,从而保护代码不被他人非法使用。如果你的目的主要是后者,而且又为替命名空间取一个好听、有意义、且与别人的命名空间不重名的名称而烦恼的话,标准C++还允许你定义一个无名命名空间。你可以在当前编译单元之中(无名命名空间之外),直接使用无名命名空间中的成员名称,但是在当前编译单元之外,它又是不可见的。
格式
namespace {
int a;
void f(){/*...*/}
}
等价于
namespace $$$
{
int a;
void f(int a){/* */}
}
using namespace $$$;
其中$$$由编译器指定。
使用示例
#include <iostream>
using namespace std;
namespace
{
int a=0;
void f(int a){
cout << "the value of a is : "<< a << endl;
}
}
int main()
{
f(a+1);
return 0;
}
输出
the value of a is : 1
编译构建
make和make clean
make之前使用make clean清除之前的编译结果,否则某些代码修改不会同步!
sprintf和strcpy的区别
sprintf 跟printf 在用法差不多,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。
sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] … );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。
注:错误用法sprintf(destination, source),如果source包含%s等格式化参数,但是source对象
字符串函数- strcpy
原型:extern char *strcpy(char *dest,char *src);
用法:#include