имя переменной в качестве аргумента макроса

Мы можем объединить две коллекции, используя sub-запрос mongoDB. Вот пример, Комментарии -

`db.commentss.insert([
  { uid:12345, pid:444, comment:"blah" },
  { uid:12345, pid:888, comment:"asdf" },
  { uid:99999, pid:444, comment:"qwer" }])`

Пользователи -

db.userss.insert([
  { uid:12345, name:"john" },
  { uid:99999, name:"mia"  }])

Суб-запрос MongoDB для JOIN -

`db.commentss.find().forEach(
    function (newComments) {
        newComments.userss = db.userss.find( { "uid": newComments.uid } ).toArray();
        db.newCommentUsers.insert(newComments);
    }
);`

Получить результат из недавно созданная коллекция -

db.newCommentUsers.find().pretty()

Результат -

`{
    "_id" : ObjectId("5511236e29709afa03f226ef"),
    "uid" : 12345,
    "pid" : 444,
    "comment" : "blah",
    "userss" : [
        {
            "_id" : ObjectId("5511238129709afa03f226f2"),
            "uid" : 12345,
            "name" : "john"
        }
    ]
}
{
    "_id" : ObjectId("5511236e29709afa03f226f0"),
    "uid" : 12345,
    "pid" : 888,
    "comment" : "asdf",
    "userss" : [
        {
            "_id" : ObjectId("5511238129709afa03f226f2"),
            "uid" : 12345,
            "name" : "john"
        }
    ]
}
{
    "_id" : ObjectId("5511236e29709afa03f226f1"),
    "uid" : 99999,
    "pid" : 444,
    "comment" : "qwer",
    "userss" : [
        {
            "_id" : ObjectId("5511238129709afa03f226f3"),
            "uid" : 99999,
            "name" : "mia"
        }
    ]
}`

Надеюсь, что это поможет.

1
задан gsamaras 17 January 2019 в 15:09
поделиться

4 ответа

Правильный синтаксис будет выглядеть примерно так:

#define MY_MACRO(ident) \
    int ident

int main() {
    MY_MACRO(test);
    test =42;
    return test;
}

Однако, вы рассматривали typedefs ? В отличие от typedef, макросы считаются плохой практикой.

0
ответ дан Gamification 17 January 2019 в 15:09
поделиться

## здесь не применимо, так как он объединяет токен с чем-то еще

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define MY_MACRO(var) int var   

или

#define MY_MACRO(var) \
int var          \

void foo(void)
{
    MY_MACRO(a);

    a = rand();

    printf("%d\n",a);
}
0
ответ дан P__J__ 17 January 2019 в 15:09
поделиться

## вставляет два токена вместе в один токен.

#define poem(var)\
    int jack##var;

// Produces 'int jacksprat;'
poem(sprat)

В вашем случае вам не нужно делать ничего особенного, вы можете просто использовать аргумент напрямую:

#define MY_MACRO(var)\
    int var;
0
ответ дан molbdnilo 17 January 2019 в 15:09
поделиться

Я бы не рекомендовал делать такие вещи. Во всяком случае, есть две проблемы. Прежде всего, чтобы пропустить новую строку, вам нужно \, а не /.

Во-вторых, ## не так. То, что он делает, соединяет var и int. Таким образом, с MY_MACRO(foo) вы получите intfoo;, но вы хотите int foo;

Макрос должен быть таким:

#define MY_MACRO(var)   \
int var 
0
ответ дан Blaze 17 January 2019 в 15:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: