简体   繁体   中英

can I define a array as preprocessor?

#define PUMP [0,1]  

when I call a function like this:

for (index = 0;index < 8; index++)
{
get_motor_current(PUMP[index]);
}

The intent is to do get_motor_current([0][index]) and get_motor_current([1][index])

Thank you very much.

You can do it by having the macro expand into a compound literal .

#include <stdio.h>

#define PUMP ((const int[]){0, 1})

int main(void) {
    for (int index = 0;index < 2; index++)
    {
        printf("%d\n", PUMP[index]);
    }
}

Long story short, you can't do what you're trying to do the way you're trying to do it. All the C preprocessor does is perform direct text substitutions. So, after preprocessing, your code snippet would look like:

for (index = 0;index < 8; index++)
{
get_motor_current([0,1][index]);
}

which is not valid C.

Also, square brackets [] are only used for indexing an existing array. If you want to initialize an array with a list of values, you write a list of values enclosed in curly braces {} like so:

int some_array[] = {1, 2, 3, 4};

You don't need to define an array size here (ie say some_array[4] ) because the compiler just counts the number of items in the list and does that for you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM