C extern 关键字正确使用

问题描述 投票:0回答:1

我正在编写一个简单的库来为终端的文本着色,但也许我做错了。

颜色.h:

extern enum col;
extern char* colors[8];
extern char* bold_colors[8];

void printColor(char* color, char* str);

颜色.c:

#include <stdio.h>
#include <string.h>
#include <colors.h>

enum col {
    BLACK, RED, GREEN, BLUE, YELLOW, PURPLE, CYAN, WHITE, MAX_VALUE
};

char* colors[8] = {
    [BLACK] = "\033[0;30m",
    [RED] = "\033[0;31m",
    [GREEN] = "\033[0;32m",
    [YELLOW] = "\033[0;33m",
    [BLUE] = "\033[0;34m",
    [PURPLE] = "\033[0;35m",
    [CYAN] = "\033[0;36m",
    [WHITE] = "\033[0;37m"
};

char* bold_colors[8] = {
    [BLACK] = "\033[1;30m",
    [RED] = "\033[1;31m",
    [GREEN] = "\033[1;32m",
    [YELLOW] = "\033[1;33m",
    [BLUE] = "\033[1;34m",
    [PURPLE] = "\033[1;35m",
    [CYAN] = "\033[1;36m",
    [WHITE] = "\033[1;37m"
};

void printColor(char* color, char* str) {
    printf("\033[0;37m");
    printf(color);
    printf(str);
    printf("\033[0;37m");
}

main.c

#include "colors.h"

printColor(colors[GREEN], "text");

错误:

identifier "GREEN" is undefinedC/C++(20)

它应该在文件(多个)之间共享颜色数组,但返回错误。

arrays c extern
1个回答
0
投票

您可能希望将枚举移至头文件并将其包含在 color.c 和 main.c 中

– 艾伦·温德

我同意这一点。

C 语言编程包括编译和链接。

在编译阶段,h文件中的声明对c文件有效,但c文件之间互不影响。你的问题就发生在这里。您可以通过在 h 文件中包含所有使用的声明来修复它。

在链接阶段,编译后的c文件被链接在一起。您的

extern
声明在此生效。然而,它们在编译阶段也是需要的,所以将它们放在 h 文件中是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.