Solved

C and C++ libraries

Posted on 1998-10-27
9
167 Views
Last Modified: 2012-05-04
I have some libraries developed in C. These libs use variables names 'class' , 'new' etc which are keywords in C++. Please suggest me any option where I can use this libs in C++ without rewriting the libaries.

0
Comment
Question by:agvenkat
  • 2
  • 2
  • 2
  • +3
9 Comments
 
LVL 5

Expert Comment

by:scrapdog
Comment Utility
use search and replace in your library to replace all instances of "class" with "Class", etc.

(or are keywords case insensitive?)

just a suggestion
0
 

Author Comment

by:agvenkat
Comment Utility
hi,
  I am asking for some alternative as a lot of code used by
other C guys also need to be changed so please suggest an alternative.

regards
venkatesh

0
 
LVL 1

Expert Comment

by:willemnel
Comment Utility
I'm afraid you'll have to rewrite (search and replace or whatever) some of the code if you want to use it in C++, since the words you're using are C++ key words and the compiler recognizes it as such.  As far as I know there's no way of getting around the compiler with this.
0
 
LVL 8

Expert Comment

by:Answers2000
Comment Utility
-- Did you know you double submitted the question ???

I have answered the other copy of this question.  For some reason E-E won't let me post a answer on this version of the question.

agvenkat - If you like my answer to the other copy agvenkat you can delete this copy to get your pts back


0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 5

Accepted Solution

by:
yonat earned 200 total points
Comment Utility
You can wrap the C library with a facade which is C++ friendly. This means that your library reamins in C as-is (compiled using a C compiler) but that you provide an interface to it, in C, which does not contain any C++ keywords.

I'll use a trivial example to illustrate. Let's say the library contains only one function, declared in lib.h:
    int class(char* new);

You create a new C header file, CppLib.h, which contains the following declaration:
    extern "C" {
    int LibClass(char* inNew);
    }

It's corresponding CppLib.c file (compiled with the C compiler) will be:
    #include "lib.h"
    int LibClass(char* inNew)
    {
        return class(inNew);
    }

Your C++ program will #include the header CppLib.h, and not the original lib.h .

Now you have the same C library, compiled with a C compiler, but it is usable for C++ programs. All you need to write is the C++ friendly facade.

If you also have C++ keywords as fields in structs, unions or enums, the same principle apply: Declare a new struct, say, with the offensive field renamed, and let your facade translate it to the original struct when passing it on to the original library.

0
 
LVL 5

Expert Comment

by:yonat
Comment Utility
Oops, I forgat to wrap the extern declaration...

Your CppLib.h should be:

    #ifdef __cplusplus
    extern "C" {
    #endif

    int LibClass(char* inNew);

    #ifdef __cplusplus
    }
    #endif

0
 
LVL 6

Expert Comment

by:thresher_shark
Comment Utility
If you would like this duplicate question deleted, please respond and I will have customer service delete it.
0
 

Author Comment

by:agvenkat
Comment Utility
thresher_shark please get the duplicate question deleted.

Thanks for your help

venkatesh

0
 
LVL 6

Expert Comment

by:thresher_shark
Comment Utility
Oky doky, your problem has been solved :-)
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now