小编wal*_*lyk的帖子

你能用C编写面向对象的代码吗?

你能用C编写面向对象的代码吗?特别是关于多态性.


另请参阅堆栈溢出问题C中的面向对象问题.

c oop object

481
推荐指数
19
解决办法
28万
查看次数

如果JSON对象的名称包含点,如何获取它?

我有一个非常简单的JSON数组(请关注"points.bean.pointsBase"对象):

var mydata =   
{"list":  
  [  
    {"points.bean.pointsBase":  
      [  
        {"time": 2000, "caption":"caption text", duration: 5000},  
        {"time": 6000, "caption":"caption text", duration: 3000}  
      ]  
    }  
  ]  
};  

// Usually we make smth like this to get the value: 
var smth = mydata.list[0].points.bean.pointsBase[0].time; 
alert(smth); // should display 2000
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它确实没有显示任何内容.
当我将"points.bean.pointsBase"改为smth而没有点名时 - 一切正常!

但是,如果没有圆点,我无法将此名称更改为其他任何内容,但我需要获取值?!
有没有选择来获得它?

javascript arrays json object

94
推荐指数
4
解决办法
10万
查看次数

.NET实现scrypt

在某些情况下,我已经阅读了关于scrypt及其优于bcrypt哈希算法的一些优点.

无论如何,似乎scrypt还没有被广泛使用.到目前为止有没有人见过它的.NET实现(在C#中受到青睐)?

.net c# hash cryptography scrypt

56
推荐指数
3
解决办法
2万
查看次数

Linux内核如何知道在哪里查找驱动程序固件?

我正在Ubuntu下编译一个自定义内核,我遇到了我的内核似乎不知道在哪里寻找固件的问题.在Ubuntu 8.04下,固件与内核版本绑定的方式与驱动程序模块相同.例如,内核2.6.24-24-generic将其内核模块存储在:

/lib/modules/2.6.24-24-generic
Run Code Online (Sandbox Code Playgroud)

及其固件:

/lib/firmware/2.6.24-24-generic
Run Code Online (Sandbox Code Playgroud)

当我根据" 备用构建方法:老式Debian方式 " 编译2.6.24-24通用Ubuntu内核时,我得到了相应的模块目录,除了需要固件的设备外,我的所有设备都工作,例如我的英特尔无线网卡(ipw2200)模块).

内核日志显示,例如,当ipw2200尝试加载固件时,控制固件加载的内核子系统无法找到它:

ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
ipw2200: ipw2200-bss.fw request_firmware failed: Reason -2
Run Code Online (Sandbox Code Playgroud)

errno-base.h将此定义为:

#define ENOENT       2  /* No such file or directory */
Run Code Online (Sandbox Code Playgroud)

(返回ENOENT的函数在它前面放一个减号.)

我尝试在/ lib/firmware中创建一个符号链接,其中我的内核名称指向2.6.24-24-generic目录,但是这导致了同样的错误.此固件是非GPL,由Intel提供并由Ubuntu打包.我不相信它与特定内核版本有任何实际联系.cmp表明各个目录中的版本是相同的.

那么内核如何知道在哪里寻找固件呢?

更新

我找到了解决我遇到的确切问题的解决方案,但是它不再有效,因为Ubuntu已经淘汰/etc/hotplug.d并且不再存储其固件/usr/lib/hotplug/firmware.

UPDATE2

更多的研究提出了更多的答案.直到版本92 udev,该程序firmware_helper是固件加载的方式.从udev93 开始,这个程序被替换为一个名为firmware.sh的脚本,据我所知,它提供了相同的功能.这两个硬编码固件路径/lib/firmware.Ubuntu似乎仍在使用/lib/udev/firmware_helper二进制文件.

固件文件的名称将传递到firmware_helper环境变量中$FIRMWARE,该变量连接到路径/lib/firmware并用于加载固件.

加载固件的实际请求是由驱动程序(在我的情况下为ipw2200)通过系统调用完成的:

request_firmware(..., "ipw2200-bss.fw", ...);
Run Code Online (Sandbox Code Playgroud)

现在,在驱动程序调用request_firmwarefirmware_helper查看$FIRMWARE …

firmware linux-device-driver linux-kernel

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

使用SubQuery MySQL插入INTO

我有这个声明:

