Как мне найти эту проблему (функция Macro vs Inline в области видимости) - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть несколько вопросов о области действия.

Я думаю, что макрос действует как копирование и вставка, и встроенная функция похожа на это, но не одинакова.

Но я не знаю почемуэтот код действует против моего разума.

Я не знаю, какое ключевое слово для поиска, пожалуйста, сообщите мне только несколько ключевых слов для поиска.

Спасибо за чтение.

'''
inline int add(int a, int b)
{
    return a + b;
}

int main()
{
    int num1;

    num1 = add(10, 20);

    printf("%d\n", num1);

    return 0;
} // is same as below
'''
int main()
{
    int num1;

    num1 = int add(int a=10, int b=20)
    {
        return a + b;
    };

    printf("%d\n", num1);

    return 0;
}
'''
#define xtest() cout<<x<<endl

int x=0;

inline void test(){
    cout<<x<<endl;
}

int main(void){
    int x=10;
    test();
    cout<<x<<endl;
    xtest();
    {
        int x = 20;
        test();
        cout<<x<<endl;
        xtest();
    }
    return 0;
}

Я понимаю, xtest() и {cout << x << endl} действуют одинаково, и результат верен, но почему test() действует иначе?

1 Ответ

2 голосов
/ 01 апреля 2019

Функции, помеченные как inline, отличаются от функций, отличных от inline, только одним способом: они могут быть определены в нескольких единицах перевода (= исходные файлы) без нарушения правила одного определения (= ошибка компоновщика). Это все . Во всем остальном они ведут себя так же, как и любая другая функция. Они никоим образом не похожи на макросы.

...