相关疑难解决方法(0)

如何使用extern在源文件之间共享变量?

我知道C中的全局变量有时会有extern关键字.什么是extern变量?宣言是什么样的?它的范围是什么?

这与跨源文件共享变量有关,但这是如何工作的?我在哪里用extern?

c global-variables extern

942
推荐指数
13
解决办法
67万
查看次数

为什么我可以在 C 中定义一个变量两次?

我一直在测试全局变量,定义和声明,我在这种情况下停了下来:

主文件:

#include "stdio.h"

void func(void);
int a;

int main(void) {
    a = 20;
    printf("in main: %d\n", a);
    func();
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

添加.c:

#include <stdio.h>

void func(void);
int a;

void func() {
    printf("in add: %d\n", a);
}
Run Code Online (Sandbox Code Playgroud)

所以在 C 中

int a;
Run Code Online (Sandbox Code Playgroud)

既表示声明又表示定义,但我们知道不允许多次定义变量。那么,如果我们有两个定义和两个声明,为什么这段代码会编译a呢?我在 CLion 中工作,当我在 main 中按“转到定义/声明”时a,它会将指针移至aadd.c,当我在 add.c 中执行相同操作时,它会移回 main.c,因此我无法理解这里发生了什么。

c declaration global-variables definition

0
推荐指数
1
解决办法
236
查看次数

如何运行 2005 年第一个版本的 git?

git 的第一个版本出现于 2005 年。出于好奇和学习的目的,我试图让它运行。源代码在这里。文件很少,所以看起来很合理,但是由于缺乏 C 细节知识,我陷入了困境。

哪些分步说明可以让它在macOS(最好)或 FreeBSD 上运行,并根据需要修改文件?

尝试1

使用macOS Big Sur:

  1. 在 中Makefile,更改install $(PROG) $(HOME)/bin/为install $(PROG) ./bin/
    This 是为了让二进制文件驻留在本地目录中。
  2. 在 中cache.h,添加行#include <string.h>和#include <unistd.h>。
  3. brew install openssl
  4. ln -s ../opt/openssl/include/openssl .
  5. make install

结果:错误和警告墙,包括"no member named 'st_ctim' in 'struct stat'","no member named 'st_mtim' in 'struct stat'"等等。

尝试2

使用FreeBSD 12:

  1. 在 中Makefile,更改install $(PROG) …

c git macos linker gcc

-2
推荐指数
1
解决办法
167
查看次数

标签 统计

c ×3

global-variables ×2

declaration ×1

definition ×1

extern ×1

gcc ×1

git ×1

linker ×1

macos ×1