Tag Archives: Global variable

error: initializer element is not constant [How to Solve]

1. Background

C language compilation error: error: initializer element is not constant. The error code is as follows:

    char *info = (char *)malloc(len);
    static char *info_t = info;

The above error is caused by trying to initialize a static variable with the memory pointer allocated by malloc.

2. Error reason

Static variable is a global variable. The value of the global variable cannot be determined at compile time, but at run time (compilation principle). Therefore, the global variable cannot be initialized directly with the return value of malloc at the time of declaration. Replace with the following:

    char *info = (char *)malloc(len);
    static char *info_t; 
    info_t = info;

Compilation passed.

Python global variables and global keywords

Python global variables

and the global keyword

in Python variable usage, this error is often encountered :

local variable 'a' referenced before assignment

means that the local variable “a” is referenced before assignment.
such as running the following code will cause this problem:

a = 3
def Fuc():
    print (a)
    a = a + 1
Fuc()

, but if you delete a = a + 1, the above problem will not occur.

a = 3
def Fuc():
    print (a)
Fuc()

it turns out that in Python, a = 3 defines the global variable a, scope to the end of the code from the definition, in a = 3 of the following functions can be cited the global variable a, but if you want to modify the functions and global variables with the same name, the function of the variable will become a local variable, before the change of the variable reference nature presents undistributed or undefined error.

if you are sure to reference and modify global variables you must add the global keyword

a = 3
def Fuc():
    global a
    print (a)
    a=a+1
Fuc()

note: which function needs to modify the global variable, just declare it in the function.

but there is a special function, and that is the main function:

a = 3
def Fuc():
    global a
    print (a)  # 1
    a = a + 1
if __name__ == "__main__":
    print (a)  # 2
    a = a + 1
    Fuc()
    print (a)  # 3

output is as follows (in Python3) :

3
4
5

three prints are executed in the order of 2, 1, 3. You can see that there is no global declared variable A in the main function, but you can still modify the global variable A. In a normal function, the global variable A needs to be declared globally in order to modify it.

life is short, I use Python~