相关疑难解决方法(0)

如何告诉gcc不要内联函数?

假设我在源文件中有这个小功能

static void foo() {}
Run Code Online (Sandbox Code Playgroud)

我构建了二进制文件的优化版本,但我不希望这个函数内联(出于优化目的).我可以在源代码中添加一个宏来阻止内联吗?

c gcc inline

115
推荐指数
7
解决办法
10万
查看次数

"静态"和"静态内联"功能有什么区别?

IMO只使函数具有翻译单元的范围.

"静态"和"静态内联"功能有什么区别?

为什么要inline放在头文件中,而不是放在.c文件中?

c inline

113
推荐指数
5
解决办法
13万
查看次数

外部内联

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

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

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

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

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

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

c c++ extern inline-functions

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

在C中声明和初始化数组

有没有办法先声明然后在C中初始化一个数组?

到目前为止,我一直在初始化一个这样的数组:

int myArray[SIZE] = {1,2,3,4....};
Run Code Online (Sandbox Code Playgroud)

但我需要做这样的事情

int myArray[SIZE];

myArray = {1,2,3,4....};
Run Code Online (Sandbox Code Playgroud)

c arrays initialization

52
推荐指数
2
解决办法
17万
查看次数

C99内联函数在.c文件中

我在.c中定义了我的函数(没有头声明),如下所示:

inline int func(int i) {
 return i+1;
}
Run Code Online (Sandbox Code Playgroud)

然后在下面的同一个文件中我使用它:

...
i = func(i);
Run Code Online (Sandbox Code Playgroud)

在链接期间,我得到了"未定义的引用'func'".为什么?

c c99

36
推荐指数
2
解决办法
2万
查看次数

在C中使用`inline`关键字有什么用?

我在stackoverflow中读了几个关于inlineC的问题,但仍然不清楚.

  1. static inline void f(void) {}没有实际的区别static void f(void) {}.
  2. inline void f(void) {}在C中不能像C++那样工作.它在C中如何工作?
  3. 究竟做了extern inline void f(void);什么?

我从来没有真正inline在我的C程序中找到关键字的使用,当我在其他人的代码中看到这个关键字时,它几乎总是static inline,我认为没有区别static.

c inline c99

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

静态内联,外部内联和普通内联函数之间有什么区别?

什么是之间的区别static inline,extern inline和正常的inline功能?

我已经看到了一些模糊的解释.据我所知,static inline不仅仅是一个inline仅在某个文件中引用的函数,因为static关键字通常意味着.这同样适用于extern inline过我想,这是不一样的解释与extern变量.任何答案将不胜感激!

c static extern inline-functions

25
推荐指数
1
解决办法
8011
查看次数

使用-std = gnu99和内联函数时编译错误

以下代码:

#include <stdio.h>
inline int myfunc (int x) {
    return x+3;
}

int main () {

    printf("%d", myfunc(2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用-std=gnu99标志时不编译(我正在用gcc编译).这是它抛出的错误:

gcc -std=gnu99 -c main.c -o main.o
gcc -std=gnu99 main.o -o main
main.o: In function `main':
main.c:(.text+0x15): undefined reference to `myfunc'
collect2: ld returned 1 exit status
make: *** [main] Error 1
Run Code Online (Sandbox Code Playgroud)

-std=gnu99省略时编译没有问题.有谁知道链接器为什么会抱怨-std=gnu99使用?

c gcc

14
推荐指数
2
解决办法
6574
查看次数

在声明C++中实现

我想在.h文件中包含一个函数的实现.

我知道我宁愿将声明和实现分别与.h和.c文件分开,这不是我的问题的一部分.

当我在类中实现函数时,我没有收到任何错误:

class Foo
{
  public:
    // Class constructor
    Foo() { }
};
Run Code Online (Sandbox Code Playgroud)

当我在类外部实现该函数时(仍然在.h文件中):

class Foo
{
  public:
    // Class constructor
    Foo();
};

Foo::Foo()
{
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:多个定义 Foo:Foo()

有人能解释一下这背后的逻辑吗?谢谢.

c++

14
推荐指数
2
解决办法
1258
查看次数

外部内联函数会发生什么?

如果我在.h文件中定义我的函数会发生什么

extern int returnaint(void);
Run Code Online (Sandbox Code Playgroud)

,在相关的.c文件中定义它

inline int returnaint(void) {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

并将标题包含在另一个.c文件中并使用该函数?当我单独编译事物时,为每个.c文件创建一个目标文件然后链接它们,包括内联函数,或者会发生什么?

我知道编译器可以忽略inline,但如果它在这种情况下不忽略它怎么办?

c compiler-construction linker inline header

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