小编Mar*_*c-O的帖子

如何在 C++ 中获取类型的大小?

我正在寻找一个返回类型大小的 C++ 函数。例如 :

#include <stdint.h> 

int16_t my_var; 
int32_t size_of_var; 

// magical_function is what I'm looking for
// size_of_var should be equal to 16 because my_var is a int16_t
size_of_var = my_var.magical_function() ; 
Run Code Online (Sandbox Code Playgroud)

我知道 size() 的存在是为了获取字符串的长度,所以我猜也有一个函数表明了这一点。

此外,我正在使用 Clang 库,所以我可以获得一个类型(http://clang.llvm.org/doxygen/classclang_1_1Type.html),但我目前不知道比较 2 种类型并了解它们之间的较大值二。

c++ clang oclint

7
推荐指数
2
解决办法
5822
查看次数

Clang在哪里存储int32_t*p和int32_t p [10]之间的区别?

我想确保这种类型的代码

void f1 (int32_t p[10]);
void f2 (int32_t *p);
void b ()
{
    int_32_t a[10];
    f1(a);
    f2(a);
}
Run Code Online (Sandbox Code Playgroud)

当有人编码时不会发生,因为当使用f2()时,您可能会丢失有关数组边界的信息.它是MISRA标准规则之一.

但AST-dump在2个函数声明之间没有区别:

|-FunctionDecl 0x2204140 <test.cpp:3:1, col:23> f1 'void (int32_t *)'
  | -ParmVarDecl 0x2204040 <col:10, col:22> p 'int32_t *'
|-FunctionDecl 0x2204280 <line:4:1, col:20> f2 'void (int32_t *)'
  | -ParmVarDecl 0x2204200 <col:10, col:19> p 'int32_t *'
Run Code Online (Sandbox Code Playgroud)

我猜Clang确实记录了数组(10)的大小,但AST-dump似乎告诉了相反的情况.

有没有办法区分?

c c++ clang

5
推荐指数
1
解决办法
192
查看次数

获取Clang中变量的大小

使用Clang库,是否有一些可用的方法来获取变量的大小(就像我sizeof()在常规的C/C++程序中使用的那样?

我能够(这是我想要做的)发现VarDecl,但目前我仍然无法在Clang命名空间中找到任何方法来获取当前发现的var的大小VarDecl

c c++ clang

4
推荐指数
1
解决办法
1069
查看次数

如何获取当前使用 Clang 访问的文件的名称?

当我访问一个声明(在 Clang 库中)时,如何获取写入Decl该声明的文件的名称?Decl

有一个FileData类,但我找不到任何其他类可以让我得到这个FileData

c++ clang clang++

3
推荐指数
1
解决办法
1168
查看次数

此代码中的演员阵容在哪里?

我有一些代码行从静态代码分析器返回错误.

该分析器使用clang编程,违反规则的源代码非常简单:

// For each cast expression in the code 
bool VisitCastExpr(CastExpr *castExpr){
    string errorMsg;
    string CastName = castExpr->getCastKindName();
    // If cast is from pointer to everything different than an integer, add violation 
    if((castExpr->getCastKind() == CK_MemberPointerToBoolean)||(castExpr->getCastKind() == CK_PointerToBoolean)||(castExpr->getCastKind() == CK_CPointerToObjCPointerCast)||(castExpr->getCastKind() == CK_BlockPointerToObjCPointerCast)||(castExpr->getCastKind() == CK_AnyPointerToBlockPointerCast)){
        errorMsg = "Forbidden cast "+CastName+" from pointer to non-integer type";
        addViolation(castExpr,this,errorMsg);
    }
    return true; 
}
Run Code Online (Sandbox Code Playgroud)

所以基本上,它只是在从指针到不同于整数的某些东西进行某些强制转换(隐式或显式)时添加违规.

以下是返回错误的表达式之一:

if(st_parametre_embarque.qs_nom.contains("PAR")){.

st_parametre_embarque只是一个结构,而这个领域qs_nom是一个QString.

方法Qstring :: contains()确实返回一个布尔值.

以下是代码分析器产生的违规消息:

禁止从指针转换为非整数类型的PointerToBoolean

所以我真的没有看到可能存在的地方castExpr,而且从指针 …

c++ qt casting clang

3
推荐指数
1
解决办法
235
查看次数

矩阵int [5] [5]是否与int**相同​​?

简单的一维数组被认为是一个指针,但矩阵的情况也是如此?

但是,立方体int[5][5][5]也会被认为是int ***

c

2
推荐指数
1
解决办法
1166
查看次数

在字符串行中查找转义字符

使用std库和函数find,如何知道给定字符串中是否有任何转义字符?

例如 :

string line = "bla bla bla \n blabla";
bool hasEscapedSequence = (line.find("\n",0) < line.size());
Run Code Online (Sandbox Code Playgroud)

这显然是行不通的,因为\nfind将被转义.如果我尝试(line.find("\\n",0) < line.size());,它似乎没有改变任何东西

我应该怎么做 ?

c++ string function find

1
推荐指数
1
解决办法
95
查看次数

对 C++ 空指针使用 NULL 或 nullptr?

我正在尝试在虚拟测试文件上制作一些 Clang AST 转储。这是我正在使用的命令行:

 clang -Xclang -ast-dump -fsyntax-only test.cpp
Run Code Online (Sandbox Code Playgroud)

int * a = NULL;可以被我的 test.c 识别,但不能被我的 test.cpp 识别。

我也尝试过int * a = nullptr;,但这也不起作用。

我应该更改命令行中的一些选项吗?

c++ null clang

0
推荐指数
1
解决办法
2966
查看次数

标签 统计

c++ ×7

clang ×6

c ×3

casting ×1

clang++ ×1

find ×1

function ×1

null ×1

oclint ×1

qt ×1

string ×1