试图了解如何将 C++ 对转换为 C 代码

Posted

技术标签:

【中文标题】试图了解如何将 C++ 对转换为 C 代码【英文标题】:Trying to understand how C++ pairs can be converted to C code 【发布时间】:2020-04-20 19:14:20 【问题描述】:

所以我正在尝试做一个小测试项目,并且正在观看有关如何制作部分代码的教程,问题是,在用户使用 C++ 的视频上,我正在使用 C。 我试着弄清楚并搜索了一下,但它仍然让我很困惑。

所以我看不懂的代码是这样的:

pair<int, int> generateUnPos() 

    int occupied = 1;
    int line, column;

    while(occupied)
        line = rand() % 4;
        column = rand() %4;
        if(board[line][column] == 0)
            occupied = 0;
        
    

    return make_pair(line, column);

我知道它与结构有关,但我想不通。谁能帮帮我。

【问题讨论】:

如果你正在使用C,那么你应该学习C 材料,而不是C++ 材料。 C++ 和 C 是两种不同的语言。 要学习C编程,请阅读Modern C 【参考方案1】:

C 中不存在模板,因此您需要自定义类型,如下所示:

struct pair_int_int 
    int first;
    int second;
;

然后像这样返回它:

return (struct pair_int_int)line, column;

【讨论】:

另一种方法是传入指针并且不返回任何内容:void generateUnPos(int * line, int * column) @user4581301:您的替代方案可能会更慢,并且可读性较差。在some implementations 上,可能会使用两个处理器寄存器来返回这样的一对。【参考方案2】:

您可以将 pair 视为 C 中的结构。

typedef struct 
    int line;
    int column;
 Position;

那么这段代码应该是:

Position generateUnPos() 

    int occupied = 1;
    int line, column;

    while (occupied) 
        line = rand() % 4;
        column = rand() % 4;
        if (board[line][column] == 0) 
            occupied = 0;
        
    
    Position pos = line, column;
    return pos;

【讨论】:

我不认为return line, column ; 是有效的C。你需要像我一样使用复合文字。 将结构称为Position 是个好主意。比重复使用 pair 更具可读性。 这也是我在 C++ 中所做的! @Joseph Sible-Reinstate Monica,是的,你是对的。但我收到以下警告:警告:结构初始化程序中的多余元素 哦,我知道怎么做了,但是有必要在Position内部再次初始化line和column变量吗?我以为他们已经初始化了。对不起,如果这是一个愚蠢的问题,我对 C 来说有点陌生

以上是关于试图了解如何将 C++ 对转换为 C 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何将 C++ 转换为 C# 代码而 statmernt 代码递减

如何在 C++ 中将字符串转换为字符? [复制]

将 Fortran 转换为 C 或 C++

如何将 void* 转换为 foo* 以符合 C++?

c ++奇怪的问题将char转换为int

将缓冲区转换为字符串 C++ boost