强制将c ++的一部分编译为C语言

问题描述 投票:5回答:1

我想在c ++源代码中定义一个应该是POD的结构(所以它应该基于C标准而不是C ++编译)

例如,假设我在c ++文件中有以下代码:

struct myStruct
{
   int x;
   int y;
}
class MyClass
{
    int x;
    int y;
}

如果我编译此代码,struct是POD,应该编译为POD。因此,成员变量的位置遵循C标准,该标准已明确定义。

但假设用户可能会错误地将代码更改为此代码:

struct myStruct
{

   int x;
   int y;
private:
   int z;
}
class MyClass
{
    int x;
    int y;
}

现在结构不是POD,编译器可以自由地将成员变量放在内存中。

如何强制编译器确保始终根据C标准编译结构?

请注意,我不能将代码放在* .c代码中,因为我正在开发一个可以包含在* .cpp源代码中的头代码。

c++ c struct
1个回答
11
投票

您无法强制翻译人员将其视为“C”。但是你可以添加一个断言它与C代码兼容。

#include <type_traits>

struct myStruct
{
   int x;
   int y;
};

static_assert(std::is_pod_v<myStruct>, "Violated POD-ness of myStruct!");
© www.soinside.com 2019 - 2024. All rights reserved.