我正在开发一个支持多种编程环境的库,如VB6和FoxPro.我必须坚持C约定,因为它是最低的共同点.现在我对这个风格有疑问.
假设函数进程输入并返回一个字符串.在此过程中,可能会发生错误.目前提出的风格是这样的:
int func(input params... char* buffer, unsigned int* buffer_size);
Run Code Online (Sandbox Code Playgroud)
这种风格的好处是原型中包含了所有内容,包括错误代码.并且可以避免内存分配.问题是该功能非常冗长.并且因为buffer_size可以是any,所以需要更多的代码来实现.
另一种选择是返回char*,并返回NULL以指示错误:
char* func(input params...);
Run Code Online (Sandbox Code Playgroud)
此样式需要调用者删除缓冲区.内存分配是必需的,因此服务器程序可能会遇到内存碎片问题.
第二个选项的变体是使用线程局部变量来保存返回的指针char*,这样用户就不需要删除缓冲区.
你喜欢哪种风格?还有原因吗?
我有使用VC9(Microsoft Visual C++ 2008 SP1)编译的代码,但没有使用GCC 4.2(在Mac上,如果这很重要).如果我填写足够的限定符和关键字,我可以强制它在GCC中工作,但这似乎不对.
这是一个展示我的问题的最小代码示例:
template< typename N >
struct B {
typedef N n_type; // can derived class access typedef?
void foo() {} // can derived class access function?
};
template< typename N >
struct D : public B<N> {
typedef B<N> b_type;
typedef typename b_type::n_type bn_type;
void f1( n_type ) {} // ERROR: 'n_type' has not been
// declared
void f2( typename B<N>::n_type ) {} // OK, verbose
void f3( b_type::n_type ) {} // ERROR: 'struct …Run Code Online (Sandbox Code Playgroud) 如何使用Google Closure编译器删除未使用的代码?
我正在使用JQuery Slider控件但是我没有在JQuery中使用任何其他东西.所以我读到高级模式下的Google Closure编译器可以删除未使用的代码,但我不知道如何.
我有frontpage.html链接到我的网站上托管的html页面的外部JQuery,JQuery UI和JQuery Slider控件.
在我的frontpage.html上,我还在HTML中嵌入了JavaScript,启动了JQuery Slider控件.
我如何使用我使用在线Closure Compiler来评估我的frontpage.html,JQuery,JQuery UI和JQuery Slider来删除我不使用的所有未使用的JQuery代码?
javascript jquery jquery-ui google-closure google-closure-compiler
我想使用AnsiColorLogger从Ant获取颜色输出.我在Windows上使用Git Bash.
我试过了:
$ ant -logger org.apache.tools.ant.listener.AnsiColorLogger
Run Code Online (Sandbox Code Playgroud)
但我的输出看起来像:
Buildfile: c:\foo\build.xml
?[2;36m [junit] Testsuite: org.foo.BarTest?[m
?[2;36m [junit] Tests run: 1, Failures: 1, Errors: 0, Time elapsed: 0.188 sec?[m
?[2;36m [junit] ?[m
?[2;36m [junit] Testcase: testInherits took 0.175 sec?[m
?[2;36m [junit] FAILED?[m
?[2;36m [junit] subdir not child?[m
?[2;36m [junit] junit.framework.AssertionFailedError: subdir not child?[m
?[2;36m [junit] at org.foo.BarTest.testInherits(BarTest.java:61)?[m
?[2;36m [junit] ?[m
?[2;31m [junit] Test org.foo.BarTest FAILED?[m
Run Code Online (Sandbox Code Playgroud)
我知道ANSI颜色至少部分地在Git Bash中起作用,因为命令会ls -ACF --color=auto产生很好的彩色输出.
Ant的诀窍是什么?
虽然JavaScript及其许多库(jQuery,RequireJS)允许创建许多优秀的网站,但我在考虑构建更大的网站时发现它缺乏类型安全性.
谷歌有一个很棒的闭包编译器,它允许你用JSDoc 注释你的JavaScript并进行类型检查.在尝试了它的丰富类型系统之后,我希望这会大大提高更长寿的JavaScript项目的可维护性.
唯一的问题是它与RequireJS等AMD库不能很好地协同工作.有一个实验性的--transform_amd_modules标志,用于连接JavaScript文件并通过消除它来处理范围.然而,这似乎是一种反模式,消除了RequireJS的大部分好处(但保留了模块化文件结构).还有一个问题是未来将获得多少支持
最终目标是类型安全,而不是昂贵的RequireJS的好处,这将是我最好的赌注?
PS:虽然我使用RequireJS作为AMD库的首选,但我不会反对使用不同AMD库的解决方案.
我似乎无法找到任何有用的微软大约将如何使用的文档Delimiter和InheritsFromParent属性的UserMacro定义用户宏当元素.vsprops属性表文件为Visual Studio.
以下是示例用法:
<UserMacro Name="INCLUDEPATH" Value="$(VCROOT)\Inc"
InheritsFromParent="TRUE" Delimiter=";"/>
Run Code Online (Sandbox Code Playgroud)
从上面的例子中,我猜测"inherit"实际上意味着"a)如果定义是非空的,那么追加分隔符,b)附加新定义"其中非继承行为将简单地替换任何当前宏定义.有人有确切消息么?更好的是,有没有人有Visual Studio .vsprops文件和宏的替代文档的任何建议来源?
注意:这是不一样的InheritedPropertySheets所述的属性VisualStudioPropertySheet元件,例如:
<VisualStudioPropertySheet ... InheritedPropertySheets=".\my.vsprops">
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"继承"基本上意味着"包括".
我想编写驱动Visual Studio 2008和Visual C++ 2008的Python脚本win32com.client.Dispatch.到目前为止我发现的所有示例都使用.这适用于Excel 2007和Word 2007但Visual Studio 2008失败:
import win32com.client
app1 = win32com.client.Dispatch( 'Excel.Application' ) # ok
app2 = win32com.client.Dispatch( 'Word.Application' ) # ok
app3 = win32com.client.Dispatch( 'MSDev.Application' ) # error
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?Visual Studio 2008是否使用不同的字符串来标识自己?以上方法是否过时了?
我有一个宏,它创建一个模块,一个模块的结构,并实现该结构的协议.
在我的套件中,我有一个简单的测试模块,它调用宏,然后在生成的模块/结构/协议实现上进行断言.一个测试使用struct调用协议函数来断言它已经实现.在1.2之前,这有效,但现在它失败了,运行套件时我收到以下警告.
test/dogma/rule_builder_test.exs:7: warning: the Dogma.Rule \
protocol has already been consolidated, an implementation for \
Dogma.RuleBuilderTest.MagicTestRule has no effect
Run Code Online (Sandbox Code Playgroud)
我现在已经删除了这个测试,因为我相信我的套件的其余部分已经充分测试了这个功能,但是我很好奇是否有办法让这个功能再次运行,或者至少让警告静音.
我玩过Process.consilodate/2,但没有成功.
我有一个自定义提示,但是当我启动时iex,会显示内置提示.点击后输入我的提示生效.如何在iex启动时让我的提示生效?
这就是我所看到的:
这是我的.iex.exs档案:
IEx.configure(
colors: [ enabled: true],
default_prompt: [
"\e[G", # move to column 1
"\e[35m", # magenta
"MY %prefix(%counter)",
">",
"\e[0m" # reset
] |> IO.chardata_to_string
)
Run Code Online (Sandbox Code Playgroud) Visual Studio 2010不再使用.vsprops文件而是使用.props文件.
要.vsprops在Visual Studio 2008项目中包含文件,可以在" 解决方案资源管理器"面板中右键单击项目图标,选择" 属性",然后转到" 配置属性"|"属性".常规部分,并修改Inherited Project Property Sheets属性以包含.vsprops路径列表.也可以直接修改Visual Studio 2008项目文件.
Visual Studio 2010 GUI中是否有一种方法.props可以在项目中包含文件?在继承的项目属性表属性似乎已被删除.如果手动编辑项目文件是包含.props文件的唯一方法,那么可以在哪里找到有关文件的文档?
我不是在谈论添加.props文件到项目中的文件列表,我的意思是我怎么告诉该项目使用一个.props文件.