我在.c中定义了我的函数(没有头声明),如下所示:
inline int func(int i) {
return i+1;
}
Run Code Online (Sandbox Code Playgroud)
然后在下面的同一个文件中我使用它:
...
i = func(i);
Run Code Online (Sandbox Code Playgroud)
在链接期间,我得到了"未定义的引用'func'".为什么?
编译器或操作系统如何区分sig_atomic_t类型和普通的int类型变量,并确保操作是原子的?使用两者的程序具有相同的汇编代码.如何特别注意使操作成为原子?
以下代码是否正确?
char mychar = 200;
printf("%x", mychar);
Run Code Online (Sandbox Code Playgroud)
根据http://www.cplusplus.com/reference/clibrary/cstdio/printf/ %x期望一个整数(我的编译器为4个字节),我在这里只传递1个字节.由于printf使用了varargs,我担心这只会因为堆栈上的字节对齐而起作用(即,当在堆栈上按下时,char总是使用4个字节).
我认为最好写一下:
char mychar = 200;
printf("%x", static_cast<int>(mychar));
Run Code Online (Sandbox Code Playgroud)
你认为第一个代码是否安全?如果没有,如果我切换到bigendian架构,你认为我能得到不同的输出吗?
K&R第二版(第71页) - 我一定错过了解释:
sign = (s[i] == '-') ? -1 : 1;
Run Code Online (Sandbox Code Playgroud)
这个上下文是一个将字符串转换为double的函数.这部分特别是在功能跳过空白区域之后.我推断它正在检查正值或负值,并在函数结束时将其保存为-1或+1以进行符号转换...return sign * val /power;
我想这样做不是更好推断......我是特别不确定什么?和: 1正在做的事情(或任何地方,对于这个问题).
这看起来像是一个抽象的if陈述.当?检查真理,:是else......是这样吗?它仅限于if/else?
我是初学者,之前我没有遇到过这种表达式语法,所以我想知道是否有一个特殊的原因它似乎经常被正式的if/else替代 - 也许,可读性?
我正在构建一个多线程应用程序,pthreads需要一个线程来定期检查一些东西.在此线程之间的时间内不应使用任何CPU.这有可能usleep()吗?是usleep()不是在忙着等待?或者有更好的解决方案吗?
完成以下测试后:
for( i = 0; i < 3000000; i++ ) {
printf( "Test string\n" );
}
for( i = 0; i < 3000000; i++ ) {
write( STDOUT_FILENO, "Test string\n", strlen( "Test string\n" ) );
}
Run Code Online (Sandbox Code Playgroud)
事实证明,对printf的调用总共需要3秒钟,而写入调用需要花费46秒.如何,所有花哨的格式化魔法printf,以及它printf本身所称的事实,write这可能吗?有什么东西我不见了吗?
任何和所有的想法和意见都表示赞赏.
const int a = 10
int *p = (int*) &a;
*p = 20;
printf("a = %d", a);
Run Code Online (Sandbox Code Playgroud)
是否可以输出10或20,具体取决于编译器?
找出两个数字的除法是否会返回余数的最佳方法是哪一种?我们举个例子,我有一个值为{3,5,7,8,9,17,19}的数组.现在我需要从上面的数组中找到51的完美除数.有没有更简单的方法来解决这个问题?
我最近发现了这个GCC宏:
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
Run Code Online (Sandbox Code Playgroud)
在我看到这段代码之前我没有意识到,一段代码{...}可以某种方式在C中返回值
.1)你能给我一个暗示它是如何工作的吗?
虽然,我通常可以通过滥用逗号运算符来实现相同的结果:
#define max(a,b) \
(typeof (a) _a = (a), \
typeof (b) _b = (b), \
(_a > _b ? _a : _b))
Run Code Online (Sandbox Code Playgroud)
或者如果只是为了副作用,我会使用 do { ... } while(0)
2)这样做的首选方式是什么?
这两行代码是否实现了相同的结果?如果我在函数中有这些行,那么在两种情况下字符串都存储在堆栈中吗?除了不需要在第一行代码中声明空终止符之外,我是否应该使用一个而不是另一个?
char s[] = "string";
char* s = "string\0";
Run Code Online (Sandbox Code Playgroud)