Home > Backend Development > C++ > body text

Can Static Arrays Be Programmatically Initialized at Compile Time in C ?

Susan Sarandon
Release: 2024-11-17 08:02:03
Original
332 people have browsed it

 Can Static Arrays Be Programmatically Initialized at Compile Time in C  ?

Creating Static Arrays Programmatically at Compile Time

In C , static arrays can be initialized at compile time to hold specific values. Consider the following example:

const std::size_t size = 5;    
unsigned int list[size] = { 1, 2, 3, 4, 5 };
Copy after login

Question 1: Assigning Values Programmatically

Is it possible to programmatically assign these values using metaprogramming techniques at compile time?

Answer:

Using C 0x features, it is possible to create local or member arrays of templates and initialize them from a variadic template argument list. However, this is limited by the maximum template instantiation depth and may not be practical for large arrays.

Question 2: Selective Assignment

Assuming certain array elements should have the same value while others vary, can selective assignment be performed programmatically at compile time?

Answer:

Using a template metafunction, one can create an array of values and use it to partially initialize a static array. The following example selectively assigns values based on the index:

template<size_t index> struct MetaFunc { 
    enum { value = index + 1 }; 
};

void test() {
    const std::size_t size = 7;
    typedef generate_array<size, MetaFunc>::result A;

    for (std::size_t i=0; i<size; ++i) { 
        if (i <= 1 || i >= 4) {
            A::data[i] = 0;
        }
    }
}
Copy after login

By leveraging template metafunctions, selective assignment can be achieved in a programmatic manner while ensuring compile-time evaluation.

The above is the detailed content of Can Static Arrays Be Programmatically Initialized at Compile Time in C ?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template