在我看来Linux使用/ proc/self/exe很容易.但我想知道是否有一种方便的方法可以在C/C++中使用跨平台接口查找当前应用程序的目录.我已经看到一些项目与argv [0]混在一起,但它似乎并不完全可靠.
如果你曾经不得不支持Mac OS X,它没有/ proc /,你会做什么?使用#ifdefs隔离特定于平台的代码(例如NSBundle)?或者尝试从argv [0],$ PATH等等推断出可执行文件的路径,冒着在边缘情况下发现错误的风险?
在编写优化ftol函数时,我发现了一些非常奇怪的行为GCC 4.6.1.让我先向您展示代码(为清楚起见,我标记了差异):
fast_trunc_one,C:
int fast_trunc_one(int i) {
int mantissa, exponent, sign, r;
mantissa = (i & 0x07fffff) | 0x800000;
exponent = 150 - ((i >> 23) & 0xff);
sign = i & 0x80000000;
if (exponent < 0) {
r = mantissa << -exponent; /* diff */
} else {
r = mantissa >> exponent; /* diff */
}
return (r ^ -sign) + sign; /* diff */
}
Run Code Online (Sandbox Code Playgroud)
fast_trunc_two,C:
int fast_trunc_two(int i) {
int mantissa, exponent, …Run Code Online (Sandbox Code Playgroud) 我遇到了以下代码段
if( 0 != ( x ^ 0x1 ) )
encode( x, m );
Run Code Online (Sandbox Code Playgroud)
什么x ^ 0x1意思?这是一些标准技术吗?
我想在C中编写一个宏,它接受任意数量的参数,而不是特定的数字
例:
#define macro( X ) something_complicated( whatever( X ) )
Run Code Online (Sandbox Code Playgroud)
哪里X有任何数量的参数
我需要这个,因为它whatever是重载的,可以用2或4个参数调用.
我试过两次定义宏,但第二个定义覆盖了第一个!
我正在使用的编译器是g ++(更具体地说,mingw)
我需要使用二进制数.
我试着写:
const x = 00010000;
Run Code Online (Sandbox Code Playgroud)
但它没有用.
我知道我可以使用具有相同值的十六进制数字00010000,但我想知道C++中是否存在二进制数的类型,如果没有,是否有另一种解决方案可以解决我的问题?
这一直困扰着我.gcc/g ++如何编译自己?我猜测每个修订版都使用以前构建的修订版进行编译.这是真的?如果是的话,是否意味着最古老的g ++/gcc版本是用汇编语言编写的?
我在我的实现文件中声明了一个枚举,如下所示,并在我的接口中将该类型的变量声明为PlayerState thePlayerState; 并在我的方法中使用了变量.但是我收到错误声明它是未声明的.如何在我的方法中正确声明和使用PlayerState类型的变量?:
在.m文件中
@implementation View1Controller
typedef enum playerStateTypes
{
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
} PlayerState;
Run Code Online (Sandbox Code Playgroud)
在.h文件中:
@interface View1Controller : UIViewController {
PlayerState thePlayerState;
Run Code Online (Sandbox Code Playgroud)
在.m文件中的某些方法中:
-(void)doSomethin{
thePlayerState = PLAYER_OFF;
}
Run Code Online (Sandbox Code Playgroud) read()和recv()之间的区别,以及socket编程中send()和write()之间的区别是什么?性能和速度等行为.