C++知识点分享009 C++中的C,掌握基本的语法、运算符及其优先级

微信公众号: 星点课堂

新浪微博:女儿叫老白

网易云课堂:女儿叫老白

-------------------------------------------------------------------------------

说到C++中的C,我一下想到的就是extern C。用途是zaidll中声明一个动态引出接口,当程序运行时可以动态加载该dll,搜索其中的引出接口,并且进行调用。比如:

// header.h of dll

extern "C"

{

       CExport_TablePlugin  IPluginEntry* createEntry();

};

 

// imp.cpp in dll

extern "C"

{

       /// 创建插件实体

       CExport_TablePlugin IPluginEntry * createEntry()

       {

              return new CTablePlugin();

       }

};

上述代码中,在header.h中声明了dll的一个引出接口createEntry(),它返回一个IPluginEntry*类型的指针。在imp.cpp中提供了该引出接口的实现。

 

       在其他代码中,就可以用库函数加载该dll,然后搜索解析该接口,并调用。

       基本的语法中,需要提醒大家的是goto语句,一定要慎用。因为他可能导致意想不到的跳转,进而引发未知错误。

       定义完变量,请一定要初始化呀。

       运算符及其优先级是经常用到的C++技术。但是我们可能不太容易把运算符的优先级记得这么清楚。因此,小编推荐用括号来明确指定优先级。举一个简单例子:

       a = b>c ? b : c;

       最好改为:

       a = (b>c?b:c);

       否则,编译器会识别为:

       (a=b) ?> c ? b : c;

       那就错啦。

       自增和自减操作,是经常用到的。我们也可以把它用在迭代器上,比如:

       vector<int>::iterator ite = v.begin();

       for (; ite!=v.end(); ite++) {

       if ((*ite) == 3)       {

              v.erase(ite++);

} else {

       ite++;

}

}

上述语句就充分利用了自加操作的语法特性。自加操作是先取变量值,后进行自加。因此,取出迭代器的值进行使用后,再对迭代器自加,就可以在删除迭代器当前指向的成员后,仍能够保持迭代器指向正确的成员。

基本数据类型中,比较难学的就是指针。在通过函数参数传入指针,并希望在函数内部修改指针指向的地址时,一定要记得取指针地址传入吆。

指针和引用在执行功能上类似。不同之处是引用是对象看上去更易懂,而使用指针的话,就要使用->语法,使得代码看上去有点不太易懂。

全局变量与局部变量:在函数体外部定义的变量默认是全局的。除非我们加上static修饰,这时它就变成局部变量了(也就是仅在本cpp内可见)。被声明为static的变量,在其他cpp中即使用extern声明,编译器也无法找到它,因为它是局部的。

我们可以用define语句来定义常量,但是如果有错误,编译器是无法在编译期间发现错误的,需要等到运行时,但是那就晚了。因此,小编倾向于使用常量变量来定义常量值。比如

#define  PI 3.1415927

可以改为:

static double s_PI = 3.14159278.f;

 

这样,在代码中使用s_PI,效果上与宏定义是一样的。

 

我们可以用#ifdef DEBUG来进行预处理判断,以便在程序编译期决定代码的运行走向,当然也可以在程序运行期决定,比如可以通过main()函数的入口参数决定

 

int main(int argc, char * argv[]) {

    bool bDebug = false;

       for (int i=0; i<argc; i++) {

       if (string(argv[i] == “--debug”) {

              bDebug = true;

}

}

if (bDebug) {

……

}

}

猜你喜欢

转载自blog.csdn.net/baizy77/article/details/82320831