Arivarasan
Arivarasan

Reputation: 389

Global variable declaration in c

#include<stdio.h>
int check,check;
void main(){
    printf("Hello!!");
}

When I compile this piece of code, everything goes on normal but when I give this inside the main function,

#include<stdio.h>
void main(){
int check,check;
    printf("Hello!!");
}

I get an error like

C:\MinGW\bin>cc ex1.c
ex1.c: In function 'main':
ex1.c:4:11: error: redeclaration of 'check' with no linkage
 int check,check;
           ^
ex1.c:4:5: note: previous declaration of 'check' was here
 int check,check;
     ^

Why is it so?

Upvotes: -1

Views: 520

Answers (1)

Sourav Ghosh
Sourav Ghosh

Reputation: 134326

This is possible in global scope, because that is considered an tentative definition.

Quoting C11, chapter §6.9.2

A declaration of an identifier for an object that has file scope without an initializer, and without a storage-class specifier or with the storage-class specifier static, constitutes a tentative definition.

However, in the block scope (function scope), there's no tentative definition, hence the code tries to create two identifiers with the same name which is cause for the re-declaration error, because they actually denote the same object.

You can read more about it here.

That said, since C99, for hosted enviroments, void main() is not a valid signature anymore, it has to be int main(void) at least.

Upvotes: 1

Related Questions