gcc和clang编译器处理前置自增表达式的区别

本文最早发布于我的知乎回答:https://www.zhihu.com/question/39590451/answer/288933259
今天刚好有学弟学妹来问我类似的问题,就借着这个问题回答一下: 基本环境:Linux下的gcc和clang(没看版本,应该是最新)
先附上源程序

#include <stdio.h>
int main(int argc, char *argv[]) {
    int sum,i=2;
    sum=(++i)+(++i)+(++i)+(++i);
    printf("%d %d\n",sum,i);
    return 0;
}

继续阅读“gcc和clang编译器处理前置自增表达式的区别”

在C语言中实现泛型编程

0x00 泛型编程概述

  • 泛型编程是一个非常常见的编程方式。主要目的是实现静态联编,使得函数可以接受不同类型的参数,并且在编译的时候确定正确的类型。
  • 很多语言都对泛型编程提供了支持,比如在C++中可以使用函数模版和类模版来实现泛型编程;在Java、Objective-C或者C#等单根继承的语言中,也可以使用类似java.lang.Object、NSObject等类型进行编程。在具有类型推断功能(比如Swift)的编程语言中,更是可以直接使用泛型编程。
  • 不过C语言是高级语言编程的基础语言,那如何在C语言中实现泛型编程,确实是一个问题。首先C语言不支持函数重载,不支持模版类型,所以实现起来确实比较困难。

继续阅读“在C语言中实现泛型编程”