• 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

    • BurnAware 18.7 by Razvan Serea Free burning software to create CDs, DVDs, and Blu-ray discs of all types. BurnAware is a full-fledged, easy-to-use burning software which allows users to write all types of files such as digital photos, archives, documents, music and videos to CDs, DVDs and Blu-ray Discs, including BDXL and M-Disc. With BurnAware, you also be able to create boot or multisession discs, high-quality Audio CDs and Video DVDs, make and burn ISO images, copy and backup discs, extract audio tracks, verify and recover data from multisession or unreadable discs. BurnAware is available in three editions - Free, Premium and Professional. Compare and pick edition which is suitable for you. Features Burn files and folders to CD, DVD or Blu-ray Discs. Append or update multisession discs. Burn standard or boot disc images. Burn ISO files to multiple recorders simultaneously. Create boot CDs or DVDs. Create Audio CDs. Create DVD-Video discs. Create MP3 CD / DVD / Blu-ray Discs. Make standard or boot disc images. Copy CD, DVD or Blu-ray Discs to ISO images. Copy from discs to discs. Verify discs byte by byte. Recover files from damaged discs or different sessions. Extract audio tracks from Audio CDs. Erase and format re-writable discs. View detailed disc and drive information. Supports All media types (CD/DVD/Blu-ray Disc) including Double Layer All current hardware interfaces (IDE/SCSI/USB/1394/SATA) including AHCI UDF/ISO9660/Joliet file systems (any combination) On-the-fly writing (no staging to hard drive first) Verification of written files Multisession DVD-RW/DVD+RW Unicode CD-Text (tracks and disc) Compatible with Windows Vista 7, 8, 10, 11 (32-bit or 64-bit) BurnAware 18.7 changelog: Updated translations. Updated disc burning SDK. Improved indirect disc copying (CD <-> DVD). Optimized overall performance on 64-bit systems. Download: BurnAware Free 18.7 | 11.8 MB (Freeware) View: BurnAware Free Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Yeah, as a general rule I prefer standard XBox-like controllers that work like usual out-of-the-box. additional software tends to be overkill. p.s. even my 8BitDo Ultimate 2C wired, while I had to tweak something (setup a udev rule) on Linux for it to work 'out-of-the-box' (which is required for Xinput mode to work in kernels prior to 6.12), I can slightly tweak a small amount of additional buttons/features on the controller itself, no software needed.
    • Are you saying that you don’t think they will be adding the “.” versioning? They definitely will.
    • What will you find out about me?? Are you not going to answer this question as well? Empty threats for just asking questions😂
    • My Alexa Show is just a glorified Alarm clock and weather reporter.
  • Recent Achievements

    • Apprentice
      Adrian Williams went up a rank
      Apprentice
    • Reacting Well
      BashOrgRu earned a badge
      Reacting Well
    • Collaborator
      CHUNWEI earned a badge
      Collaborator
    • Apprentice
      Cole Multipass went up a rank
      Apprentice
    • Posting Machine
      David Uzondu earned a badge
      Posting Machine
  • Popular Contributors

    1. 1
      +primortal
      535
    2. 2
      ATLien_0
      266
    3. 3
      +Edouard
      193
    4. 4
      +FloatingFatMan
      184
    5. 5
      snowy owl
      135
  • Tell a friend

    Love Neowin? Tell a friend!