static const char* const test_script = "test_script";
Run Code Online (Sandbox Code Playgroud)
您何时以及为何使用上述声明?它有什么好处吗?
为什么要使用char*
而不是常量字符?"常量字符指针"(const char*
)已经是常量,无法更改; 那么为什么要static
在前面使用这个词呢?它有什么用呢?
在C语言中,我经常if
以这种形式看到语句:
#define STATUS 0x000A
UINT16 InterruptStatus;
if (InterruptStatus & STATUS)
{
<do something here....>
}
Run Code Online (Sandbox Code Playgroud)
如果我有这样的陈述,处理时间或任何其他原因会不同于为什么这不是首选/替代方式?
#define STATUS 0x000A
UINT16 InterruptStatus;
if (InterruptStatus == STATUS)
{
<do something here....>
}
Run Code Online (Sandbox Code Playgroud) 我的问题是关于内存以及如何在具有多个C文件(多个模块)的程序中访问它.
file1.h版本1
#ifndef file1_h
#define file1_h
typedef struct
{
UINT8 var1;
UINT16 var2;
UINT16 var3;
} TestAccess;
static TestAccess* pLongRangeAccess;
#endif
Run Code Online (Sandbox Code Playgroud)
file1.h版本2
#ifndef file1_h
#define file1_h
typedef struct
{
UINT8 var1;
UINT16 var2;
UINT16 var3;
} TestAccess_t;
TestAccess_t* pLongRangeAccess;
#endif
Run Code Online (Sandbox Code Playgroud)
MAIN.C
#include "file1.h"
void main(void)
{
pLongRangeAccess->var1 = 4;
pLongRangeAccess->var2 = 8;
pLongRangeAccess->var3 = 16;
}
Run Code Online (Sandbox Code Playgroud)
Module1.c //需要对struct变量进行读/写访问
#include "file1.h"
void module1(void)
{
pLongRangeAccess->var1 = 5;
pLongRangeAccess->var2 = 10;
pLongRangeAccess->var3 = 20;
}
Run Code Online (Sandbox Code Playgroud)
问题1)参见"Version1"关键字中的static是否使得堆内存中只有一个副本(未初始化),因此只有一个指针变量OR的地址,它会创建2个具有不同内存的静态变量,因为标题是在每个模块中使用?
问题2)参见"版本2"如果没有为指针变量声明静态,那么它仍然在堆内存中,并且会有一个UNIQUE地址可用于访问成员的读写操作?
问题3)在file1.h的第2版中,如果指针是在Main.c中声明的,并且内存位置是固定的,即它被声明为常量,它是否可以通过取消引用内存地址从任何模块进行访问地点?
当您更改工作目录中的文件时,git确切地知道更改了哪个文件.怎么知道的?
Q1)它是否在提交时计算校验和,并在事件驱动的更改时重新计算它,例如在工作目录中创建的新文件.
Q2)除了工作目录文件之外,您的本地驱动器是否将其余文件保留在某个位置,随着您包含更多项目而增加?C:\Users\<USER NAME>\Downloads\.git\objects
添加了我试图跟踪的新文件夹,我的驱动器看起来更加饱满,现在我想要撤消我试图跟踪的文件夹,如何回收该空间.我试图用GIT做一些奇特的事情,比如跟踪我本地项目文件和其他文档的变化,这样我就可以看到已更改的文档并仅使用这些文件更新我的备份.
当我从GitLab将一个仓库复制到本地时,它连同源代码一起也在根文件夹调用程序中提取了一个文件.gitignore
。还有一个名为的文件夹.git
,其中包含目录,info
其中包含名为的文件exclude
。忽略(对我而言,忽略和排除表示相同)是哪一个?是忽略还是排除?