我的一位朋友向我提出了这个问题.我被困住了因为我不善于使用异常.请记住,我们都在使用C++的工作环境中工作,但在C传统中进行错误处理.他的问题是这样的:
函数A
调用B
依次调用C
.抛出异常C
并且该异常的catch块在A
.B
调用之前获得的资源会发生什么C
?我们如何清理它们?我的回答是使用RAII.但即使我说出来,我也知道它不会起作用.我们有很多以C模式编写的代码库.在代码中我没有看到自动指针等.资源不一定包含在类中.即使它们是,在大多数情况下,析构函数仍留给编译器.简而言之,一切都是手动完成的.
真正的问题是如何通过巨大的代码库来实现从C错误处理到异常的转换?我的朋友提出的问题只是当你在C语言错误处理方面站稳脚跟并想知道如何从那里迁移到异常时可能出现的问题之一.
是否有任何类型的查看器或插件可以在网页上查看.epub文档?谷歌搜索发现了大量可安装的epub查看桌面软件,但我似乎无法找到任何在网页上嵌入此格式的内容.也许你们对此有一些了解?
一点介绍,
我目前正在编写一个小的(读取微小的)RTOS内核,它应该与内核中的大多数内容单片.但是我找不到下面列出的一些事情的很多信息,这将是非常有用的,除此之外,它实际上不是某种大学项目,而是我正在按照自己的意愿行事.
回答所有问题的一个更好的选择是,如果你可以向我推荐一个免费提供的RTOS(甚至免费书籍),最好是实现用户空间并且是可抢占的(但不像linux那样复杂).Linux有一些我迄今为止看过的最糟糕的文档(我确实尝试过从linux代码中解决问题,但是只有大量的定义分散在一百万个文件和函数钩子中,并且有很多名字,每个版本都会重命名有时感动...)
"抢占"和"上下文切换"有什么区别?
抢占式和非抢占式内核之间的主要区别是什么?程序员需要做什么工作才能使内核抢占先机?
如何创建和使用用户模式?
ARM文档说,在用户模式下,任何切换到特权模式的指令都将被视为未定义指令.
如果是这样,用户空间程序使用内核代码的唯一方法是系统调用?
内核如何响应用户空间或与之交互?
这是否意味着启动后(在一个简单的系统中)唯一的内核线程将是空闲线程?
如果在切换到用户进程时取消映射内核代码和数据所在的页面,那么在系统调用或中断时,内核代码如何在不映射到虚拟地址空间的情况下执行?
"可抢占的内核"是否仅仅意味着内核的设计方式使得在执行内核代码期间进行上下文切换是安全的?或者它是否需要做更多的工作?
哦,如果这里不允许这么多问题,抱歉,找不到任何相关的内容.
我希望有一个C代码的执行时间,以毫秒为单位,我使用msp430f16
.
任何帮助将不胜感激.
谢谢.
我有多个C程序,每个程序都执行相同的功能.我想评估/计算其中哪一个具有较低的功耗(在ARM上)是否有一些工具(模拟器)可以模拟并获得所消耗的功率数量并对桌面上的每个程序进行比较?
基于此,我将决定我最终将哪些应用程序放在ARM上.
我正在尝试更新嵌入式实体,并且JPA似乎生成了错误的SQL。
我有一个带有嵌入式徽标实体的公司实体
@Entity
public class Company {
private Long id;
@Embedded
private Logo logo;
// Omitted other fields, getters, setters, etc
}
@Embeddable
public class Logo {
private String fileName;
private String fileExtension;
private String imageDataType;
// Omitted getters and setters
}
Run Code Online (Sandbox Code Playgroud)
在我的DAO方法中,我试图像这样更新嵌入式徽标:
@Override
public void setLogo(Logo logo, Long companyId) {
String q = "update Company c SET c.logo = :logo where c.id = :companyId";
Query query = entityManager.createQuery(q);
query.setParameter("companyId", companyId);
query.setParameter("logo", logo);
query.executeUpdate();
}
Run Code Online (Sandbox Code Playgroud)
JPA(实际上是Hibernate)生成以下SQL。
update px_company set file_extension, …
Run Code Online (Sandbox Code Playgroud) 考虑:
struct A {
A (int);
A (const A &);
};
struct B {
A foo [2];
B (const A & x, const A & y)
: foo {x, y} /* HERE IS THE PROBLEM */
{}
};
Run Code Online (Sandbox Code Playgroud)
我期待这个工作,因为我在GCC4.3中使用C++ 0x支持,据称支持初始化列表.没有快乐.
我有一个没有默认构造函数的类A. 这是不容谈判的.分配后默认不是一个选项.
我正在尝试创建使用A的B.B :: foo可能不是std :: vector.
我怎么能初始化B::foo
中B(...)
,构建它的元素恰好一次?
目前,我正在考虑用B替换B.
struct B {
A foo_a;
B foo_b;
A * foo () {
assert ((&foo_b) - *&foo_a) == 1);
return &foo_a;
}
B (const A & x, const …
Run Code Online (Sandbox Code Playgroud) 我想找到关于"嵌入式平台上的C++编程"的信息.我用Google搜索,但我无法找到有关该主题的足够信息.我想要找到的是C++在具有详细描述和示例的嵌入式环境中是如何有用的(如果可用的话)
任何人都可以建议任何链接或任何免费的电子书下载,如果我能得到的?
struct Base{
Base(Base &){} // suppress default constructor
};
struct Derived : Base{
};
int main(){
Derived d;
}
Run Code Online (Sandbox Code Playgroud)
显示的代码给出了错误,因为"Base"的默认构造函数(隐式)被抑制.事实上,该标准以12.1美元计价"If there is no user-declared constructor for class X, a default constructor is implicitly declared."
有三件事:
a)标准是否说任何地方如果用户声明构造函数存在于类中,则默认构造函数(隐式)被抑制.它基本上是上面的措辞否定或是否再次暗示:)?
b)为什么会那样?
c)为什么相同的规则不适用于默认的析构函数?
int get1(void) { return test; }
void get2(int* arg) { *arg = test;}
static int test = 5;
int main()
{
int result = 0;
result = get1();
get2(&result);
}
Run Code Online (Sandbox Code Playgroud)
get1()vs get2() - 哪一个对嵌入式系统表现更好?