问题列表 - 第43557页

在C中直接从其他编译单元访问一个编译单元的静态变量

所以我正在为固件制作一个"快速而又脏"的探测器 - 我只需知道一些功能需要多长时间.仅仅打印每次所需的时间会使结果产生偏差,因为日志记录很昂贵 - 所以我将一堆结果保存到一个数组并在一段时间之后将其转储.

在一个编译单元(一个源文件)中工作时,我只有一堆存储结果的静态数组.现在我需要在几个文件中执行此操作.我可以"复制粘贴"代码,但这只是丑陋(跟我一起).如果我将时序代码放在一个单独的编译单元中,创建静态变量,并在头文件中提供访问器函数,那么每次我想访问这些静态变量时,都会产生函数调用的开销.

是否可以直接访问编译单元的静态变量?

我一直试图封装数据,而不是使用全局变量,但这种情况只是由于速度问题而需要它.

我希望这是有道理的!谢谢!

编辑:好吧,所以看起来我问的是不可能的 - 你们中的任何人看到的替代方案基本上允许我直接访问另一个编译单元的数据吗?

EDIT2:谢谢Pablo和Jonathan的答案.我最终接受了Pablo的,因为在我的情况下,我没有明确的位置来获取指向静态数据的指针(根据Jonathan).再次感谢!

c global-variables firmware

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

这种向后命名惯例是一个坏主意(即违反行业标准)吗?

我总是颠倒名字,以便他们自然地分成智能感知.我想知道这是不是一个坏主意.

