Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

216
Views
gcc/clang: error: conflicting types for <function_name>: why function name matters?

Sample code (t987.c):

void *NAME();
void *NAME(void *, int, unsigned);

Invocation:

$ gcc t987.c -c -DNAME=memset1
<nothing>

$ gcc t987.c -c -DNAME=memset
<command-line>: error: conflicting types for ‘memset’; have ‘void *(void *, int,  unsigned int)’
t987.c:2:7: note: in expansion of macro ‘NAME’
    2 | void *NAME(void *, int, unsigned);
      |       ^~~~
<command-line>: note: previous declaration of ‘memset’ with type ‘void *(void *, int,  long unsigned int)’
t987.c:1:7: note: in expansion of macro ‘NAME’
    1 | void *NAME();

# clang: the same behavior

Question: why function name matters?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

There's no other definition or declaration for memset1. So these two declarations are compatible:

void *memset1();
void *memset1(void *, int, unsigned);

Because the first one says the number and type of parameters is unknown.

This however gives you a problem:

void *memset();
void *memset(void *, int, unsigned);

Because memset is defined by the C standard and therefore considered part of the implementation, it is also internaly declared as:

void *memset(void *, int,  long unsigned int)

Which conflicts with your second declaration.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!