Tag: inline

使用gcc内联C代码中的所有函数

我有很多没有递归的C程序。 我想让程序没有用户定义的function,但主要function。 GCC可以进行内联但是处于IR级别,所以我无法获得C代码。 资源: int calc(int a , int b) { a=a+b-2; return a ; } int main() { int x=4,y=7; x=calc(x,y); return 0 ; } 目标: int main() { int x=4,y=7; int calc_A=x,calc_B=y; calc_A=calc_A+calc_B-2; x=calc_A; return 0 ; }

编译时asm中不可能的约束

在我的Atmel ASF项目中,我正在尝试构建以下内联asm代码。 但是我在编译时遇到了不可能的限制。 编译器指向此行__asm__ __volatile__ ,我错过了什么? #define OUTPORT PORTD #define OUTBIT 3 // PD.3 uint8_t rport ,rbits; uint8_t *buf = message; asm volatile( “in __tmp_reg__, __SREG__ \n\t” // 1 Save SREG for later “cli \n\t” // 1 Clear interrupts “in %[rport], %[port] \n\t” // 1 Move PORTB adress to rport : //Outputs [rport] “=&r” (rport) […]

ARM + gcc:不要使用一个大的.rodata部分

我想用gcc编译一个带有ARM处理器链接时间优化的程序。 当我在没有LTO的情况下编译时,系统会被编译。 当我启用LTO(使用-flto)时,我得到以下汇编程序错误: 错误:文字常量无效:池需要更近 环顾网络,我发现这与我系统中的常量有关,这些常量放在一个名为.rodata的特殊部分中,它被称为常量池,位于我系统中的.text部分之后。 似乎在使用LTO进行编译时,由于内联和其他优化,这个.rodata部分离指令太远,因此不再可能寻址常量。 是否可以在使用它们的函数之后放置常量? 或者是否可以使用其他寻址模式,以便仍然可以解决.rodata部分? 谢谢。

如何将scipy.weave.inline与外部C库一起使用?

我试图理解weave.inline在我的Python程序中包装C代码。 下面的代码简单地使用Numpy数组并将其所有元素乘以2。 inl.py import numpy import scipy.weave a = numpy.array([1.0, 2.0, 3.0]) N = a.shape[0] print a code = \ “”” int i; for(i = 0; i < N; i++) { a[i] = a[i] * 2; } """ scipy.weave.inline(code, ['a','N']) print a 然后我想将内联代码中的一些函数传递给外部库。 让它成为2的琐碎乘法。所以我创建了两个文件: mult.c #include “mult.h” float mult(float n) { return n * 2; […]

_LINE__在内联函数中的行为

我有一个宏将行号和文件名传递给error handling程序: #define SYSTEM_FAILURE (error_code, comment) \ System_Failure((error_code), (comment), __LINE__, __FILE__); 在内联函数中使用时,如何解析__LINE__ ? file.h: inline int divide(int x, int y) { if (y == 0) { SYSTEM_FAILURE(ENUM_DIVIDE_BY_ZERO, “divide by zero error”); } return x/y; } __LINE__包含头文件中的行号,或者调用内联函数的源文件的行号(假设编译器在源代码中执行“粘贴”)?

c99内联语义与gcc(mspgcc)

我正在编写一些我希望内联的函数。 在这里阅读并使用第二个c99内联选项,内联所有声明和定义,如下所示: extern inline void SPFD54124B_write_cmd(uint16_t command); 在标题中,和 inline void SPFD54124B_write_cmd(uint16_t command) { spi_write(command, CMD_WIDTH); } 在相应的c文件中。 我期待获得function的内联版本。 但是当我编译我得到: Generating dependencies dep/spi.d from src/spi.c Generating dependencies dep/spfd54124b.d from src/spfd54124b.c Generating dependencies dep/pomodoro.d from src/pomodoro.c Generating dependencies dep/font8x8_ualnum.d from src/font8x8_ualnum.c Generating dependencies dep/font8x8_basic.d from src/font8x8_basic.c Generating dependencies dep/evading_util.d from src/evading_util.c Compiling src/evading_util.c Compiling src/font8x8_basic.c Compiling src/font8x8_ualnum.c […]

Perl:如何将所有内联C代码放入单独的文件中?

这个问题很简单,我可以感受到RTFM的到来。 但是,我整个上午都在看文档( Inline , Inline-C , Inline-C-Cookbook ),我无法弄清楚如何解决这个问题。 我想使用内联C,但我不希望在与perl代码相同的文件中使用C代码。 (Emacs不喜欢在一个文件中使用两种语言。原则上这是方便的,但实际上我必须在一个文件中编辑我的C然后将其复制粘贴到我的perl脚本中。) 这是工作perl: #!/usr/bin/perl use Inline C => DATA; use strict; use warnings; use List::Util qw(sum); use feature qw(say); my @array = (1..10); say “native perl: “, sum(@array), “, Inline C: “, sum1(\@array); __END__ __C__ double sum1(AV* array) { int i; double sum = 0.0; for (i=0; […]

‘unlockEnvironment’通过’Rcpp’而不是’inline’实现

实际问题 有人可以让我开始我需要做什么来实现unlockEnvironment下面的unlockEnvironment代码? 背景 看过这篇文章 ,尝试了基于C代码的Winston Chang的解决方案。 它有效,但我觉得我知道太少(实际上没什么,都是)关于内联或C / C ++来真正知道我在做什么;-) 所以我认为这将是一个很好的机会,最终开始学习如何使用R作为C和C ++的接口。 而且我想我会跳上Rcpp火车这样做! Winston’s Gist的代码 require(“inline”) inc <- ' /* This is taken from envir.c in the R 2.15.1 source https://github.com/SurajGupta/r-source/blob/master/src/main/envir.c */ #define FRAME_LOCK_MASK (1<<14) #define FRAME_IS_LOCKED(e) (ENVFLAGS(e) & FRAME_LOCK_MASK) #define UNLOCK_FRAME(e) SET_ENVFLAGS(e, ENVFLAGS(e) & (~ FRAME_LOCK_MASK)) ' src <- ' if (TYPEOF(env) == NILSXP) […]

强制在其他翻译单元中使用内联函数

这部分gcc手册非常模糊,我无法理解重复尝试后forceinline属性的用法。 我正在定义一个对象和某些函数来操纵该对象。 这些函数中很少有可以使用primefaces指令,我希望编译器内联这些函数。 但是我不想在头文件中编写这些函数,并在linux内核中使用“static inline”声明它们。 有没有办法强制gcc从另一个翻译单元内联函数?

内联函数有地址吗?

在“The C ++ Programming Language”一书的第7.1.1节中,作者指出: “内联函数仍然具有唯一的地址,内联函数的静态变量也是如此” 我很迷惑。 如果我有一个内联函数,那么它就没有地址。 这也发生在C中吗?