相关疑难解决方法(0)

什么是外部联系和内部联系?

我想了解外部联系和内部联系及其区别.

我也想知道的意思

const默认情况下,变量内部链接,除非另有声明extern.

c++ c++-faq

318
推荐指数
8
解决办法
12万
查看次数

有没有理由在C语言中声明一些"volatile const"但在C++中只是"volatile"?

我在我的项目中使用了一个头文件,其中包含以下定义:

#ifdef __cplusplus
  extern "C" {
#endif 

#ifdef __cplusplus
  #define   __I     volatile             /*!< Defines 'read only' permissions*/
#else
  #define   __I     volatile const       /*!< Defines 'read only' permissions*/
#endif
Run Code Online (Sandbox Code Playgroud)

__I被用作在另一头文件如下:

    typedef struct {   
    // more members before         
      __I  uint32_t  CR;   /*!< GPIO Commit*/
    // more members after

    } GPIOA_Type;

#define GPIOF_BASE                      0x40025000UL
#define GPIOF                           ((GPIOA_Type *) GPIOF_BASE)
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么__I在C中使用const而不是在C++中?您仍然可以修改CR指向的值,因为您有地址,但我只是好奇为什么定义__I不同.

对于任何感兴趣的人来说,这些__I定义来自IAR Embedded Workbench ARM for Cortex-M4,结构来自德州仪器LM4F120H5QR CMSIS文件.

c c++ iar cmsis cortex-m

8
推荐指数
1
解决办法
578
查看次数

const volatile char字符串打印不正确

我有一个非常简单的程序,它只是无限地输出一个指向const volatile char的const指针; 它是这样的:

const volatile char* const str = "ABCDEFGHIJKL";

while(true) {
    cout << '\r' << str;
}
Run Code Online (Sandbox Code Playgroud)

问题是,运行此程序时,输出为1.有一种方法来解决这个问题,这是输出const_cast<char*>(str)代替str.

但是如果我做const_cast<volatile char*>(str)输出是1,就像在演员之前那样,所以我猜测1输出是由volatile关键字引起的,这很奇怪因为我认为volatile只会让编译器避免在该变量中进行优化,这应该是'改变它的价值.

因此,我的问题是世界是如何将1作为输出的.

注意:

我已经尝试在Ubuntu 16.04中使用GCC进行编译,在Windows 7中使用MinGW进行编译,因此编译器不是问题(我猜).

c++ string volatile

7
推荐指数
1
解决办法
293
查看次数

标签 统计

c++ ×3

c ×1

c++-faq ×1

cmsis ×1

cortex-m ×1

iar ×1

string ×1

volatile ×1