标签: c

通过C中的引用传递

如果C不支持通过引用传递变量,为什么这会起作用?

#include <stdio.h>

void f(int *j) {
  (*j)++;
}

int main() {
  int i = 20;
  int *p = &i;
  f(p);
  printf("i = %d\n", i);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

$ gcc -std=c99 test.c
$ a.exe
i = 21 
Run Code Online (Sandbox Code Playgroud)

c pointers pass-by-reference

200
推荐指数
11
解决办法
34万
查看次数

父母退出后如何使子进程死亡?

假设我有一个只产生一个子进程的进程.现在,当父进程因任何原因(正常或异常,通过kill,^ C,断言失败或其他任何原因)退出时,我希望子进程死掉.如何正确地做到这一点?


stackoverflow上的一些类似问题:


关于Windows的 stackoverflow的一些类似问题:

c unix linux fork process

199
推荐指数
13
解决办法
15万
查看次数

关闭vs关闭套接字?

在C中,我理解如果我们关闭套接字,则意味着套接字将被销毁,以后可以重新使用.

关机怎么样?描述说它关闭了与该套接字的双工连接的一半.但是那个套接字会像close系统调用一样被销毁吗?

c sockets networking

199
推荐指数
6
解决办法
23万
查看次数

套接字编程中AF_INET和PF_INET有什么区别?

套接字编程中AF_INET和PF_INET有什么区别?

我和在socket()和中使用AF_INET和PF_INET之间的困惑bind().

另外,如何在sin_addr现场提供ip-address ?

c sockets linux

198
推荐指数
6
解决办法
16万
查看次数

整数除法的行为是什么?

例如,

int result;

result = 125/100;
Run Code Online (Sandbox Code Playgroud)

要么

result = 43/100;
Run Code Online (Sandbox Code Playgroud)

结果总会成为师的底线吗?什么是定义的行为?

c math c99 integer-division c89

197
推荐指数
6
解决办法
34万
查看次数

为什么无符号整数溢出定义了行为但是有符号整数溢出不是?

无符号整数溢出由C和C++标准很好地定义.例如,C99标准(§6.2.5/9)声明

涉及无符号操作数的计算永远不会过度流动,因为无法用结果无符号整数类型表示的结果将以比结果类型可以表示的最大值大1的数量为模.

但是,这两个标准都声明有符号整数溢出是未定义的行为.再次,从C99标准(§3.4.3/1)

未定义行为的一个示例是整数流上的行为

这种差异是否存在历史或(甚至更好!)技​​术原因?

c c++ integer-overflow undefined-behavior

197
推荐指数
4
解决办法
4万
查看次数

#define宏用于C中的调试打印?

尝试创建一个宏,可以在定义DEBUG时用于打印调试消息,如下面的伪代码:

#define DEBUG 1
#define debug_print(args ...) if (DEBUG) fprintf(stderr, args)
Run Code Online (Sandbox Code Playgroud)

如何用宏实现这一目标?

c c-preprocessor

196
推荐指数
7
解决办法
18万
查看次数

osx上的.so和.dylib有什么区别?

.dylib是OSX上的动态库扩展,但是当我不能/不应该使用传统的unix .so共享对象时,我从来都不清楚.

我有些问题:

  • 在概念层面,.so和.dylib之间的主要区别是什么?
  • 什么时候可以/我应该使用一个而不是另一个?
  • 编译技巧和提示(例如,替换gcc -shared -fPIC,因为这不适用于osx)

c c++ unix macos

196
推荐指数
4
解决办法
9万
查看次数

是否有技术原因使用>(<)代替!=在'for'循环中递增1?

我几乎从未见过for像这样的循环:

for (int i = 0; 5 != i; ++i)
{}
Run Code Online (Sandbox Code Playgroud)

是否有技术原因使用><代替!=for循环中递增1 ?或者这更像是一个惯例?

c c++ for-loop

196
推荐指数
18
解决办法
1万
查看次数

什么是C中的&&&操作

#include <stdio.h>

volatile int i;

int main()
{
    int c;

    for (i = 0; i < 3; i++) 
    {
         c = i &&& i;
         printf("%d\n", c);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面编译的程序的输出gcc

0
1
1
Run Code Online (Sandbox Code Playgroud)

使用-Wall-Waddress选项,gcc发出警告:

warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]
Run Code Online (Sandbox Code Playgroud)

如何c在上述计划中进行评估?

c c++ operators gcc-warning compiler-optimization

195
推荐指数
2
解决办法
1万
查看次数