2016-06-06 36 views
-6

想,我有以下程序:在哈希表的属性存储功能名称

__attribute__((annotate("ex"))) void ex() {}; 
void val() {}; 

__attribute__((annotate("foo"))) void foo() { 
ex(); 
cout<<"You have called a function with an attribute"<<endl; 
val(); 
cerr<<"Error!You have called a function without an attribute"<<endl; 
} 

int main() 
{ 
foo(); 
return 0; 
} 

如果你注意观察,主要的()调用foo()和Foo()又调用前()和val( )。当ex()被调用时,没有问题,因为它有一个与它相关的属性,但是当它调用val()时,它应该显示错误消息,指出这个函数没有任何属性。

因此,为此,我需要跟踪哈希表中没有属性且没有属性的函数,并在函数被调用时检查它。

而且,我不知道如何做到这一点?我希望现在清楚。

+3

为什么你需要这样做?编译器应该告诉你是否重新声明了一个函数。 – NathanOliver

+0

@NathanOliver:我正在编译这个原因 – pavikirthi

+3

阅读[符号表](https://en.wikipedia.org/wiki/Symbol_table)并实施一个。 – Shreevardhan

回答

0

看起来你需要使用结构

我给你看一个参数,你可以扩展到一个函数。

函数参数有一个类型

struct Function_Parameter 
{ 
    std::string name; 
    std::string type; 
}; 

函数也有-一个名称和返回类型:

struct Function_Token 
{ 
    std::string name; 
    std::string return_type; 
}; 

函数可以有零个或多个参数。因此通常意味着某种容器。因此,使用std::vector

struct Function_Token 
{ 
    std::string name; 
    std::string return_type; 
    std::vector<Function_Parameter> parameters; 
}; 

许多编译可能名称转换成数值(使用某种散列函数或表)。这通常会加快编译速度,因为字符串需要很长时间才能进行比较。