C++改写成C

1.注释问题,C语言中"//"注释是非法的,解决方法:换成/**/的形式


2.C语言中没有BOOL类型

      可以用int型替换

                     typedef int bool;
                     #define true 1
                     #define TRUE 1
                     #define false 1
                     #define FALSE 1

3.C没有内联函数"inline"


4.C语言中没有类

      解决方法:使用结构体代替,结构体不应具有成员函数,对于有继承关系的类,在命名方面可以采取一些有效的措施以方便进行改写,例如类C继承了类B,B又继承了类A,结构体C可以这样命名以体现继承关系: struct A_B_C{....},并以类似的命名方法处理虚函数。

      可以在结构体内添加一个指向自身的指针,通过向其他函数传递该指针以实现原有类的功能。

      另:注意某些用到了this指针的函数。

如果用到类继承,那就不要改程序了,C的结构不能继承的。最好看懂程序,用C重新编写。


5.C语言中没有重载

     解决方法:对一个函数的所有重载重新定义相应的拥有不同函数名的函数。如果你要改写的C++代码中充满了运算符重载,这将由其头疼。修改对应的函数时一定要仔细确认其传入的参数类型,以选择合适的替换函数。


6.C中函数的形参不能有默认值。例如声明函数时可能有如下错误:void func(int a=0);     /*ERROR*/  修改时有可能会修改到对应的该函数被调用处


7.变量需先声明再使用。下面的写法在C中是编译不通过的:

            int a;
            a=10;
            int b;              /*ERROR*/

     正确的写法应该是:
            int a;
            int b;
            a=10;

    注:for,if等块语句中声明是允许的,如下是正确的:

                  int a ;
                  a = 1;
                  if( a == 1)
                      {
                      int b=0;
                      }

 8.for(int i = 0; i<10; i++) /*ERROR*/   这样的变量定义是不允许的,方法是把 i 提到前面去声明。

     注:在对c++源码改写时,进行变量声明提前的时候,要小心犯某种错误

     例子:{

               p=3;
               p2=0;

               int x=p;    /*ERROR*/

               }  

     如果单纯的把int x=p;放到段首,如下:

             {

               int x=p; 
               p=3;
               p2=0;

               } 

     编译将通过,但这却是错误的。因为这样修改的话,p在修改成3之前就被赋值给x! 保险的修改方法应该是:

             {

               int x;
               p=3;
               p2=0;
               x=p;

               } 


9.这样的语法是编译不通过的

    typedef struct 
    {
     enum { ALIGN=32 };  /*ERROR*/

     .....

    }
  解决办法:改成 #define ALIGN 32?

10.危险的陷阱:#define宏定义

     在一些代码库 (尤其是底层库中) 可以看到宏的某些特性 (如用 # 字符串化, 用 ## 连接等等),甚至是多层宏的嵌套,这些代码在C++中能够很好的编译,但到了c语言环境下,一个微小的不符c语言规范的语句将导致编译无法通过,而且报错提示千奇百怪,解决办法:细心再细心,一层一层的解开分析


11.C与C++代码在工程中混合的问题

     1)在.c文件中删除#include "stdafx.h"

     2)Alt+F7,该文件不使用预编译头

     3)在所有头文件中(.h)中(其实不一定要所有,关键是那些被.c文件调用的函数的头文件),起始处加上:

     #ifdef __cplusplus    /*c++编译环境中才会定义__cplusplus (plus就是"+"的意思) */
     extern "C" 
     {                             /*告诉编译器下面的函数是c语言函数(因为c++和c语言对函数的编译转换不一样,主要是c++中存在重载)*/ 
      #endif

      
      ....................../*代码*/

 

    结束处加上:

    #ifdef __cplusplus 
    } 
     #endif

 

 

 

例如:

a.h头文件中的内容:

      #ifdef __cplusplus   
     extern "C" 
     {                            
      #endif

 
      void func( int x );

    #ifdef __cplusplus 
    } 

     #endif



a.cpp文件中的内容:

       #include "a.h"
       void func( int x ){x=0;}

 



b.h头文件中的内容:

      .......




b.c文件中的内容
       #include "b.h"
       #include "a.h"
       void main()

      {

      func( 100 );

      }


原文:http://hi.baidu.com/evevil/item/a60063ce8be6530bad092f0b




/************************************************************************************************************

*********************************************华丽丽的分隔线*********************************************

********************************************************************************************************/




c中没有c++中的文件会分为.cpp .h  c中只有.c —— 百度知道。。
 
1。为每个类写一个结构,结构名和类名一样,把类的所有成员变量(包括继承来的)都放在结构中,这样成员函数中队成员变量的引用就不需要改动了。变量的声明也不需要改动。
2。把类的所有成员函数(包括继承来的)列出来,把同名的函数(包括虚函数)都改命。然后修改函数中对类中其他成员函数的调用。
3。列出所有类的实例,创建实例时按顺序调用所有的构造函数,实例销毁时按顺序调用所有的析购函数。
4。修改语法
函数不要放结构里。
static的成员变量也不要放结构里。
————————————————小木虫 http://emuch.net/html/200908/1485930.html

另外还有一个网址,http://www.cppblog.com/franksunny/archive/2007/11/29/37510.aspx   C中如何调用C++函数?


### 将MATLAB `wden` 函数换为 C++ 实现 #### 1. 理解 MATLAB 中的 `wden` 函数 在 MATLAB 中,`wden` 是用于执行一维信号阈值去噪的关键函数。该函数支持两种不同的输入方式: - 输入原始数据向量 X 和其他参数来完整个处理过程。 - 提供已经过小波变换的数据 (C, L),以及相应的参数。 这两种形式都允许指定多个选项,如软硬阈值化方法 (`SORH`)、尺度估计方法 (`SCAL`) 及所使用的母小波名称 ('wname') 等[^4]。 #### 2. 使用 COM 组件连接 VC++ 和 MATLAB 为了能够在 C++ 应用程序中利用 MATLAB 的功能,可以采用创建并注册一个由 MATLAB 工具箱导出的功能作为 COM 对象的方法。这需要先设置好开发环境,在 Windows 平台上确保安装了适当版本的 MATLAB 和 Visual Studio,并正确设置了环境变量以便于两者之间的通信[^2]。 #### 3. 换核心算法至 C++ 要完全重写 `wden` 到 C++ 需要考虑几个方面: - **小波分解**:找到合适的开源库(比如 Wavelet Toolbox 或者第三方库)来进行离散小波变换(DWT)操作; - **阈值计算与应用**:根据选定策略调整系数大小; - **重构信号**:通过逆DWT恢复经过处理后的信号样本; 下面给出一段简化版伪代码表示如何基于上述思路构建类似的噪声去除流程: ```cpp #include "wavelet_library.h" // 假设有一个可用的小波分析库头文件 // 定义 wden 类似接口 std::vector<double> cpp_wden(const std::vector<double>& inputSignal, const char* waveName, int level, ThresholdType thresholdMethod, ShrinkageMode shrinkMode); int main(){ // 示例调用 } ``` 请注意实际编码时还需要考虑更多细节,例如边界条件处理、性能优化等问题。此外,由于涉及到复杂的数学运算和可能存在的专利保护技术,建议优先尝试官方提供的解决方案或合法授权的产品替代方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值