我有一个返回值的函数。将其转换为不返回任何内容 ( void) 的函数指针类型然后调用它是否安全?C 标准是否提供了足够的保证,使其在任何平台上都是安全的,并且相当于正常调用该函数而忽略返回值?
额外问题:是否存在在某些平台上实际使用的符合标准的调用约定,但这样做并不安全?
示例代码:
#include <stdio.h>
// simple function with a a side-effect;
// it is useful to call even when ignoring the return value
int f(int x) {
return printf("%d\n", x);
}
typedef void (*fun_t)(int);
int main() {
fun_t g = &f; // cast to void return type, issues a warning
g(123); // <-- is this safe, and equivalent to calling f(123) instead?
return 0;
}
Run Code Online (Sandbox Code Playgroud)
笔记:
void …如何通过MATLAB Engine或MEX C接口访问MATLAB字符串的基础unicode数据?
这是一个例子.我们将unicode字符放在UTF-8编码文件test.txt中,然后将其读作
fid=fopen('test.txt','r','l','UTF-8');
s=fscanf(fid, '%s')
Run Code Online (Sandbox Code Playgroud)
在MATLAB中.
现在,如果我第一次feature('DefaultCharacterSet', 'UTF-8'),然后从C engEvalString(ep, "s"),然后作为输出我从文件返回UTF-8的文本.这证明MATLAB在内部将其存储为unicode.但是,如果我这样做mxArrayToString(engGetVariable(ep, "s")),我得到的东西unicode2native(s, 'Latin-1')将在MATLAB中给我:所有非拉丁字符1字符替换为字符代码26.我需要的是以任何unicode格式(UTF-8)访问基础unicode数据作为C字符串,UTF-16等),并保留非Latin-1字符.这可能吗?
我的平台是OS X,MATLAB R2012b.
附录:文档明确声明"[mxArrayToString()]支持多字节编码字符",但它仍然只给出了原始数据的Latin-1近似值.
是否可以包装R函数来修改其功能?
这是一个解释我的意思的玩具示例.考虑这个功能sum2:
sum2 <- function (x) if (length(x) == 1) { cat(x); sum(x) } else sum(x)
Run Code Online (Sandbox Code Playgroud)
sum通过微小的修改,它做了什么.假设我想重新定义sum自己做sum2这里做的事情.我怎么能以一般的方式做到这一点,却不知道我正在包装的函数的内部结构?
我想这样做暂时"修复"一个包函数,而不必修改和重新安装包.我想检查它的输入并返回一个特殊值,以防输入满足某些条件.
(对于那些对Mathematica非常熟悉的人,我正在寻找类似于Gayley-Villegas技巧的东西.)
使用MATLAB Engine界面时,如何获取启动的matlab进程的进程ID?或者我如何以允许我获得PID的方式启动matlab过程?
我需要这个的原因是当它们花费太长时间时能够中断计算.在*nix系统上,这似乎可以通过向MATLAB发送SIGINT信号来实现.这不会杀死MATLAB,但它会中断当前的计算.
Doxygen 可以在以下简短示例中正常工作:
/** \file */
/// This is an integer
typedef int myInteger;
/// This is the same as \ref myInteger
typedef myInteger myOtherInteger;
Run Code Online (Sandbox Code Playgroud)
但是myInteger如果我将它放入命名空间,它不会解析对的引用。
/** \file */
namespace bar {
/// This is an integer
typedef int myInteger;
/// This is the same as \ref myInteger
typedef myInteger myOtherInteger;
}
Run Code Online (Sandbox Code Playgroud)
请注意,myInteger现在提到的两个都不是链接。它还抱怨:
警告:无法为 \ref 命令解析对 `myInteger' 的引用
写作\ref bar::myInteger没有帮助。
我怎样才能解决这个问题?
我有 doxygen 1.8.13。
以下是我的Mathematica计划的两个陈述.
Print[ExpandAll[Chop[Integrate[Resi*Cos[7*1*\[Theta]]*Sin[(1*Pi*x)/L], {\[Theta],
0,2*Pi},{x,0, L}], 10^-6]]];
Run Code Online (Sandbox Code Playgroud)
这条线给了我输出
1043.84 A[1,7][t]-115072. A[1,0][t] A[1,7][t]+112.933 A[1,0][t]^2 A[1,7][t]+12415.3 A[1,7][t]^3-1327.67 A[1,7][t] A[1,14][t]+387.315 A[1,0][t] A[1,7][t] A[1,14][t]+50249.8 A[1,7][t] A[1,14][t]^2+12415.3 A[1,7][t] B[1,7][t]^2-1327.67 B[1,7][t] B[1,14][t]+387.315 A[1,0][t] B[1,7][t] B[1,14][t]+50249.8 A[1,7][t] B[1,14][t]^2+0.000108481 (A[1,7]^\[Prime]\[Prime])[t]
Run Code Online (Sandbox Code Playgroud)
而当我颠倒整合的顺序
Print[ExpandAll[Chop[Integrate[Resi*Cos[7*1*\[Theta]]*Sin[(1*Pi*x)/L], {x, 0, L}, {\[Theta], 0, 2*Pi}], 10^-6]]];
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
2087.69 A[1,7][t]-230144. A[1,0][t] A[1,7][t]+225.866 A[1,0][t]^2 A[1,7][t]+24830.6 A[1,7][t]^3-2655.34 A[1,7][t] A[1,14][t]+774.631 A[1,0][t] A[1,7][t] A[1,14][t]+100500. A[1,7][t] A[1,14][t]^2+24830.6 A[1,7][t] B[1,7][t]^2-2655.34 B[1,7][t] B[1,14][t]+774.631 A[1,0][t] B[1,7][t] B[1,14][t]+100500. A[1,7][t] B[1,14][t]^2+0.000216962 (A[1,7]^\[Prime]\[Prime])[t]
Run Code Online (Sandbox Code Playgroud)
整合的顺序无关紧要.那为什么输出不同?请注意,第一个错误输出只是第二个(正确)输出的一半.我问这个是因为给我正确答案的顺序花了很多时间.我的程序中有很多这样的积分.
表达式Resi是一个巨大的术语,但让我给你一小部分
1754.2 Sin[(\[Pi] x)/200] A[1, 0][t] +
6.64531 Cos[7 \[Theta]] Sin[(\[Pi] x)/200] …Run Code Online (Sandbox Code Playgroud) 有没有办法在Mathematica中生成一个n 严格对角占优的随机n ?我使用以下代码生成随机方阵:
A = RandomReal[{-100, 100}, {1000, 1000}]
Run Code Online (Sandbox Code Playgroud)
编辑:我只需要一种方法来生成一个严格的对角占优矩阵,行随机性并不重要.
我有问题使用Which.其中的一个参数(我在做数学的函数arg2)应该是一个Symbol(或None或Full).我希望函数的输出依赖于arg2这样,但它不起作用:
testFunction[arg1_,arg2_:None]:=Which[arg2==None,arg1*2,arg2==Full,arg1*3]
Run Code Online (Sandbox Code Playgroud)
如果arg2是None似乎没有什么问题,但对于arg2是Full,testFunction刚刚返回本身.当使用实数或整数,而不是符号None和Full,testFunction功能正常.
我在测试中使用符号时犯了错误吗?或者在使用Which和符号时我应该注意其他任何"规则" 吗?
我已经搜索了这个和其他网站的答案,但找不到任何答案.Mathematica帮助文件也没有为我提供答案.到处都是我看过哪个不是巫婆符号.
即使在索引到数组时,一致使用浮点类型来表示整数有哪些潜在的缺点?假设一个面向性能的 C 库的上下文。可以在 64 位整数和 64 位浮点数之间进行选择。
我对做这样的事情感到不舒服,因为doubles 不是用于索引的,并且使用工具来完成其设计目的之外的事情通常会带来风险。但我想了解是否有合理的理由避免这样做。
为了解决显而易见的问题:
double与[ ]运算符一起使用。double无法表示与 64 位整数类型一样多的不同整数,但在可预见的将来,53 位可能足以用于索引数组。事实上,浮点类型的这种用法在野外随处可见。例如,R 没有 64 位整数,并且通过使用doubles 进行索引来支持大型数组。在编写必须与 R 互操作的代码时,必须考虑是否也这样做。
I am using the example program for setlocale() from cppreference.com on a macOS 10.14.6 system, however, the output is not localized. I checked that the return value from setlocale() is not NULL and tried a variety of locale specifications in an attempt to get a decimal comma, such as de, de_DE, de_DE.utf8.
Why does this not work?
How can I find out why the output isn't affected, and whether it is because of incorrect locale names?
On …