相关疑难解决方法(0)

extern关键字对C函数的影响

在C中,我没有注意到extern函数声明之前使用的关键字的任何影响.起初,我认为extern int f();在单个文件中定义时会强制您在文件范围之外实现它.但是我发现两者都是:

extern int f();
int f() {return 0;}
Run Code Online (Sandbox Code Playgroud)

extern int f() {return 0;}
Run Code Online (Sandbox Code Playgroud)

编译得很好,没有gcc的警告.我用过gcc -Wall -ansi; 它甚至不接受//评论.

extern 在函数定义之前使用是否有任何影响?或者它只是一个可选的关键字,对函数没有副作用.

在后一种情况下,我不明白为什么标准设计师选择用多余的关键词来乱丢语法.

编辑:澄清一下,我知道extern变量的用法,但我只是extern函数中询问.

c syntax standards

162
推荐指数
6
解决办法
18万
查看次数

如何编写可在C++程序中使用的C头文件?

可能重复:
如何检查(通过预处理器)C源文件是否正在编译为C++代码

我正在尝试找到一个标准的宏来测试头文件是编译为C还是C++.这样做的目的是标题可以包含在C或C++代码中,并且必须根据具体情况略有不同.特别:

在C中,我需要这个代码:

extern size_t insert (const char*);
Run Code Online (Sandbox Code Playgroud)

在C++中,我需要这个代码:

extern "C" size_t insert (const char*);
Run Code Online (Sandbox Code Playgroud)

另外,有没有办法避免在标题中的每个声明周围放置#ifdef?

c c++ macros

13
推荐指数
3
解决办法
870
查看次数

不同的编译结果不使用C++中的C vs extern

当我在两个不同的源文件中声明一个全局变量并且只在其中一个源文件中定义它时,我得到的C++编译结果与C相比不同.请参阅以下示例:

main.c中

#include <stdio.h>
#include "func.h" // only contains declaration of void print();

int def_var = 10;

int main() {
    printf("%d\n", def_var);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

func.c

#include <stdio.h>
#include "func.h"

/* extern */int def_var; // extern needed for C++ but not for C?

void print() {
    printf("%d\n", def_var);
}
Run Code Online (Sandbox Code Playgroud)

我用以下命令编译:

gcc/g++ -c main.c -o main.o
gcc/g++ -c func.c -o func.o
gcc/g++ main.o func.o -o main
Run Code Online (Sandbox Code Playgroud)

g ++/clang ++抱怨multiple definition of def_var(这是我预期的行为,不使用extern时).gcc/clang编译得很好.(使用gcc 7.3.1和clang 5.0)

根据这个链接:

暂定定义是一种可能或可能不作为定义的声明.如果在同一翻译单元中较早或较晚发现实际的外部定义,则暂定定义仅作为声明.

所以我的变量 …

c c++ extern

11
推荐指数
2
解决办法
1012
查看次数

标签 统计

c ×3

c++ ×2

extern ×1

macros ×1

standards ×1

syntax ×1