草庐IT

ASM_FUNC

全部标签

c++ - __func__ 未在预处理输出中替换

我正在阅读C/C++中的__FUNCTION__/__func__(它们用于打印使用它们的函数的名称)。我读到的每个地方都说这些是宏,在预处理时被替换。因此,我使用命令gcc-Eprog.c查看预处理后的输出,对此进行了调查。但是我看到__func__和__FUNCTION__都没有被预处理器替换为函数名。那么,它是一个宏吗?如果不是,它是什么以及如何实现?编辑甚至尝试过cppprog.c。但仍未更换。还有__FILE__,__LINE__,and__FUNCTION__usageinC++这篇文章说它永远不会影响性能。请澄清。 最佳答案

c++ - macro func 和 function func 是如何区别开来的呢?

#includeintfunc(int,int);#definefunc(x,y)x/y+xintmain(){inti,j;scanf("%d",&i);scanf("%d",&j);printf("%d",func(i+j,3));printf("%d\n",func(i+j,3));}intfunc(intx,inty){returny/x+y;}应该向这段代码添加什么,以便第一个输出是宏的结果,第二个是函数的结果? 最佳答案 几种方式:printf("%d",func(i+j,3));//Macrocall#undeffun

C++ void 作为函数调用的前缀。例如。 `main() {void func();}`

voidfunc(){assert(0);}intmain(){voidfunc();}上面的代码没有调用func(),至少没有到达断言。并不是说我真的需要知道,但我只是好奇,这里发生了什么? 最佳答案 您正在为名为func的函数声明原型(prototype),该函数不返回任何内容且不接受任何参数。这是函数调用和函数原型(prototype)之间的(其中之一)细微差别。请注意main上面的行,即voidfunc(){assert(0);},对这是原型(prototype)还是调用没有影响。您可以删除它,代码会做同样的事情-即什么都不

c++ - 使用内联 ASM 进行非常规调用

我正在使用具有内置金属库(掩模ROM)的专有MCU。我使用的编译器是clang,它使用类似GCC的内联ASM。我遇到的问题是调用库,因为库没有一致的调用约定。虽然我找到了解决方案,但我发现在某些情况下,编译器会在调用前立即进行破坏注册的优化,我认为我做事的方式有问题。这是我正在使用的代码:intEchoByte(){registerintasmHex__asm__("R1")=Hex;asmvolatile("//AssertInputtoR1forMASKROM_EchoByte"::"r"(asmHex):"%R1");((volatilevoid(*)(void))(MASKRO

c++ - 错误 LNK2019 : unresolved external symbol ___iob_func referenced in function "void __cdecl Padding(int)"

使用FTDIAPI可以在VisualStudio2012下正常编译和链接。但在VS2014下,它给出:ErrorLNK2019:unresolvedexternalsymbol___iob_funcreferencedinfunction"void__cdeclPadding(int)"标准库有变化吗? 最佳答案 是的,标准库已经改变,FTDI似乎并不关心-至少从CDM2.12.18驱动程序版本开始不关心。问题在thisquestion的答案中描述。.ftd2xx.lib中devcon.obj的void__cdeclPadding(

c++ - GDB:仅当先前的中断在 func2 上时才在 func1 上中断

我有两个函数,func1和func2,每个函数都设置了一个断点。是否可以让GDB在func2断点处停止,前提是前一个断点是func1? 最佳答案 最好的方法是在断点中使用命令。您可以指示GDB在遇到两个断点时执行某些命令(例如,增加计数器)。根据这些变量/标志的计数有条件地停止执行。我在thislink上找到了这个信息.请参阅相同的以获取更多详细信息。这篇文章写得很好,有适当的例子。希望这会有所帮助。 关于c++-GDB:仅当先前的中断在func2上时才在func1上中断,我们在Stac

c++ - 使用来自 asm 的引用参数调用 C++ 成员函数

我想通过asmblock调用C++成员函数。编译器是MSVC++(VS2008),可移植性不是问题。我必须为嵌入式系统构建一个远程处理/RMI类型的机制。客户端发送对象名称、方法名称、参数(序列化),我需要将方法调用到适当的对象。我可以从PDB文件中获取的类型信息。我需要编写一个通用的Invoke函数。我被困在如何调用一个以对象为参数的成员函数上。特别地。我无法获得复制ctor的指针。任何想法。PS:下面的代码可以为C::funcRef正确编译和运行#includestructPoint{intx;inty;Point(){x=10;y=10;}Point(constPoint&p){

c++ - Mac 上的问题 : "Can' t find a register in class BREG while reloading asm"

我尝试将一些代码移植到MacOSX上。该程序使用了“ttmath”库,一个headerbig-numheader库。这个库在windows和linux上都运行良好,但是当我尝试在Mac上编译和运行它时,总是出现以下错误消息:"can'tfindaregisterinclass'BREG'whilereloading'asm'".我发现一些文档说这个问题是由于旧版本的GCC编译器(build5488)引起的,但在我更新GCC后仍然显示此消息。目前我的GCC版本是:i686-apple-darwin9-gcc-4.0.1(GCC)4.0.1(AppleInc.build5490)操作系统是

c++ - 如何在 __asm 中使用变量?

我正在使用VC编译器编译此C++代码。我正在尝试使用__asm语句调用一个采用两个WORD(又名unsignedshort)参数的函数,如下所示:__declspec(naked)void__stdcallCallFunction(WORDa,WORDb){__asm{PUSHEBPMOVEBP,ESPPUSHaPUSHbCALLfunctionAddressLEAVERETN}}functionAddress处的函数只是输出a+b的结果。然后调用CallFuncion(5,5);打印“64351”或类似的东西。问题是在__asm语句中使用a和b变量时,因为这有效:PUSHEBPMOV

c++ - 回调函数 : difference between void(*func)(int) and void(func)(int)

假设我有一个函数:voidfoo(inti){cout我将这个函数传递给:voidfunction1(void(callback)(int),intarg){callback(arg);}voidfunction2(void(*callback)(int),intarg){callback(arg);}这两个函数是一样的吗?两者有什么区别吗? 最佳答案 规则是,在函数的参数列表中,声明为具有函数类型的参数被调整为具有指向函数类型的指针(类似地,可能更广为人知的是,声明为类型为“数组T”调整为“指向T的指针”类型。允许在声明符中使用冗