假设我在源文件中有这个小功能
static void foo() {}
Run Code Online (Sandbox Code Playgroud)
我构建了二进制文件的优化版本,但我不希望这个函数内联(出于优化目的).我可以在源代码中添加一个宏来阻止内联吗?
IMO只使函数具有翻译单元的范围.
"静态"和"静态内联"功能有什么区别?
为什么要inline放在头文件中,而不是放在.c文件中?
我理解"内联"本身就是对编译器的建议,并且在它的结构中它可能会或可能不会内联函数,它也会产生可链接的目标代码.
我认为"静态内联"执行相同的操作(可能内联也可能不内联),但在内联时不会产生可链接的目标代码(因为没有其他模块可以链接到它).
"extern inline"在哪里适合图片?
假设我想用内联函数替换预处理器宏,并要求此函数被内联(例如,因为它使用__FILE__和__LINE__宏,这些宏应该为调用者而不是这个调用函数解析).也就是说,如果函数没有内联,我想看到编译器或链接器错误."extern inline"这样做吗?(我假设,如果没有,除了坚持使用宏之外,没有办法实现这种行为.)
C++和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中定义了我的函数(没有头声明),如下所示:
inline int func(int i) {
return i+1;
}
Run Code Online (Sandbox Code Playgroud)
然后在下面的同一个文件中我使用它:
...
i = func(i);
Run Code Online (Sandbox Code Playgroud)
在链接期间,我得到了"未定义的引用'func'".为什么?
我在stackoverflow中读了几个关于inlineC的问题,但仍然不清楚.
static inline void f(void) {}没有实际的区别static void f(void) {}.inline void f(void) {}在C中不能像C++那样工作.它在C中如何工作?extern inline void f(void);什么?我从来没有真正inline在我的C程序中找到关键字的使用,当我在其他人的代码中看到这个关键字时,它几乎总是static inline,我认为没有区别static.
什么是之间的区别static inline,extern inline和正常的inline功能?
我已经看到了一些模糊的解释.据我所知,static inline不仅仅是一个inline仅在某个文件中引用的函数,因为static关键字通常意味着.这同样适用于extern inline过我想,这是不一样的解释与extern变量.任何答案将不胜感激!
以下代码:
#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使用?
我想在.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()
有人能解释一下这背后的逻辑吗?谢谢.
如果我在.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,但如果它在这种情况下不忽略它怎么办?