same name global variable multi files

Q

quickcur

Hi,

I used to have different c code in different files and compiled as
different programs. For example, I have

proc1.c:

int x1, x2;

void work1()
{
int b = x1 + x2;
...
}

x1 and x2 are global variables and proc1.c and other c files are
compiled as to a program called "p1".


proc2.c:

int x1, x2;

void work2()
{
int b = x1 * x2;
...
}

proc2.c and other c files are compiled to a program called "p2".

I am now working on a new program where I would like to have both
function "work1" and "work2". I tried to share the same code but it did
not link because x1 and x2 has the same name in proc1 and proc2. Since
proc1 and proc2 have many many global variable with the same names and
I have even proc3, proc4...., I do not want to change them one by one.
Is there a good way to solve the naming conflict? Since I still use the
code in my separated program p1 and p2, I would like to keep the change
as little as possible. I do not want to put proc.1 into a c++ class,
for example.

Thanks,
qq
 
H

Howard

Hi,

I used to have different c code in different files and compiled as
different programs. For example, I have

proc1.c:

int x1, x2;

void work1()
{
int b = x1 + x2;
...
}

x1 and x2 are global variables and proc1.c and other c files are
compiled as to a program called "p1".


proc2.c:

int x1, x2;

void work2()
{
int b = x1 * x2;
...
}

proc2.c and other c files are compiled to a program called "p2".

I am now working on a new program where I would like to have both
function "work1" and "work2". I tried to share the same code but it did
not link because x1 and x2 has the same name in proc1 and proc2. Since
proc1 and proc2 have many many global variable with the same names and
I have even proc3, proc4...., I do not want to change them one by one.
Is there a good way to solve the naming conflict? Since I still use the
code in my separated program p1 and p2, I would like to keep the change
as little as possible. I do not want to put proc.1 into a c++ class,
for example.

You could wrap the contents of either or both files in their own namespace.
That's the usual C++ solution to name conflicts.

Even better would be to fix the problem by getting rid of the global
variables altogether. But I guess you don't want to do the work to make it
right. You're seeing now one of the problems of not doing it right the
first time.

By the way, are you actually compiling these as C++? The filenames ending
in ".c" often tell a compiler to compile as C, not C++.

-Howard
 
F

Frederick Gotham

(e-mail address removed) posted:
I tried to share the same code but it did
not link because x1 and x2 has the same name in proc1 and proc2.



C solution: Define the objects as "static".

C++ solution: Define the objects with an anonymous namespace.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,085
Messages
2,570,597
Members
47,218
Latest member
GracieDebo

Latest Threads

Top