相关疑难解决方法(0)

在gcc 4.2.2中关闭特定功能的优化

是否可以关闭特定功能的优化?我的一个朋友有一个问题,gcc优化使一些(我不知道)μ控制器代码不起作用.我们知道它是哪些函数,但是我们对代码本身没有任何线索,所以最简单和最安全的方法可能就是为整个函数关闭它.

遗憾的是http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html显示有一个优化函数属性/ pragma,但它需要gcc 4.4,这是我们没有的.

提前致谢

c gcc

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

如何使链接器不排除未调用的函数?

如果我定义了一个函数但不调用它,函数将不会在可执行文件中显示。但是有些情况我们需要告诉链接器不要排除一个函数。例如,我定义了totalview在调试时应由调试器调用的函数。

如果我从某个地方(例如从 main 函数)调用该函数,问题将得到解决,它不会被排除,但是否有一般规则告诉链接器不要排除函数?

c++ linux linker gcc ld

5
推荐指数
1
解决办法
910
查看次数

如何强制在C++中编译函数?

我只是在尝试使用C++.我试图编写一个小宏,以便我定义的所有函数都自动存储在一个映射中,这样我就可以在运行时查询存在的函数并运行它们.代码如下:

#include <map>
using namespace std;

typedef void (*funcPointer)();

map <char*, funcPointer> funcList;

#define Function(x) void x() { funcList[#x] = x; 
#define End }
Run Code Online (Sandbox Code Playgroud)

我被使用了funcPointer,End只是为了便于阅读和实现.现在,我可以将函数定义为

Function(helloWorld)
    cout << "Hello World";
End
Run Code Online (Sandbox Code Playgroud)

现在,要将函数名称作为列表读取并运行所有函数,我使用以下代码:

int main() {
    //helloWorld();
    for (map<char*, funcPointer>::iterator I = funcList.begin(); I != funcList.end(); I++) {
        printf(I->first);
        I->second();
    }
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我保持第一行main()(helloWorld();)注释,编译器不会编译该函数并跳过它进行优化,因为根据编译器,它从不使用.因此,功能列表变空.相反,如果我将函数调用一次,那么每件事情都会完美无缺,除非它打印两次"Hello World".另外,我特意写了宏,所以我不必那样做.

那么,有没有什么方法可以强制编译器编译一个函数,即使它没有被使用?

c++

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

标签 统计

c++ ×2

gcc ×2

c ×1

ld ×1

linker ×1

linux ×1