C中编译时和运行时运算符的定义是什么?我知道sizeof()是C中的编译时运算符,但它是C?
中的运行时运算符答案 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
这里+是运行时运算符,因为它取决于您输入的值。