c - Why do I need to declare this function extern. It works without it -


i new concept of extern. today @ work came across large number of extern functions declared inside of header file; foo.h. somewhere off in mess of folders found foo.c file contained definition of said functions did not #include foo.h. when got home decided play around extern storage class examples. after doing reading in "c book" came with.

here did not expect work. did.

main.c

#include <stdio.h>   int data;  int main() {    data = 6;    printf("%d\n", getdata());    data = 8;    printf("%d\n", getdata());   return 0; }  

externs.c

int getdata() {   extern int data;   return data; } 

bash

gcc main.c externs.c -o externs 

i didn't think work because function not technically (or @ least verbose) defined before main. work because default storage class int getdata() extern? if so, why bother following example (similar saw @ work)?

main2.c

#include <stdio.h>  #include "externs.h"  int data;  int main() {    data = 6;    printf("%d\n", getdata());    data = 8;    printf("%d\n", getdata());   return 0; }  

externs.h

#ifndef _externsh_ #define _externsh_  extern int getdata();  #endif 

externs.c

int getdata() {   extern int data;   return data; } 

bash

gcc main2.c externs.c -o externs 

functions implicitly extern. can change declaring them static.

you right redundant extern int getdata(); compared int getdata(); people feel improves code clarity.

note since c99, first example ill-formed. calls getdata without function having been declared. in c89 performed implicit int getdata(); declaration, since c99 removed. use compiler switches -std=c99 -pedantic test this.


Comments