C中的运行时运算符

时间:2015-05-11 10:08:57

标签: c

C中编译时和运行时运算符的定义是什么?我知道sizeof()是C中的编译时运算符,但它是C?

中的运行时运算符

2 个答案:

答案 0 :(得分:1)

对于C;各种优化(例如,常量传播和常量折叠)意味着每个操作符都可以在编译时完成(如果情况允许)。

举一个简单的例子,考虑这个函数:

int foo(int a, int b) {
    return a+b;
}

这看起来需要在运行时添加。

现在考虑以下代码:

int x = foo(1, 2);

现在编译器可以"内联"函数,传播常量,并在编译时进行添加。您最终得到int x = 3;(加上foo()函数的潜在冗余副本,该副本能够在运行时添加。)

还有一些情况可以在编译时完成优化,但可以在链接期间完成(使用LTO /链接时间优化);在编译时或运行时不对运算符进行求值。一个简单的例子是,如果另一个目标文件("编译单元")中的代码执行int x = foo(1, 2);

另外,一般情况下,情况正好相反 - 没有什么能保证在可能的情况下在编译时评估运算符;所以你不能说操作员总是"编译时间"。对于一个简单的例子,考虑字符串连接(例如char *myString = "Hello " "World!";) - 编译器生成在运行时进行连接的代码是合法的(即使很难想到一个原因)为什么编译器想要)。

答案 1 :(得分:0)

编译时间运算符 - >在编译期间计算

运行时运算符 - >执行期间

示例:

INPUT A,B

C = A + B

这里+是运行时运算符,因为它取决于您输入的值。