我知道所有C编译器实现背后都有一个标准,所以应该没有隐藏的功能.尽管如此,我确信所有C开发人员都有他们一直使用的隐藏/秘密技巧.
例如,我最近在linux内核中遇到过这个问题:
/* Force a compilation error if condition is true */ #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
所以,在你的代码中,如果你有一些必须的结构,比如8个字节的大小,可能是因为一些硬件限制,你可以这样做:
BUILD_BUG_ON((sizeof(struct mystruct) % 8) != 0);
除非struct mystruct的大小是8的倍数,否则它将不会编译,如果它是8的倍数,则根本不会生成运行时代码.
我知道的另一个技巧是"Graphics Gems"一书,它允许单个头文件在一个模块中声明和初始化变量,而在使用该模块的其他模块中,只是将它们声明为externs.
#ifdef DEFINE_MYHEADER_GLOBALS #define GLOBAL #define INIT(x, y) (x) = (y) #else #define GLOBAL extern #define INIT(x, y) #endif GLOBAL int INIT(x, 0); GLOBAL int somefunc(int a, int b);
有了它,定义x和somefunc的代码可以:
#define DEFINE_MYHEADER_GLOBALS #include "the_above_header_file.h"
而仅使用x和somefunc()的代码可以:
#include "the_above_header_file.h"
所以你得到一个头文件,它声明了需要它们的全局变量和函数原型的实例,以及相应的extern声明.
那么,你最喜欢的C编程技巧是什么?
我的-drawInContext:方法中有一个包含一些复杂绘图代码的图层.我正在尝试最小化我需要做的绘图量,所以我使用-setNeedsDisplayInRect:仅更新已更改的部分.这是非常好的工作.但是,当图形系统更新我的图层时,它会使用交叉淡入淡出从旧图像过渡到新图像.我希望它能立即切换.
我已经尝试使用CATransaction来关闭操作并将持续时间设置为零,并且都不起作用.这是我正在使用的代码:
[CATransaction begin];
[CATransaction setDisableActions: YES];
[self setNeedsDisplayInRect: rect];
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
我应该使用不同的CATransaction方法(我也尝试过-setValue:forKey:使用kCATransactionDisableActions,结果相同).
以下是针对各种语言讨论的大量隐藏功能.现在我好奇XAML和WPF的一些隐藏功能?
我发现的是ListView的标题点击事件
<ListView x:Name='lv'
Height="150"
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
Run Code Online (Sandbox Code Playgroud)
未列出GridViewColumnHeader.Click属性.
到目前为止的一些相关功能:
也可以看看:
我正在将一个代码块从iOS4项目移植到iOS5,我遇到了一些ARC问题.该代码从屏幕截图生成PDF.
PDF生成代码
UIView *captureView;
...
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, captureView.bounds, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[captureView.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();Run Code Online (Sandbox Code Playgroud)
renderInContext行
[captureView.layer renderInContext:pdfContext];Run Code Online (Sandbox Code Playgroud)
生成以下错误.
Automatic Reference Counting issue
Receiver type 'CALayer' for instance message is a forward declarationRun Code Online (Sandbox Code Playgroud)
有什么想法在这里发生了什么?
core-animation objective-c calayer ios automatic-ref-counting
我正在开发一个安全软件,并希望模糊我的java代码,因此无法进行逆向工程.什么是最可靠的java混淆器?
在Xcode 4.2中,在General选项卡下有一个名为"iOS Device Discovery"的新首选项,其复选框选项为"Support Wirelessly Connected Devices".
这个选项有什么作用?一旦检查,我们如何使用这种新功能?
为了分享R的一些提示和技巧,你最有用的功能或技巧是什么?聪明的矢量化?数据输入/输出?可视化和图形?统计分析?特殊功能?互动环境本身?
每个帖子一个项目,我们将看看我们是否通过投票获得了胜利者.
[编辑2008年8月25日]:所以一周后,似乎简单str()赢得了民意调查.因为我想自己推荐一个,这是一个容易接受的答案.
我已经开始使用Xcode 4.2开发我的第一个iOS应用程序,并且使用"实用程序应用程序"模板(FlipsideViewController附带的模板)定位iOS 5.0.
我读到,因为ARC是一个编译时功能,它也应该与iOS 4兼容,所以我试图将我的应用程序定位到4.3,并尝试编译它.当我这样做时,我收到此错误:
FlipsideViewController.m:错误:自动引用计数问题:当前部署目标不支持自动__weak引用
它引用了这一行:
@synthesize delegate = _delegate;
Run Code Online (Sandbox Code Playgroud)
该变量声明为:
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
我知道iOS 4中不支持"弱引用",但我真的不明白为什么我想要使用弱引用开始,也不能弄清楚如何重写以避免使用它,同时仍然利用ARC(毕竟,它应该适用于iOS 4和5吗?)