ページ 11

一行に関数、もしくはマクロが2つ宣言?

Posted: 2016年5月17日(火) 21:32
by Kona
C++初心者です。はじめて質問します。
クラスや#defineで一行に関数やマクロを2つ並べて宣言してるのですが,
文法的にどのような意味があるのでしょうか?

コード:

//1
class LOCKABLE AnnotatedMixin : public PARENT
{
public:
    void lock() EXCLUSIVE_LOCK_FUNCTION() // <-------
    {
        PARENT::lock();
    }

//2
#define EXCLUSIVE_LOCK_FUNCTION(...)  _attribute__((exclusive_lock_function(__VA_ARGS__)))   // <-------

 

Re: 一行に関数、もしくはマクロが2つ宣言?

Posted: 2016年5月17日(火) 23:32
by へにっくす
ここの事をいってるのかな。
仮想通貨 BitCoin のオープンソースの一部ですね。

https://dev.visucore.com/bitcoin/doxyge ... mixin.html

LLVM Clangのオプション-Wthread-safetyを指定することで
EXCLUSIVE_LOCK_FUNCTION()

_attribute__((exclusive_lock_function()))
に置き換わると予想します。
オプション指定していないとEXCLUSIVE_LOCK_FUNCTION()がなくなるだけ。
文法的にはそれだけだと思います。

_attribute__((exclusive_lock_function()))
に関しては、以下を参照。英語です。今はEXCLUSIVE_LOCK_FUNCTION()がACQUIRE()になってるのかな。
CLang 3.9 documentation - Thread Safety Analysis

スレッドセーフで調べると幸せになれるかもしれません。
(使ったことがないので的外れでしたらすみません)

Re: 一行に関数、もしくはマクロが2つ宣言?

Posted: 2016年5月18日(水) 22:21
by kona
回答有難うございました。

#defineが関数名でも使えるを知りませんでした。
また、処理内容についてもアドバイス頂きとても感謝です。