试图了解如何将 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 代码的主要内容,如果未能解决你的问题,请参考以下文章