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

257
Views
Why it is allowed to initialize static variable with non const here?

I was reading this. The first answer by @Andrei T says that

A "large" object is never a constant expression in C, even if the object is declared as const. Const-qualified objects (of any type) are not constants in C language terminology. They cannot be used in initializers of objects with static storage duration, regardless of their type.

For example, this is NOT a constant

const int N = 5; /* `N` is not a constant in C */

The above N would be a constant in C++, but it is not a constant in C. So, if you try doing

static int j = N; /* ERROR */

you will get the same error: an attempt to initialize a static object with a non-constant

I agree with his answer. I also tried a simple example like following on gcc 4.8.2 & 4.9.2 & it gives compiler errors as I expected:

#include <stdio.h>
int main(void)
{
    const int a=5;
    static int b=a;
    printf("%d",b);
}

But When I tried it on ideone.com it compiles & runs fine and gives expected outcome. See live demo here. Also, on codeblocks 13.12 IDE (gcc 4.7.1) this program runs fine. So, Is it compiler bug or gcc extension? What combination of compiler options ideone uses under the hood? So, how & why it compiles in ideone? What is the reason?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

This seems to be a gcc speciality. Compiling with -std=c89 or -pedantic reports the error.

Since in all C standards this is a constraint violation, not giving a diagnostic for that case makes gcc without one of the -std=c?? options a non-conforming compiler.

over 4 years ago · Santiago Trujillo Report

0

It's because the ideone likely invokes gcc with -O option (optimization level 1). This is the case even for older versions of gcc (mine is 4.4.7):

$ gcc -ansi main.c 
main.c: In function ‘main’:
main.c:6: error: initializer element is not constant
$ gcc -ansi -O main.c
$ echo $?
0

What's interesting here is that with -pedantic it is working properly again and required diagnostic message is present (tested only with 4.4.7, see Keith's comment):

gcc -ansi -pedantic -O main.c 
main.c: In function ‘main’:
main.c:6: error: initializer element is not constant
$ echo $?
1
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!