Saturday, May 2, 2015

Trong một project thường thì sẽ có cả C source code (trong file .c) và C++ source code (trong  file .cpp), vậy làm thế nào để kết hợp chúng lại với nhau. Như đã biết để compile C source thì dùng gcc, compile C++ source thì dùng g++, một project có cả C và C++ source thì sẽ dùng g++, vì thế cần loại bỏ các tính chất của C++ khi compile C source. Để làm được điều đó ta sử dụng extern "C" trong file C header.

 #ifdef __cplusplus  
 extern "C"{  
 #endif  


 // ... your include, types, methods, variables ...

  
 #ifdef __cplusplus  
 } //end extern "C"{  
 #endif  

Giữa cặp dấu ngoặc extern là các khai báo các include header, các enum, union, struct, function, ... , tất cả chúng sẽ được implement ở dạng code C thuần túy trong một file .c khác. 

Ex
math_operator.h
 #ifndef MATH_OPERATOR_H  
 #define MATH_OPERATOR_H  
   
 #ifdef __cplusplus  
 extern "C"{  
 #endif  
    
 #include <stdio.h>  
   
 bool add(float a, float b, float *ret);  
 bool sub(float a, float b, float *ret);  
 bool multi(float a, float b, float *ret);  
 bool devision(float a, float b, float *ret);  
   
 #ifdef __cplusplus  
 } //extern "C"{  
 #endif  
   
 #endif // MATH_OPERATOR_H  
   

math_operator.c

 #include "math_operator.h"  
 #include <stdbool.h>  
   
   
 bool add(float a, float b, float *ret){  
   *ret = (a+b);  
   return true;  
 }  
   
 bool sub(float a, float b, float *ret){  
   *ret = (a-b);  
   return true;  
 }  
   
 bool multi(float a, float b, float *ret){  
   *ret = (a*b);  
   return true;  
 }  
   
 bool devision(float a, float b, float *ret){  
   if(b != 0){  
     *ret = ((float)a/b);  
     return true;  
   }  
   
   return false;  
 }  

main.cpp

 #include <iostream>  
 #include "math_operator.h"  
 using namespace std;  
   
 int main(int argc, char **argv){  
   float ret;  
   
   add(4, 2, &ret);  
   cout << "4 + 2 = " << ret <<endl;  
   
   sub(4, 2, &ret);  
   cout << "4 - 2 = " << ret <<endl;  
    
   multi(4, 2, &ret);  
   cout << "4 * 2 = " << ret <<endl;  
   
   devision(4, 2, &ret);  
   cout << "4 / 2 = " << ret <<endl;  
   
   return 1;  
 }  
   

Compile & Execute:

 $ g++ math_operator.h math_operator.c main.cpp  
 $ ./a.out   
 4 + 2 = 6  
 4 - 2 = 2  
 4 * 2 = 8  
 4 / 2 = 2  
   

Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -