• 0

[C++] extern keyword & "void" parameter?


Question

Howdy. Just some code I'm curious about... (just trying to get my head around understanding it)

extern void ThreadTest(void); // main.cc

Q1) I've done some googling about the keyword extern, but would just like some clarification! One site defines it as "an assertion to the compiler that the definition for the object or function is in another compilation unit or file". But how does the compiler know where this function is defined exactly? (I've found the ThreadTest() function in the class thread.cc, but that is not included at the top of main.cc??).

Q2) Also are there any standard/good practices or guidelines on where or when you should use the extern keyword? I'm still a little unsure why it is necessary to use it. Why not just do an "#include someclass.h" at the top and then use the functions?

Q3) Why does the ThreadTest() function declaration (above) take void as a parameter? That looks weird to me since:

  • ThreadTest() implemented in the thread.cc class does not have any parameters!
  • How do you get a void parameter?! Unless it means that there are no parameters? But then why not just leave it blank?

Thanks for the help in advance :laugh: Some funny/strange things there for me. Bear with me, only done C++ for about 6 months! :whistle:

Link to comment
https://www.neowin.net/forum/topic/291483-c-extern-keyword-void-parameter/
Share on other sites

4 answers to this question

Recommended Posts

  • 0

1) The definition given is pretty good. You can also use extern like: extern "C" int func();

This tells the compiler/linker that the function is externally defined as a C protoype. This is used for mixing C/C++ functions/source files.

The linker generates a list of symbols from the object files (compiled source files), and is always able to find the actual declaration/implementation of the variable/function. The compiler never attempts to build a self-contained module; it just forwards external symbols onto the linker.

  • 0
  fault said:
Q2) Also are there any standard/good practices or guidelines on where or when you should use the extern keyword? I'm still a little unsure why it is necessary to use it. Why not just do an "#include someclass.h" at the top and then use the functions?

585551025[/snapback]

Your linker will generate multiple define errors when you try to write code like this...

header.h

#ifndef header_h
#define header_h

int test;

#endif

file1.cpp

#include "header.h"

void functionA()
{
    test = test;
}

file2.cpp

#include "header.h"

void functionB()
{
    test = test;
}

You solve this problem by using the extern keyword in your header file...

header.h

#ifndef code_h
#define code_h

extern int test;  // this is now a declaration, not a definition.

#endif

and define the variable in a seperate module...

header.cpp

#include "header.h"

int test;

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • It's not really related to the speed of the system. A menu that appears instantly is of course going to feel more responsive than a menu that slides or fades into view.
    • How did two companies come up with the same stupid name for the same stupid type of product?
    • I honestly think this does not make any noticable difference to anyone with a PC with average specs.
    • OpenAI takes down all traces of Jony Ive "io" deal following court order by David Uzondu Early this month, we reported that OpenAI was working on a mobile gadget in the form of a screenless, wearable device, born from a newfound partnership (friendship?) between renowned former Apple designer Jony Ive and OpenAI CEO Sam Altman. The announcement came with a video that had the two men talking about the future of technology. Well, that video has now been made private on YouTube, and the original announcement page has been taken down. The whole thing is on pause because of a simple trademark dispute. OpenAI was forced to pull the materials following a court order. If you visit the original announcement page, it now says: Despite the legal hassle over the name, the actual business deal seems safe. According to Bloomberg's Mark Gurman, the acquisition itself is unaffected by the complaint. So, who is iyO (pronounced eye-oh), the other party in this mess? If the name sounds unfamiliar, its background will not. This iyO company is an independent startup that graduated from X, Alphabet's moonshot factory, and yes, that is the same Alphabet, the parent company of Google. iyO claims to be on a mission to bring "natural language computing" to the masses. A quick look shows two products listed on its website: the Vad Pro, a high-end wired audio device for professionals, and iyO One, a set of AI-powered earbuds the company is calling the "world's first audio computer." A judge reportedly found its trademark lawsuit against OpenAI credible enough to issue the restraining order, suggesting the ChatGPT creator's video could create genuine consumer confusion between the two similarly named ventures.
    • I've set since XP - Best performance in the Performance settings. 11 included. I enable only the show shadows after that, so I can see better fonts and mouse.. But hardly I can say I can see a difference today.
  • Recent Achievements

    • Conversation Starter
      Brett76 earned a badge
      Conversation Starter
    • One Month Later
      Miguel Batista earned a badge
      One Month Later
    • Dedicated
      moojay67 earned a badge
      Dedicated
    • One Month Later
      Jim Dugan earned a badge
      One Month Later
    • First Post
      Johnny Mrkvička earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      656
    2. 2
      Michael Scrip
      229
    3. 3
      ATLien_0
      220
    4. 4
      Steven P.
      150
    5. 5
      Xenon
      143
  • Tell a friend

    Love Neowin? Tell a friend!