【发布时间】:2015-01-26 10:58:08
【问题描述】:
我想在 C 的外部文件中包含一个声明的变量。
我的项目结构是这样的。
foo.h
foo.c
variable.c
main.c
我现在正在做的是
/* main.c */
#include "foo.h"
#include <stdio.h>
#include <stdlib.h>
int main() {
bar();
printf("%d\n", a);
return 0;
}
/* foo.h */
#ifndef FOO_H
#define FOO_H
#include "variable.c"
extern const int a;
extern const int b[];
int bar();
#endif
/* foo.c */
#include "foo.h"
#include <stdio.h>
int bar () {
printf("tururu\n");
printf("%d\n", b[0]);
return 0;
}
/* 变量.c */
const int a = 2;
const int b[3] = {1, 2, 3};
我想以这种方式定义的变量是常量(只读)。
我不知道数组的大小,这取决于variable.c中的定义。
所以我的问题是:
这是从外部源包含一些常量变量的正确方法吗?
如果是,我做错了什么,如何解决?
谢谢
编辑:我已经用一个可以测试的示例更新了我的代码。此代码未编译,因为它说“b”未在函数栏中声明。如果我注释掉 bar 中的 printf,它会编译并运行。所以变量可以被 main 看到,但不能被 foo.c 看到?
EDIT2:以这种方式包含的变量是只读的。我已经更新了代码并在 foo.c 中添加了 foo.h 的包含,现在编译器告诉有 'a' 和 'b' 的多个定义
EDIT3:清理代码和试图更清楚的问题。
【问题讨论】:
-
我在写我的问题之前已经阅读过,但它没有回答我的问题。我的问题是我无法在 foo.c 中定义和初始化我的变量,我需要在外部文件中定义和初始化变量,并且在那个问题中没有观察到这个问题。但是感谢您的链接,这是一个非常有用的答案。
-
我也更新了问题以明确差异。
-
foo.c 需要包含 foo.h(使声明可见),foo.h 不应包含 variable.h,并且在大多数情况下,定义不会进入标题(此标题必须如果定义了变量,则不会被多个文件包含)。
-
问题 1:从不在 h 文件中声明或定义非常量变量没有任何意义。问题 2:从不 使用全局变量没有任何意义。相反,使用文件范围静态变量和 setter/getter,as demonstrated here。问题 3:您的程序设计从根本上被破坏,需要从头开始重新制作:像您一样分配变量没有任何意义。
标签: c arrays header-files