INSERT INTO qa_costpriceslog (item_code, invoice_code, item_costprice)
    VALUES (1, 2, (SELECT item_costprice FROM qa_items WHERE item_code = 1));
Run Code Online (Sandbox Code Playgroud)

我正在尝试插入值副本与item_costprice的相同数据,但显示错误:

Error Code: 1136. Column count doesn't match value count at row 1
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?

mysql insert subquery

48
推荐指数
2
解决办法
6万
查看次数

GCC和MS编译器的模板实例化细节

任何人都可以提供比较或具体细节,说明在GCC和MS编译器中如何在编译和/或链接时处理模板实例化?这个过程在静态库,共享库和可执行文件的上下文中是不同的吗?我找到了关于GCC如何处理它的文档,但我不确定这些信息是否仍然指的是当前的状态.在编译我的库时,我应该使用他们建议的标志,例如-fno-implicit-templates吗?

我所知道的(可能不一定正确)是:

  • 模板将在实际使用时实例化
  • 模板将作为显式实例化的结果进行实例化
  • 重复实例化通常通过折叠重复实例化或通过延迟实例化直到链接时间来处理

c++ compiler-construction gcc templates visual-studio

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

C宏:#if检查是否相等

有没有办法检查宏中的数字相等性?

我想做点什么

#define choice 3

#if choice == 3
  ....
#endif

#if choice == 4
 ...
#endif
Run Code Online (Sandbox Code Playgroud)

C宏是否支持这样的事情?

c macros if-statement

24
推荐指数
3
解决办法
5万
查看次数

Matlab mex文件与其直接C等效文件相比较慢

我无法解释(并避免)Matlab mex程序与没有Matlab接口的相应C程序之间的速度差异.我一直在分析数值分析程序:

int main(){

Well_optimized_code();

}
Run Code Online (Sandbox Code Playgroud)

使用gcc 4.4针对Matlab-Mex等效编译(指向使用gcc44,这不是Matlab当前支持的版本,但出于其他原因需要):

void mexFunction(int nlhs,mxArray* plhs[], int nrhs, const mxArray* prhs[]){

Well_optimized_code(); //literally the exact same code

}
Run Code Online (Sandbox Code Playgroud)

我执行的时间如下:

$ time ./C_version
Run Code Online (Sandbox Code Playgroud)

>> tic; mex_version(); toc
Run Code Online (Sandbox Code Playgroud)

时间上的差异是惊人的.从命令行运行的版本平均需要5.8秒.Matlab中的版本在21秒内运行.对于上下文,mex文件替换了SimBiology工具箱中的算法,该算法大约需要26秒才能运行.

与Matlab的算法相比,C和mex版本都使用对openMP的调用线性扩展到27个线程,但为了进行性能分析,这些调用已被禁用并注释掉.

这两个版本以相同的方式编译,除了作为mex文件编译的必要标志:-fPIC --shared -lmex -DMATLAB_MEX_FILE应用于mex编译/链接.我删除了对mex文件的左右参数的所有引用.也就是说它不需要输入也没有输出,它仅用于分析.

伟大而光荣的谷歌告诉我,与位置无关的代码不应该是经济放缓的源头,除此之外我不知所措.

任何帮助将不胜感激,

安德鲁

c optimization matlab mex

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

如何防止grep打印尾随换行符?

grep用来生成将由另一个程序解析的输出.

但是,该程序只希望输出为数字或零字节.

现在在grep输出后输出换行符.我已经检查了-Z选项,但它似乎不起作用,因为我使用grep进行count(-c).

我正在执行sh,而不是bash.因此嵌套它echo -n "$(grep -c pattern)"也不起作用.

如何摆脱拖尾换行?

linux grep newline

21
推荐指数
3
解决办法
4万
查看次数

goto对C++编译器优化的影响

使用goto现代C++编译器有哪些性能优势或惩罚?

我正在编写一个C++代码生成器,使用goto它会使编写更容易.没有人会触及生成的C++文件,所以不要让我全部"goto is bad".作为一个好处,他们可以节省临时变量的使用.

从纯粹的编译器优化角度来看,我想知道goto对编译器优化器的结果是什么?与使用临时/标志相比,它是否使代码更快,更慢或通常没有性能变化.

c++ optimization goto compiler-optimization

20
推荐指数
3
解决办法
3492
查看次数