精华内容
下载资源
问答
  • C和C++混用

    千次阅读 2010-04-16 15:55:00
    Yes, C和C++混用的确是natural,毕竟绝大多数C++学习者都从C学起,C++兼容C就是为了降低学习门槛。但是C和C++混用却不一定是necessary。 我们把C和C++归为一类,通常写作C/C++,那是因为从语言角度讲C的问题就是C++...

    Yes, C和C++混用的确是natural,毕竟绝大多数C++学习者都从C学起,C++兼容C就是为了降低学习门槛。但是C和C++混用却不一定是necessary。 我们把C和C++归为一类,通常写作C/C++,那是因为从语言角度讲C的问题就是C++的问题,但是反过来就不成立,因此具体到某个工程的时候,你在开工之前就必须决定到底使用C还是C++,或者说到底是面向过程还是面向对象。当然,上面两种说法都不正确,因为C并不一定就是面向过程,C++也并不一定就是面向对象。不过面向过程的设计已经不适应潮流了,因此准确的提问应该是:到底使用C风格(以函数为元素)的面向对象还是C++风格(以类为元素)的面向对象。 在系统设计阶段就必须确定设计风格,因为这很重要,关系到代码的样式、兼容性、可移植性,风格的选择依据就是你手头的库,看你手头上能够使用的库有哪些,以哪一个库为基准,以及开发进度要求,这些因素必须平衡考虑,不能顾此失彼。 如果只是开发一个小程序(就是类似那种用C++Builder或者Dephi可视化功能再加上一些控件组装出来的程序),那么把各个能够使用的库糅合起来就可以了。 如果是一个大的需要持久维护的工程,就必须考虑库与库之间的兼容性、效率、耦合度。所谓兼容性就是这个库的概念(包括你所知道的任何能够保存的量)能否传递给另外一个库直接使用;所谓效率,就是不能直接传递的概念是必须转换的,这个转换的花费是高还是低;所谓耦合度,就是当需求按照预期变化的时候(如果系统设计师没有考虑这一点的话,那么他应该下岗了)你能否轻松的转换接口或者库(接口是外部的,库是内部的)。 很显然,如果你直接把所有能用的库糅合起来的话,虽然兼容性和效率在绝大多数情况下符合要求,但是耦合度这一关就很难过了。当你发现某个库不能满足需求了,必须转换到另外一个库的时候,你就追悔莫及了。因此直接耦合肯定是不行的,必须转换接口和概念(接口是外部的,概念是内部的),类似于《Design Patterns》里面介绍的Adapter模式,许多读过这本书的人一定对基于接口的Adapter影响深刻,但似乎很少有人注意到包括Adapter模式在内的其他模式都可以适用于范型,而范型是内部概念转换的最好方法。 所以说,你在一个工程里面使用多个风格迥异的库完全可行,但是最好不要直接使用,要学会偷换概念或者通过分层设计以降低对外来代码(就是说不是你写的代码)的依赖性,同时还可以保证自己的代码风格一致。(STL把C标准库的函数inline到std名字空间下,VCL则把STL中的容器从std名字空间中释放出来,顺便更改命名风格,这都是偷换概念和分层设计的方法)。虽然我还没有参加工作,但是根据我的所见所闻,好的代码风格和低耦合度对于工程来讲是非常重要的,前者是软件工程师的必备技能,后者是系统设计师所追求的目标之一。

    展开全文
  • C和C++混用中出现的问题

    千次阅读 2011-12-04 00:32:36
    今天由于项目的需要,所以在尝试模拟实现C++的反射机制。其实比较简单,就是类似于MFC那样的机制,用一些宏定义使得类能够通过类名来创建。当然由于实际需求使用了全局map类。  由于之前对宏的使用不是很熟悉,...

        今天由于项目的需要,所以在尝试模拟实现C++的反射机制。其实比较简单,就是类似于MFC那样的机制,用一些宏定义使得类能够通过类名来创建。当然由于实际需求使用了全局map类。

       由于之前对宏的使用不是很熟悉,今天在把侯捷的《深入浅出MFC》翻看了一下,重点看来RTTI那一张。利用宏将这些机制模拟了出来,但是在测试的时候,发现MyRuntimeClass.stype输出总是为null,stype是MyRuntimeClass的一个成员变量,是一个string类型的数据。由于当时对宏还不是很熟悉,所以一直怀疑自己是不是在哪个地方出现了问题,一直没有想过是因为混用了C和C++的问题。我的输出测试语句是:

       printf("%s\n",CMyObject::CMyObjectName.stype);

    各种测试,甚至让我怀疑类的static变量的初始化方法。最后花费了很大的时间才总算知道是因为printf是C语言的方法,不知道string这个类的解析方式,所以输出的结果是null,如果将代码的输出方式改为:

      printf("%s\n",CMyObject::CMyObjectName.stype.c_str());

    则会出现想要的结果。

      感慨一下自己的粗心,同时感叹一下MFC框架其实本身还是很牛逼的,宏定义用的相当娴熟,侯捷先生的这本书看来还要再好好看看啊。

     

    展开全文
  • [C++]C和C++混用

    千次阅读 2017-02-22 13:53:15
    C和C++混用

        C和C++语法上有很多相同的地方,但是两种语言混合编程是有问题的。例如,在C中,函数set被编译器翻译成 _set,就是说在链接查抄是,使用的是_set这个名字找到的set函数。而C++中,由于函数重载特性,编译器在函数名的翻译中,需要使用函数具体使用的参数类型,例如set(int)函数,会被翻译成_set_i, set(double)会被翻译成_set_d。

        如何在C++使用C函数了?

        需要明确指明用C的命名方式查找函数,只需要在函数声明中用 extern "C",即可,例如 extern “C” void set(int count);表示用C的函数名查找方式。

    展开全文
  • C和C++源文件混用问题

    2021-04-17 10:46:35
    1、C和C++源文件混用问题,以及LNK4042错误 //math.h #pragma once extern "C" int add(int, int); int ave(int, int); //math.c int add(int a, int b) { return a + b; } //math.cpp int ave(int a, int b) { ...

    1、C和C++源文件混用问题,以及LNK4042错误

    //math.h
    #pragma once
    extern "C" int add(int, int);
    int ave(int, int);
    //math.c
    int add(int a, int b)
    {
    	return a + b;
    }
    //math.cpp
    int ave(int a, int b)
    {
    	return(a + b) / 2;
    }
    //main()
    #include<iostream>
    #include"math.h"
    int main()
    {
    	int a = 1, b = 2;
    	std::cout << add(a, b) << std::endl;
    	std::cout << ave(a, b) << std::endl;
    }
    //代码不能被编译
    error LNK2019: 无法解析的外部符号 "int __cdecl ave(int,int)" (?ave@@YAHHH@Z),函数 _main 中引用了该符号
    //原因:同时生成两个math.obj文件
    //解决方案:将其中的一个.c或者.cpp改个名字即可编译成功(例如:_math.cpp)
    
    展开全文
  • C,C++如何OC混用

    2017-03-03 17:33:39
    1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj-c的代码,因为cpp只是cpp  ...
  • OC和C++混用2

    2013-11-25 21:39:00
    苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C++...Objective-C和C++混编的要点 在 Objective-C++中,可以用C++代码调用方法也可以从Objective-C调用方法。在这两种语言里对象都是指针,可以在任...
  • OC和C++混用1

    2013-11-25 21:28:00
    /*在混用之前需要做一步非常重要的事:不是代码而是编译器选项,在做混合编译之前一定要把编译器的Compile Sources As选项改为Objective C++。 修改方法: target->BuildSetting->Apple LLVM compiler 4.0...
  • CC++文件的相互引用

    2017-02-11 00:34:39
    C和C++混用的方式
  • C++中有引用,写出来很简单,下面给出的是天勤数据结构高分笔记上面的写法(疯狂吐槽这种C和C++混用的方法) #include<iostream> #include<stdlib.h> using namespace std; typedef struct LNode { ...
  • c : 使用 c compile,可以在info-build里面设定使用的标准,默认是c99 cpp : 使用c++ compile m :使用objective-c compile mm : 同时支持obj-c和 c++   2) 如果cpp文件中包含了obj...
  • 如果程序的某处需要一个C风格字符串,无法直接用string对象来代替它。如: string s (“leo”); char *str = s; //错误:不能用string对象初始化char *   为了完成该功能,string专门提供了一个名为c_str的...
  • C和OC如何混用

    千次阅读 2014-05-30 14:10:19
    1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj-c的代码,因为cpp只是cpp  ...
  • c和oc如何混用

    2016-07-17 00:16:39
    1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj- c的代码,因为cpp只是cpp。
 2) 在mm...
  • c和obj-c如何混用?

    2016-03-18 11:18:00
    1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj- c的代码,因为cpp只是cpp。
 2) 在mm...
  • native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来...
  • C和obj-c 如何混用

    2014-04-10 20:19:56
    1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj-c的代码,因为cpp只是cpp ...
  • c和obj-c如何混用

    千次阅读 2013-08-01 12:12:53
    1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码, 处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj- c的代码,因为cpp只是cpp ...
  • #ifndef DATATABLE_H ...大家好,最近开始学容器迭代器,发现了一个奇怪的问题,就是明明没有declare任何函数或变量是const,然而编译器却说无法转换,会不会是有些隐式转换我没有意识到啊?谢谢大家
  • c和obj-c如何混用

    千次阅读 2016-05-19 16:53:23
    1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-ccc++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj-c的代码,因为cpp只是cpp ...
  • [转]C和OC如何混用

    千次阅读 2015-07-22 22:38:29
    1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj-c的代码,因为cpp只是cpp  ...
  • obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码, 处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj- c的代码,因为cpp只是cpp ...
  • *===============================================================...* Copyright (C) 2013 All rights reserved. * * 文件名称:StringProcess.cpp * 创 建 者: * 创建日期:2013年04月24日 * 描 述: * ...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 214
精华内容 85
关键字:

c和c++混用

c++ 订阅