我有三个文件,一个主.cpp文件:
#include <stdio.h>
#include "myClass.h"
int main()
{
myClass mvar;
tryVar = 23; // why does this not work?
printf("%d ", mvar.readTryVar()); // This writes out 0, why??
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一个myClass.cpp文件
#include "myClass.h"
myClass::myClass(void)
{
}
myClass::~myClass(void)
{
}
void myClass::setTryVar()
{
tryVar = 23334;
}
int myClass::readTryVar()
{
return tryVar;
}
Run Code Online (Sandbox Code Playgroud)
和myClass.h文件
#pragma once
static int tryVar;
class myClass
{
public:
myClass(void);
~myClass(void);
void setTryVar();
int readTryVar();
};
Run Code Online (Sandbox Code Playgroud)
它们是非常简单的文件,但我无法理解为什么静态变量不在main函数中设置,我需要通过myClass函数设置它.
我认为我不太清楚如何创建"翻译单元",我知道"include"指令只是在实际编译之前将头文件的内容复制到.cpp文件中..那么为什么不是'静态变量可见吗?
我在一个文件中定义了一个变量,并使用extern关键字在另一个文件中声明了它.但我已用不同的数据类型声明它..
file1.c
char i;
main()
{
foo();
}
Run Code Online (Sandbox Code Playgroud)
file2.c中
void foo()
{
extern int i;
i = 130;
printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,内存在main函数中为'i'分配为char数据类型.执行后的答案应该是否定的(-127).但它打印130.无论在foo()函数中分配给'i'的值是什么,不仅打印130.
#include <stdio.h>
int call()
{
extern int b;
b=10;
printf("%d",b);
}
int main ()
{
int b=8;
call();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么抛出这样的错误,我得到以下链接器错误:
/tmp/ccAsFhWX.o:meka.c:(.text+0x7): undefined reference to `_b' collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我想使用extern关键字更改另一个函数中的b值,但它给了我一个错误.我这样做了吗?
我有一个全局结构数组声明为
struct _links link[255][255][255];
Run Code Online (Sandbox Code Playgroud)
在我的 main.c. 这个结构数组也用在另一个文件action.c中,我尝试在action.c中将它声明为extern,即
extern struct _links link[255][255][255];
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误消息“数组类型具有不完整的元素类型”。我不明白这是什么意思。我该如何解决这个问题?
谢谢你。
我只是C++的初学者.我正在尝试构建一些头文件header.h,但输出总是如下所示:
/tmp/ccTmZKXX.o: In function `main':
main.c:(.text+0x13): undefined reference to `func'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
你能帮我看一下我使用头文件的方式是否正确吗?非常感谢!
主要代码(main.c):
#include "stdio.h"
#include "func.h"
main() {
double a = f(2.3);
printf("a=%f\n", a);
}
Run Code Online (Sandbox Code Playgroud)
其中func.c包括:
double func (double x) { return x ;}
Run Code Online (Sandbox Code Playgroud)
其中func.h包括:
double func (double);
Run Code Online (Sandbox Code Playgroud)
我编译:
gcc -o main main.c
Run Code Online (Sandbox Code Playgroud) 对不起,这是一个基本问题,但我的所有研究都几乎没有回答我的问题,我只是想在我编写所有代码之前仔细检查.我正在使用C,我有一个头文件,其中声明了一些变量(ints,char数组,int数组).如果我有一个使用这些全局变量的函数,我假设我可以使用变量而不传递它们?
示例头文件:
int state;
int lnArray[];
Run Code Online (Sandbox Code Playgroud)
C文件:
void function(){
int i;
for(i=0;i<5;i++;){
if(lnArray[i]<10)
state = lnArray[i];
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下文件结构:
XH
#pragma once
#include "Y.h"
int ONE = 1;
int combine();
Run Code Online (Sandbox Code Playgroud)
XC
#include "X.h"
int combine()
{
return ONE + TWO;
}
Run Code Online (Sandbox Code Playgroud)
YH
#pragma once
int TWO = 2;
Run Code Online (Sandbox Code Playgroud)
YC
#include "Y.h"
Run Code Online (Sandbox Code Playgroud)
MAIN.C
#include "X.h"
int main()
{
int fusion = combine();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
LNK1169 one or more multiply defined symbols found
LNK2005 _ONE already defined in Main.obj
LNK2005 _TWO already defined in Main.obj
KLNK2005 _TWO already defined in Main.obj
Run Code Online (Sandbox Code Playgroud)
这没有任何意义.如果我们从Main.c编译器开始必须包含X.h.然后编译器查找与之关联的C文件X.h.里面 …
我想避免在我的 C 文件中硬编码常量值,所以我想知道是否有办法直接在头文件中初始化结构常量,以便在我包含头文件的任何地方使用它?(以 #define 适用于简单类型常量的方式)
到目前为止我找到的所有答案都是:
const int var = 5; /*in header*/
Run Code Online (Sandbox Code Playgroud)
只适用于 C++(不适用于 C)
使用 C 文件来初始化常量,这不是我要找的
这篇文章的最佳答案:如何使用 extern 在源文件之间共享变量?
这似乎有点复杂......
预先感谢您能给我带来的答案或帮助!:)
编辑:我正在为我的问题添加更多详细信息。
我想存储我在结构中使用的系统的硬件参数:
struct parameters_Component1 {
int const1 = 5;
double const2 = 7,847
}
struct parameters_Component2 {
int const1 = 6;
double const2 = 9,3343
}
Run Code Online (Sandbox Code Playgroud)
或等效于的结构
#define myConst 5;
Run Code Online (Sandbox Code Playgroud)
我希望将这些常量值重新分组到一个我可以访问和修改的头文件中,而不是出于组织目的而放在我的 C 代码中
第一个文件:
//a.c
const int i = 9; //Just contains the variable definition
Run Code Online (Sandbox Code Playgroud)
第二个文件:
//b.c
#include<stdio.h>
extern int i;
int main()
{
int *ptr = &i;
printf("Before: %d\n",i);
*ptr = 99;
printf("After: %d\n",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我原本期望在bc中const出现限定符错误/警告extern int i;和只读内存修改错误,但编译却进展顺利。*ptr = 99;
第一个打印语句打印良好,但第二个打印语句出现分段错误。
为什么它没有在编译阶段崩溃并出现预期的错误,而是给出分段错误?
注意 - GCC 8.3.0
在 c 中,在我看来,在函数之外编写的所有内容都已经是“extern”了。那么,究竟何时必须将变量指定为 extern?
它与定义与声明有关吗?
此外,是否需要使用 extern 声明变量才能访问已在另一个文件中定义的变量?