相关疑难解决方法(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万
查看次数

外部内联

我理解"内联"本身就是对编译器的建议,并且在它的结构中它可能会或可能不会内联函数,它也会产生可链接的目标代码.

我认为"静态内联"执行相同的操作(可能内联也可能不内联),但在内联时不会产生可链接的目标代码(因为没有其他模块可以链接到它).

"extern inline"在哪里适合图片?

假设我想用内联函数替换预处理器宏,并要求此函数被内联(例如,因为它使用__FILE__和__LINE__宏,这些宏应该为调用者而不是这个调用函数解析).也就是说,如果函数没有内联,我想看到编译器或链接器错误."extern inline"这样做吗?(我假设,如果没有,除了坚持使用宏之外,没有办法实现这种行为.)

C++和C之间是否存在差异?

不同编译器供应商和版本之间是否存在差异?

c c++ extern inline-functions

86
推荐指数
3
解决办法
4万
查看次数

静态缓冲区在哪里分配?

假设我有一个文件test.c,其中包含:

char buffer1[1024];

int somefunction()
{
      char buffer2[1024];
      // do stuff
}
Run Code Online (Sandbox Code Playgroud)

现在我知道buffer2是在属于某些函数调用的帧上的堆栈上分配的,但是在哪里分配了buffer1?

c static

4
推荐指数
1
解决办法
3339
查看次数

标签 统计

c ×3

c++ ×1

extern ×1

inline-functions ×1

standards ×1

static ×1

syntax ×1