We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
In one 'c' file I define the following function:
void fnTemp(int jj, int kk);
void fnTemp(int jj, int kk)
{
...do some stuff...
}
In a different 'c' file I have the following:
extern void fnTemp(int jj);
void fnTryIt(void)
fnTemp(3);
This will link without any errors. How do I get the linker to tell me that I have two definitions for fnTemp()?
I know that I could put the declaration for fnTemp() in a .h file and include the .h file in both .c files which will then trigger a compiler error. But I have an instance where that can cause other issues.
Thank you for any help.
I am surprised the linker does not throw an error - I see you are using IAR tools, but armlink from the Arm Compiler for Embedded toolchain emits:
Error: L6200E: Symbol fnTemp multiply defined (by foo2.o and foo1.o).
Actually no. I tried this:
extern void helloExit(int a); /* atExit function */ void displayExit(void) { helloExit(1); kprintf(1, " ended\n"); }
and in the other file:
void helloExit(void) { kprintf(1, " ended\n"); }
I checked with armcc 5.06 and get no linker error. Tried Clang 6.6.3, no error/no warning.