相关疑难解决方法(0)

我应该何时为函数/方法编写关键字'inline'?

我应该何时inline在C++中为函数/方法编写关键字?

看到一些答案,一些相关的问题:

  • 我应该何时写在C++函数/方法关键字"内联"?

  • 什么时候编译器不知道何时使函数/方法'内联'?

  • 当一个应用程序为函数/方法写入"内联"时,是否多线程是否重要?

c++ inline one-definition-rule

526
推荐指数
6
解决办法
12万
查看次数

为什么创建了register关键字?

在阅读Herb Sutter撰写的关键词(或其他名称)时,我遇到了以下几点:

没错,有些关键字在语义上等同于空格,这是一个美化的评论.

我们已经看到为什么C++语言将关键字视为保留字,我们已经看到两个关键字-auto和register--它们对C++程序没有任何语义差异.不要使用它们; 无论如何,它们只是空格,并且有更快的方式来输入空格.

如果关键字auto(可能不是在C++ 11中)并且register没有价值,那么它们为什么被创建和使用?

如果包含register变量之前没有任何区别

#include<stdio.h>
int main(){
    register int a = 15;
    printf("%d\n%d\n",&a,a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么上述程序会出错?

test_register.c:在函数'main'中:

test_register.c:4:2:错误:请求的寄存器变量'a'的地址

的printf( "%d \n%d \n",&A,A);

以下程序适用于C++.

#include<iostream>
int main(){
    register int a = 15;
    std::cout<<&a<<'\n'<<a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++ language-lawyer c++11

44
推荐指数
3
解决办法
7265
查看次数

什么时候编译器内联C++代码?

在C++中,如果方法是显式声明inline(或在头文件中定义),或者允许编译器在他们认为合适的情况下内联方法,那么这些方法是否只有内联?

c++ compiler-construction optimization inline

18
推荐指数
3
解决办法
8487
查看次数

与gcc相比,为什么clang在寄存器变量中表现怪异?

背景:

我需要在C代码中获取寄存器值,因此我在gcc用法中发现了这一点。我使用以下代码获得ebp值。

   register int ebp asm("ebp");
   printf("currently ebp is %08x\n", ebp);
   // then some code use the value
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我将程序的编译器更改为clang为止。在gcc中,它通常会打印类似于0x7f1284978的内容,绝对是类似value的指针。

但是当使用clang时,输出变得很奇怪,它打印出一个0x9之类的值。Ebp不能具有这样的值。

问:

  • clang不支持此寄存器变量用法吗?
  • 如果它不支持此功能,为什么不抱怨警告或错误(使用以下代码进行编译)?

    #include <stdio.h>
    
    static size_t vfp = 0x233;
    
    int main(void) {
        register int ebp asm("ebp");
        vfp = (size_t) ebp;
        printf("vfp value is 0x%lx\n", vfp);
        return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)

c assembly clang

5
推荐指数
1
解决办法
204
查看次数