小编Gau*_*v K的帖子

C中的这个"[0 ... 255] ="语法是什么?

指的js0n.c

代码语法如下:

    static void *gostruct[] =
    {
        [0 ... 255] = &&l_bad,
        ['\t'] = &&l_loop, [' '] = &&l_loop, ['\r'] = &&l_loop, ['\n'] = &&l_loop,
        ['"'] = &&l_qup,
        [':'] = &&l_loop, [','] = &&l_loop,
        ['['] = &&l_up, [']'] = &&l_down, // tracking [] and {} individually would allow fuller validation but is really messy
        ['{'] = &&l_up, ['}'] = &&l_down,
        ['-'] = &&l_bare, [48 ... 57] = &&l_bare, // 0-9
        [65 ... 90] = &&l_bare, // A-Z
        [97 ... …
Run Code Online (Sandbox Code Playgroud)

c gcc-extensions

108
推荐指数
1
解决办法
6329
查看次数

C++ FAQ的不安全宏的解释?

根据C++ FAQ,宏是邪恶的:

[9.5]为什么我应该使用内联函数而不是普通的旧#define宏?

因为#define宏在四种不同的方面是邪恶的:邪恶的#1,邪恶的#2,邪恶的#3和邪恶的#4.有时你应该使用它们,但它们仍然是邪恶的.与#define宏不同,内联函数避免了臭名昭着的宏错误,因为内联函数总是只评估每个参数一次.换句话说,调用内联函数在语义上就像调用常规函数一样,只是更快:

// A macro that returns the absolute value of i
#define unsafe(i)  \
        ( (i) >= 0 ? (i) : -(i) )

// An inline function that returns the absolute value of i
inline
int safe(int i)
{
  return i >= 0 ? i : -i;
}

int f();

void userCode(int x)
{
  int ans;

  ans = unsafe(x++);   // Error! x is incremented twice
  ans = unsafe(f());   // Danger! f() is …
Run Code Online (Sandbox Code Playgroud)

c c++ c-preprocessor

31
推荐指数
3
解决办法
3666
查看次数

异常和复制构造函数:C++

参考http://en.wikipedia.org/wiki/Copy_elision

我运行下面的代码:

#include <iostream>

struct C {
  C() {}
  C(const C&) { std::cout << "Hello World!\n"; }
};

void f() {
  C c;
  throw c; // copying the named object c into the exception object.
}          // It is unclear whether this copy may be elided.

int main() {
  try {
    f();
  }
  catch(C c) {  // copying the exception object into the temporary in the exception declaration.
  }             // It is also unclear whether this copy may be …
Run Code Online (Sandbox Code Playgroud)

c++

10
推荐指数
1
解决办法
3173
查看次数

C++示例:无法理解正在做什么?

我在http://www.parashift.com/c++-faq-lite/istream-and-ignore.html找到了此链接

其中显示"如何让std :: cin跳过无效的输入字符?"

Use std::cin.clear() and std::cin.ignore().

#include <iostream>
#include <limits>

int main()
{
  int age = 0;

  while ((std::cout << "How old are you? ")
         && !(std::cin >> age)) {
    std::cout << "That's not a number; ";
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  }

  std::cout << "You are " << age << " years old\n";
  ...
}
Of course you can also print the error message when the input is out of range. For example, if you wanted the …
Run Code Online (Sandbox Code Playgroud)

c++

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

Java:使用RxTx Libararies

我是Java的新手,并且正在尝试编写串行通信应用程序.

我使用的是Windows 7(32位)

D:\Glaswegian\Java\RXTX\Test>java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode, sharing)

D:\Glaswegian\Java\RXTX\Test>



D:\Glaswegian\Java\RXTX\Test>javac -version
javac 1.7.0_07

D:\Glaswegian\Java\RXTX\Test>PATH
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32
\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C
:\Program Files\MATLAB\R2009a\bin;C:\Program Files\MATLAB\R2009a\bin\win32;C:\Pr
ogram Files\Java\jdk1.7.0_07\bin;C:\Program Files\Java\jre7\bin;C:\Program Files
\Java\jre7\lib\ext

D:\Glaswegian\Java\RXTX\Test>
Run Code Online (Sandbox Code Playgroud)

我下载了RxTx

http://henrypoon.wordpress.com/2010/12/25/installing-rxtx-for-serial-communication-with-java/ http://rxtx.qbang.org/wiki/index.php/Using_RXTX

如上面链接所述,解压缩rxtx-2.1-7-bins-r2.将rxtxSerial.dll复制到C:\ Program Files\Java\jre7\bin将RXTXcomm.jar复制到C:\ Program Files\Java\jre7\lib\ext

我只是想运行这段代码:

import gnu.io.*;

public class RxTxComm{
    public static void main(String[] args)
    {}

    }
Run Code Online (Sandbox Code Playgroud)

我低于错误.

D:\Glaswegian\Java\RXTX\Test>dir
 Volume in drive D has no label.
 Volume Serial Number is C643-EE74

 Directory of …
Run Code Online (Sandbox Code Playgroud)

java rxtx serial-communication

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

C++中有新的返回(void*)吗?

这是一个简单的问题:

使用new运算符是否返回类型指针(void*)?请参阅new/delete和malloc/free之间的区别是什么?答案 - 它说new returns a fully typed pointer while malloc void *

但根据http://www.cplusplus.com/reference/new/operator%20new/

throwing (1)    
void* operator new (std::size_t size) throw (std::bad_alloc);
nothrow (2) 
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();
placement (3)   
void* operator new (std::size_t size, void* ptr) throw();
Run Code Online (Sandbox Code Playgroud)

这意味着它返回一个类型为(void*)的指针,如果它返回(void*)我从未见过像MyClass*ptr =(MyClass*)new MyClass这样的代码;

我很困惑.

编辑

根据http://www.cplusplus.com/reference/new/operator%20new/ example

std::cout << "1: ";
  MyClass * p1 = new MyClass;
      // allocates memory by calling: operator new (sizeof(MyClass))
      // and then constructs an object …
Run Code Online (Sandbox Code Playgroud)

c++

6
推荐指数
1
解决办法
2265
查看次数

嵌入式 C:寄存器访问

假设我们想在地址 say 处写入0xc000,我们可以在 C 中定义一个宏:

#define LCDCW1_ADDR       0xc000
#define READ_LCDCW1()     (*(volatile uint32_t *)LCDCW1_ADDR)
#define WRITE_LCDCW1(val) ((*(volatile uint32_t *)LCDCW1_ADDR) = (val))
Run Code Online (Sandbox Code Playgroud)

我的问题是,当使用任何微控制器时,考虑一个例子MSP430,P1OUT寄存器地址是0x0021。

但是当我们使用P1OUT=0xFFFF时;// 它为 P1OUT 分配一个值 0xFFFF。

我的问题是它如何写入该地址,例如在本例中为 0x0021。IDE是IAR。我在头文件 msp430g2553.h 中找到了以下定义:

#define P1OUT_              (0x0021u)  /* Port 1 Output */
DEFC(   P1OUT             , P1OUT_)
Run Code Online (Sandbox Code Playgroud)

我想它正在定义地址,但是其他要写入或读取的宏在哪里。

谁能解释一下 P1OUT 如何在该特定地址位置写入的流程?另外请告诉我 0x0021u 中的 u 是什么意思?

谢谢


到目前为止我发现的细节是:

在 msp430g2553.h 中

#ifdef __IAR_SYSTEMS_ICC__
#include "in430.h"
#pragma language=extended

#define DEFC(name, address) __no_init volatile unsigned char name @ address;
#define DEFW(name, address) __no_init volatile unsigned short …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction embedded msp430 iar

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

C++类的隐式成员函数

C++ 中类的隐式成员函数是: 根据维基:http : //en.wikipedia.org/wiki/Special_member_functions

默认构造函数(如果没有显式声明其他构造函数)

如果没有显式声明移动构造函数或移动赋值运算符,则复制构造函数。如果声明了析构函数,则不推荐生成复制构造函数。

移动构造函数,如果没有拷贝构造函数,移动赋值运算符或析构函数被显式声明。

如果没有显式声明移动构造函数或移动赋值运算符,复制赋值运算符。如果声明了析构函数,则不推荐生成复制赋值运算符。

如果没有显式声明复制构造函数、复制赋值运算符或析构函数,则移动赋值运算符

析构函数

根据以下链接:

http://archives.cs.iastate.edu/documents/disk0/00/00/02/43/00000243-02/lcpp_136.html

默认构造函数(即没有参数的构造函数(第 12.1 节 [Ellis-Stroustrup90]),如果没有声明类的构造函数(具有任意数量的参数)。

如果没有声明复制构造函数,则为复制构造函数(第 12.1 节 [Ellis-Stroustrup90])。

析构函数(第 12.4 节 [Ellis-Stroustrup90]),如果没有声明析构函数。

赋值运算符([Ellis-Stroustrup90] 的第 5.17 和 12.8 节),如果没有声明赋值运算符。

根据以下链接:

http://www.picksourcecode.com/ps/ct/16515.php

默认构造函数

复制构造函数

赋值运算符

默认析构函数

地址运算符

有人可以给出以下代码示例:移动构造函数、复制赋值运算符、移动赋值运算符、赋值运算符、地址运算符 ,它们被用作隐式成员函数而未明确定义。

谢谢

c++

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

CAN总线协议实现

我想学习并实现CAN BUS协议.我在软件中使用MSP430 Launchpad实现了UART,SPI,I2C和单线总线协议.现在我想了解CAN总线协议.我有mBed LPC 1768 Cortex M3开发板.mBed有Can Bus Library,但我想编写自己的库,以便我可以详细了解它,即我对其他通信协议的方式.

我无法找到合适的资源开始,这些材料似乎散布在网上.任何人都可以指导如何使用我提供的开发板编写和实现CAN总线协议.

谢谢

can-bus serial-communication lpc

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

理解'try':C++

考虑以下代码:

#include <iostream>
#include <stdexcept>

class E{
    public:
        E(int n):m_n(n)
    {
        if (0>n)
        {
            throw std::logic_error("5");
        }
    }
        ~E(){cout << m_n << "#" <<endl;}
    public :
        int m_n;
};

int main()
{
    try{
        E a(5);
        try{
            E c(7);
            E b(-8);
            E d(9);
        }
        catch(const std::exception &e)
        {
            cout <<2 <<"&&&"<<e.what()<<endl;
            throw e;
        }
    }
    catch(const std::exception &e)
    {
        cout <<3 << "^^^^^ "<<e.what() << endl;
        throw e;
    }
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

7#
2&&&5
5#
3^^^^^ St9exception
std::exception: St9exception
Aborted. …
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling

3
推荐指数
1
解决办法
215
查看次数