我正在维护别人的代码.代码在Linux平台上使用GCC 4.4.3用C语言编写.但是,代码跳了很多,很难找到调用所有函数的位置.
在Visual Studio中,有一个名为"调用层次结构"的功能,它将显示调用和调用函数的位置.Emacs(23.1.1)有这样的功能吗?
我有一些用于键入大括号的字符映射,我希望根据文件的扩展名来表现不同 - 我想这将是非常有用的能力.
关于如何从我的.vimrc或插件中实现这一点的任何想法?
谢谢!
我正在尝试使用Java发送电子邮件:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
// Recipient's email ID needs to be mentioned.
String to = "abcd@gmail.com";
// Sender's email ID needs to be mentioned
String from = "web@gmail.com";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties); …Run Code Online (Sandbox Code Playgroud) void aFunction_2()
{
char* c = new char[10];
c = "abcefgh";
}
Run Code Online (Sandbox Code Playgroud)
问题:
将:c = "abdefgh"存储在new char[10]?
如果c = "abcdefgh"是另一个内存区域我应该解除它吗?
如果我想保存信息,char[10]我会使用一个函数strcpy来将信息放入char[10]?
我有一个数字列表如下:
0,16,32,48 ......
我需要以十六进制输出这些数字:
0000,0010,0020,0030,0040 ...
我尝试过如下解决方案:
printf("%.4x",a); // where a is an integer
Run Code Online (Sandbox Code Playgroud)
但我得到的结果是:
0000,0001 0002,0003,0004 ...
我想我就在附近.任何人都可以帮忙,因为我printf在C中不太擅长.
谢谢.
说我有一个示例表:
id_pk value
------------
1 a
2 b
3 c
Run Code Online (Sandbox Code Playgroud)
我有一个示例PL/SQL块,它有一个查询,当前选择一行到一个数组:
declare
type t_table is table of myTable%rowtype;
n_RequiredId myTable.id_pk%type := 1;
t_Output t_table := t_table();
begin
select m.id_pk, m.value
bulk collect into t_Output
from myTable m
where m.id_pk = n_RequiredId;
end;
Run Code Online (Sandbox Code Playgroud)
我需要做的是实现一个选择单个行到数组的能力,如上面的块所示,或者选择所有行到一个数组,如果n_RequiredID,实际上是一个用户输入参数,设置为null.
问题是,处理这种情况的最佳做法是什么?
我可以想到将where我的查询的子句修改为这样的事情:
where m.id_pk = nvl(n_RequiredId, m.id_pk);
Run Code Online (Sandbox Code Playgroud)
但我想如果参数不为空,那将会减慢查询速度,我记得Kyte说这个方法真的很糟糕.
我还可以考虑实现以下PL/SQL逻辑:
if n_RequiredId is null then
select m.id_pk, m.value bulk collect into t_Output from myTable m;
else
select m.id_pk, m.value bulk …Run Code Online (Sandbox Code Playgroud) 我们知道,在运行时,当内存中没有足够的空间来形成对象时,垃圾收集会自动请求。据我所知,垃圾收集会自动调用,但是当我们在现实世界中进行一些编程时,调用垃圾收集就变得必不可少。举个例子,如果我们在第一步中编写一个程序,我想调用垃圾收集来优化内存以进一步创建对象的意思是在运行时。那么我们如何调用垃圾收集器呢?
我对在c#中使用析构函数有点困惑.根据我的知识,我们不能根据我的意愿调用析构函数,它会在垃圾收集器之前自动调用,以便在类(对象)上执行一些工作,所以我想询问我们是否在c#中使用析构函数然后我们需要垃圾收集器.我知道析构函数可以处理内存,那么为什么我们需要垃圾收集器呢?
我刚刚读到这一点,通过指向第一个数组成员的指针,您可以通过添加到指针来循环.
char my_array[] = "I am an array of chars";
char *my_pointer = my_array;
printf("%c\n", *my_pointer);
my_pointer++;
printf("%c", *my_pointer);
Run Code Online (Sandbox Code Playgroud)
我想这意味着数组成员总是按顺序存储,并且分配的空间总是保留,并且数组的大小不能扩展(因为在长度之后它可能包含内存中的其他内容)?
为什么这完全奏效?当使用下标访问数组时my_array[5],C会只知道数组的起始位置(即my_array[0]),并且必须将内部指针增加5才能返回它吗?
如果这看起来显而易见,我道歉,但我在高级语言中度过了一生,而C对我来说非常有趣.
我想知道更多关于控制每个Scala actor运行位置的程度.我恰好处于某种特殊情况:需要高反应性,代码的很大一部分是时间关键的,最糟糕的是,我在Android上.考虑到这一点,我的主要目标是:使代码尽可能简单易读.
理想情况下我希望实现的目标(其中一些听起来不合理/彻头彻尾的愚蠢,请阅读下面的理由)
- 我希望能够在某些特定的,总是相同的,任意的线程中响应某些消息,但我需要不要阻止它等待消息.
- 我希望在工作线程池中完成大部分处理,理想情况下,当Scala actor支持时自动调整大小,同时保证此处理永远不会发生在上面的任意线程上.
这些要求源于Android的必要性:Android框架使用特殊线程来触摸UI,如果您从另一个线程触摸任何UI对象,您将获得异常.通过这种方式,它强制执行某种线程/锁定模型,这正是我正在努力解决的问题.但无论如何,这就是它的方式:我必须确保我的一些处理,即处理UI对象,正在这个线程上运行,而不是其他,因为框架恼人地说我应该怎么做.令人讨厌的副作用是,只要此线程处理我的代码,UI停止更新并且我的应用程序停止响应.所以我需要确保这个线程不会被随机选择,因为我可以在一些反应{}中运行长代码,
android框架提供了一个名为Handle的类,它实现了某种消息传递 - 你发送一个Runnable,它将在UI线程上运行.如果需要,我可以使用它.每次都会创建一个Runnable使代码混乱 - 可以做的一件事就是将它封装在某个方法中,以便我可以编写像
onUIThread {/*some code*/}
...比新的Runnable(){def run(){}}好得多.另一方面,这基本上就是onUIThread函数将要做的事情,所以我将创建两个闭包 - 然后我必须处理闭包的内存分配细节.我必须这样做,因为每次我分配一个对象时,GC都有机会在Android上运行,通常暂停执行150ms,这会破坏我的用户体验,如果它发生在一个关键的执行路径中.
所以最后:
- 我有没有办法静态地将一个actor与一个线程相关联,这样我就可以拥有一个UI actor,在其中反应{}并始终在UI线程上运行它的代码?/*我知道它本身就是糟糕的设计,请阅读上面的理由,看看为什么我无法帮助它*/
- 我有什么方法可以确保这个特定的线程永远不会被考虑用于响应反应中的消息{ }? - 考虑到我的约束,我可以做些什么建议,以获得更好的代码易读性?