例如,我运行一个宠物商店,我有发票页面添加,编辑,删除和存储页面显示,预览,编辑.要获取这些的URL,我会调用这些方法(在一个合适的类中,如GlobalUrls.cs

InvoicingAddUrl()
InvoicingEditUrl()
InvoicingDeleteUrl()

StoreDisplayUrl()
StorePreviewUrl()
StoreEditUrl()
Run Code Online (Sandbox Code Playgroud)

这在intellisense很好地组合他们.更合乎逻辑的命名是:

AddInvoiceUrl()
EditInvoiceUrl()
DeleteInvoiceUrl()

DisplayStoreUrl()
PreviewStoreUrl()
EditStoreUrl()
Run Code Online (Sandbox Code Playgroud)

将它们分组为intellisense或逻辑上是否更好(更好的存在,更多的是行业标准方式)?

coding-style naming-conventions

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

ESS和R的Emacs自动完成模式扩展

是否有可以与ESS一起使用的Emacs 自动完成模式的R扩展?

如果扩展名不存在,我也会感激任何写作的提示!

emacs r autocomplete ess

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

Java和密码强随机数

我一直在使用Java的SecureRandom类来生成盐,以便以后加密和密码哈希(我为每个任务生成单独的盐).我一直在使用的代码如下:

//Init random number generator
secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(System.nanoTime());

//Create salts
secureRandom.nextBytes(bytAuthSalt);
secureRandom.nextBytes(bytEncryptionSalt);
Run Code Online (Sandbox Code Playgroud)

现在,一切都很顺利,直到我开始真正验证我得到的值.对于应用程序的几个连续执行,我的盐是:

[B@43d55dd8
[B@43d55b58
[B@43d55b50
[B@43bd0cc8
[B@43db0b08
[B@43bd0f50
Run Code Online (Sandbox Code Playgroud)

令我感到不安的是,这些数字似乎都是大致顺序的.在网上进行了一些搜索之后,我再次重复运行,而没有自己播种到相同的结果.

我唯一猜测可能导致这种情况的原因在于我正在为Android平台开发.我知道他们有自己的加密提供商,但我没有任何例外.有任何想法吗?

提前致谢.

java encryption android salt

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

向量的奇怪问题

对于stl向量我有一个非常奇怪的问题,当我调用擦除方法时,如果有任何意义,则会为正确的对象调用错误的析构函数.
我的代码看起来像这样:

 for(vector<Category>::iterator iter = this->children.begin(); iter != this->children.end(); iter++)
    {
        if((*iter).item == item)
        {
            this->children.erase(iter);
            return;
        }
        -------------------------
    }
Run Code Online (Sandbox Code Playgroud)

它只是一个简单的函数,它在向量中找到要搜索的项目的元素,并从向量中移除所述元素.我的问题是,当调用erase函数时,迭代器指向的对象被破坏,正在调用错误的析构函数.更具体地说,正在调用向量中最后一个元素的析构函数,而不是被删除的实际对象的析构函数.因此,内存将从错误的对象中移除,该对象仍将是向量中的元素,并且从向量中移除的实际对象仍然保持其所有内存的完整性.
对象的costructor如下所示:

Category::Category(const Category &from)
{
    this->name = from.name;
    for(vector<Category>::const_iterator iter = from.children.begin(); iter != from.children.end(); iter++)
        this->children.push_back((*iter));

    this->item = new QTreeWidgetItem;
}
Run Code Online (Sandbox Code Playgroud)

和析构函数

Category::~Category()
{
    this->children.clear();
    if(this->item != NULL)
    {
        QTreeWidgetItem* parent = this->item->parent();
        if(parent != NULL) parent->removeChild(this->item);
        delete this->item;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ qt stl vector

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

EF Code First给我错误当IDENTITY_INSERT设置为OFF时,无法在表'People'中为identity列插入显式值.

我正在尝试实体框架4的代码优先(EF CodeFirst 0.8),并且遇到一个问题,一个简单的模型,在Person和之间有一个1 - - > 0..1的关系Profile.以下是它们的定义方式:

public class Person
{
    public int PersonId { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime? DOB { get; set; }

    public virtual Profile Profile { get; set; }
}

public class Profile
{
    public int ProfileId { get; set; }
    public int PersonId { get; set; }
    public string DisplayName { get; set; }

    public virtual Person …
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-4

42
推荐指数
5
解决办法
6万
查看次数

程序包正文中列出的程序,但不是规范

我对Oracle很新,不过很新 - 但我正在学习.我有一个编译没有错误的包.当我打开身体(使用TOAD)时,我可以看到一个程序,但同样的程序没有出现在规范中.什么会导致这个?

提前致谢.

oracle plsql

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

两个用户同时写入文件?(PHP/file_put_contents)

如果通过将数据写入到文件file_put_contentsFILE_APPEND标志设置和两个用户在同一时间提交数据,这将追加不管,还是有机会的一个条目将被覆盖?

如果我设置了LOCK_EX标志,第二次提交是否会等待第一次提交完成,或者当无法获得独占锁时数据是否丢失?

PHP通常如何处理?我正在运行5.2.9版.如果重要的话

谢谢,瑞恩

php flags

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

在Common Lisp中找到列表中最嵌套的列表

我是Common Lisp和函数式编程的新手,但我在C,C++,C#,Java等语言方面有很多经验.我在列表中找到最嵌套的列表时遇到了麻烦.我的输入是这样的:

(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
Run Code Online (Sandbox Code Playgroud)

我想获得这个列表中最嵌套的列表,在这种情况下是

(7)
Run Code Online (Sandbox Code Playgroud)

我确实有一个想法,我可以以某种方式压扁列表,直到只剩下一个子列表.为了说明我的意思,这里有几个步骤:

第1步 - 输入:

(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
Run Code Online (Sandbox Code Playgroud)

第2步 - 在"第一级"上展平:

(0 1 2 3 4 5 (6 (7) 8) 9)
Run Code Online (Sandbox Code Playgroud)

第3步 - 在"第二级"上展平:

(0 1 2 3 4 5 6 (7) 8 9)
Run Code Online (Sandbox Code Playgroud)

现在只剩下一个嵌套列表,这意味着这是最嵌套的列表.但是我发现这里有两个或更多这样的列表会出现问题.请分享您对此的看法.

我在Common Lisp中将此过程变为现实时遇到了问题,所以我会感谢一些正确方向的指针,可能是一些示例代码等等.这是一项家庭作业,所以我真的不希望有一个完整的解决方案,但如果有人指出可能是一个更简单,更好的解决方案及其实施,那将会很高兴.

lisp common-lisp nested-lists

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

Apache Transaction:以事务方式写入文件 - 如何使用resourceId

如果有人实施了交易写入文件,请帮助我.
在早期的线程(事务性写入)中讨论了相关主题.

用例如下:
如果写入日志文件失败,则应回滚适当的数据库事务.

因此,文件的写入应该以事务方式执行.

我选择了Apache Commons Transaction lib.
并且有问题,这不会让我走得更远,因为没有找到适当的文档或示例.

我创建了FileResourceManager的实例:

FileResourceManager frm = new FileResourceManager("c:\ cur","c:\ cur",true,logger);

据我从这个Apache Commons Transaction教程中了解,我应该实现以下步骤:

  1. 开始交易:
    frm.start();

  2. 获取它的事务ID:
    transactionId = frm.generatedUniqueTxId();

  3. call方法,这是必需的,例如带有transactionId和resourceId的writeResource:
    frm.writeResource(transactionId, resourceId);

这里有歧义:
a)我如何连接resourceId真实资源,我应该交易写作?
b)我的文件如何以交易方式编写,现在将如何resourceId

谢谢你的建议.

java file transactional apache-commons

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