精华内容
下载资源
问答
  • 宏定义#井号的用法

    千次阅读 2016-08-14 22:54:38
    单个井号(#):在宏展开时候会将#后面参数替换成相应字符串 #include #define Print(message) printf(#message) int main(int argc, char *argv[]) { Print(Hello World\n); return 0; } 两个井号...

    单个井号(#):在宏展开的时候会将#后面的参数替换成相应的字符串

    #include <stdio.h>
    
    #define Printi(message) printf(#message " = %d\n", message)
    #define Printd(message) printf(#message " = %lf\n", message)
    #define Prints(message) printf(#message " = %s\n", message)
    
    int main(int argc, char *argv[])
    {
    	int i_ = 10;
    	double d_ = 5.0;
    	char c[] = "hello";
    	
        Printi(i_);
        Printd(d_);
        Prints(c);
    
        return 0;
    }
    




    两个井号(##):起连接符的作用,将前后两个参数连接为一个子串,但连接后的子串不能当成字符串形式

    #include <stdio.h>
    
    #define Print(n) printf("token" #n " = %d\n", token##n)
    
    int main(int argc, char *argv[])
    {
        int token1 = 10;
        
        Print(1);
        
        return 0;
    }


    #################################################################################

    《C++ 编程思想》P95页

    #################################################################################

    #include <iostream>
    using namespace std;
    
    #define P(message) cout<< #message<<" = "<<message<<endl;
    
    int main(int argc, char *argv[])
    {
        int i_ = 10;
        double d_ = 5.0;
        string s_ = "hello";
    
        P(i_);
        P(d_);
        P(s_);
    
        return 0;
    }


    另可以参考:http://blog.csdn.net/morewindows/article/details/6697488

    展开全文
  • c/c++中 ##和#的用法(井号的用法)

    千次阅读 2011-10-06 16:33:11
    井号(#) 把传递过来参数当成字符串进行替代 如下示例: 程序代码 #define display(name) printf(""#name"") int main() { display(name); } 输出: name 双井号(##) 称为连接符 在带...

    在宏定义中经常会用到###

    单井号(#)

    把传递过来的参数当成字符串进行替代

    如下示例:

    程序代码

    #define display(name) printf(""#name"")
    int main() {
      display(name);
    }

    输出:

    name


    双井号(##)

    称为连接符

    在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在参考编译原理。


    假设程序中已经定义了这样一个带参数的宏:

    程序代码

    #define paster( n ) printf( "token" #n " = %d", token##n )
    //同时又定义了一个整形变量:
    int token9 = 9;



    现在在主程序中以下面的方式调用这个宏:

    paster( 9 );


    那么在编译时,上面的这句话被扩展为:

    printf( "token" "9" " = %d", token9 );


    注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。


    可想而知,上面程序运行的结果就是在屏幕上打印出token9=9

    展开全文
  • URL 中 # 井号的用法   我们经常使用URL 定位,传递参数等应用,最经常使用的是? 问号,一般作为参数传递,而我们在接触到单页开发模式的时候会接触到url 中大量# 井号的使用,有时候会对这三个常见符号有些分不...

               URL 中 # 井号的用法 

           我们经常使用URL 定位,传递参数等应用,最经常使用的是? 问号,一般作为参数传递,而我们在接触到单页开发模式的时候会接触到url 中大量# 井号的使用,有时候会对这三个常见符号有些分不清,搞不懂具体含义。

    # 井号介绍

    涵义

     在url 中使用# 例如  index.html#product  含义一般是定位到本页面的product位置,所以# 在url 中一般是作为页面定位使用,那么product 到底是用什么定位

    1:<a name="product">

    2:<div id="product">

    这两种方式都可以把滚动条定位到页面的响应位置

    twitter 在改版的时候把 改版前的用户主页网址为http://twitter.com/username改版后,就变成了http://twitter.com/#!/username 这是主流网站第一次将"#"大规模用于重要URL中。这表明井号(Hash)的作用正在被重新认识

     

     

    特性1:HTTP 请求中的作用

       是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。

    比如,访问下面的网址,http://www.example.com/index.html#print,浏览器实际发出的请求是这样的:

    GET /index.html HTTP/1.1
    Host: www.example.com

     在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。

    比如,下面URL的原意是指定一个颜色值:http://www.example.com/?color=#fff,但是,浏览器实际发出的请求是:

    GET /?color= HTTP/1.1
    Host: www.example.com

     

    特性2:改版#不会导致网页重载

        单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。
    比如,从http://www.example.com/index.html#location1改成http://www.example.com/index.html#location2,浏览器不会重新向服务器请求index.html。

     

    特性3:改版# 后对history 范围历史的影响

     每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。值得注意的是,上述规则对IE 6和IE 7不成立,它们不会因为#的改变而增加历史记录。

     

    鉴于特性2,3 实现了在单页下view 的路由和历史回退,目前h5手机开发所采用的单页模式的基础

     

    特性4:window.location.hash读取#值

     window.location.hash这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。

     

    特性5:onhashchange事件 H5新增

    这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。
      它的使用方法有三种:

    window.onhashchange = func;
    <body οnhashchange="func();">
    window.addEventListener("hashchange", func, false);

     

    对于不支持onhashchange的浏览器,可以用setInterval监控location.hash的变化。

     

    特性6:Google抓取#的机制

          默认情况下,Google的网络蜘蛛忽视URL的#部分。
      但是,Google还规定,如果你希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用"#!",Google会自动将其后面的内容转成查询字符串_escaped_fragment_的值。
      比如,Google发现新版twitter的URL:http://twitter.com/#!/username
      就会自动抓取另一个URL:http://twitter.com/?_escaped_fragment_=/username
      通过这种机制,Google就可以索引动态的Ajax内容。

     

     

    展开全文
  • ## 连接符号由两个井号组成,其功能是在带参数宏定义中将两个子串(token)联接起来,从而形成一个新子串。但它不可以是第一个或者最后一个子串。所谓子串(token)就是指编译器能够识别最小语法单元。具体...

     

    ##(两个井号)#(一个井号)都是什么意思

    连接符 ##(两个井号)

    不知道什么符 #(一个井号)

    ## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释

    #符是把传递过来的参数当成字符串进行替代。

    假设程序中已经定义了这样一个带参数的宏:

    #define PRINT( n ) printf( "token" #n " = %d", token##n )

    同时又定义了二个整形变量:

    int token9 = 9;

    现在在主程序中以下面的方式调用这个宏:

    PRINT( 9 );

    那么在编译时,上面的这句话被扩展为:

    printf( "token" "9" " = %d", token9 );

    注意到在这个例子中,PRINT(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。

    可想而知,上面程序运行的结果就是在屏幕上打印出

    token9=9

    还有点不明白?!

    再来一个例子:

    #define PRINT( n ) printf( "token" #n " = %d", game##n )

    int token9 = 9;

    int game9 = 99;

    调用:

    PRINT(9);

    屏幕上打印出:

    token9 = 99

    转载于:https://www.cnblogs.com/blogofwu/p/4228682.html

    展开全文
  • C(和C++)中宏(Macro)属于编译器预处理范畴,属于编译期概念(而非运行期概念)。下面对常遇到使用问题做了简单总结。 关 于#和## 在C语言宏中,#功能是将其后面宏参数进行字符串化操作...
  • 间接转载,原地址不详。...在C语言宏中,#功能是将其后面宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用宏变量通过替换后在其左右各加上一个双引号。比如下面代码中宏: #define W
  • 1、<%=%>尖括号 百分号 等号 里面放变量或方法,如: <div><h1>Hello World</h1><p><%= ShowHelloWorld() %>...尖括号 百分号 井号 这里是数据绑定 如:<%# DataBi...
  • 1、<%=%>尖括号 百分号 等号 里面放变量或方法,如: <div><h1>Hello World</h1><p><%= ShowHelloWorld() %>...尖括号 百分号 井号 这里是数据绑定 如:<%# DataBi...
  • ASP.NET 尖括号 百分号 井号 等号 @ 的用法 <%= %> <%# %> <%@ %> <%%> 1、<%=%> 尖括号 百分号 等号 里面放的变量或方法,如:<div><h1>Hello World</h1><p&...
  • C语言(C++语言)中宏(Macro)属于编译器预处理范畴,属于编译期概念(而非运行期概念)。下面对常遇到使用问题做了简单总结。 关 于#和## 在C语言宏中,#功能是将其后面宏参数进行字符串化操作...
  • 区别在于Margin是不同Tag间互相隔离距离而Padding是同一元素中不同内容分割使用 , 这在表格中最看得清楚 。 尤其是当对一个区域加载了背景样式之后 , Padding下内容背景色会发生改变 , 而Margin则不会有所...
  • 1、<%=%> 尖括号 百分号 等号 里面放变量或方法,如: <div><h1>Hello World</h1><p><%= ShowHelloWorld() %>... 尖括号 百分号 井号 这里是数据绑定 如:<%# DataBi...
  • struts2中 # % $ (井号,星号,百分号)区别和用法   源自: http://hi.baidu.com/golotus/blog/item/82e7ded4cf631807a08bb77f.html   struts2 OGNL,struts2 表达式语言,Struts2 中OGNL表达式...
  • C语言宏定义中的井号(#)的用法

    千次阅读 2013-03-01 15:57:18
    #arg的用法在宏定义的规则里面,是指将传进来的arg转换成字符串,并用双引号括起来。 例如: #define print(x) #x  那么执行print(hello)将展开成"hello" #define PRINT(int) printf(#int " = %d\n",...
  • C语言的井号(#)特殊用法(#define)

    千次阅读 2014-03-30 10:45:42
    一:特殊字符串宏 [cpp] #define A(x) T_##x  #define B(x) #@x  #define C(x) #x  我们假设x=1, 则上面宏定义会被解释成以下样子 A(1)------>T_1 B(1)------>'1' C(1)------>"1" 这些主要...
  • 1. #:在宏展开时候会将#后面参数替换成字符串,如:  #define p(exp) printf(#exp);  调用p(asdfsadf)时候会将#exp换成"asdfsadf"  2. ##:将前后两个单词拼接在一起。例如《The C Programming ...
  • #(井号)在C/C++#define宏定义中特殊用法 2011年10月18日 星期二 11:17 A.M.  工作需要,被迫看了一段老外编写C++代码,开始被老外绕了一通,最后找到了原因.老外真是牲口,妈啥技巧都用,查了一下书知道了...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 219
精华内容 87
关键字:

井号的用法