2014ǯ08��27��

C/C++�ץ�ץ����å��ε�ư�ΰ㤤��/ ## /�ԡ�

�ޥ˥��å��ʥͥ���³���ƿ���������ޤ��󡣤ޤ��ץ�ץ����å����äǤ���

����C/C++�ץ�ץ����å��ε�ư�ΰ㤤��defined�ԡ�
��������Facebook�Ҥ�C/C++�ץ�ץ����å�Warp��Windows�Ķ��ǥӥ��

Warp �ε�ư��Ĵ�٤Ƥ��ơ��ʲ��Τ褦�ʡ��ޥ���Ÿ����˥����Ȥ����������褦�ʥ����ɤ��̤�ʤ����˵����դ��ޤ�����
(���� MinGW GCC �� x86_64-gdcproject-mingw32/x86_64-gdcproject-mingw32/sysroot/mingw/include/wtypes.h �إå�)
$ cat gen_cpp_comment.c
#define _VARIANT_BOOL /##/

$ ./warp.exe --stdout gen_cpp_comment.c
# 1 "gen_cpp_comment.c"
# 1 "i:\test\warp//"
# 1 "<command-line>"
# 1 "gen_cpp_comment.c"
gen_cpp_comment.c(2) : ## cannot appear at end of macro text


�¤Ϥ��켫�Τ� Warp �ΥХ����ʤΤǤ�����GNU cpp (GCC) �� VC++ �δ֤Ǥ��ư���㤤�ޤ�����

�� skipWhitespace() �Ȥ����ƥ�ץ졼�ȴؿ�����ǡ�'*' �� '/' �� 1 ʸ���ξ��˼�ꤳ�ܤ��Ƥ��ޤäƤ���褦�Ǥ����ʤ��Τ��ᡢ�Ǹ�� '/' �������åפ���֥ޥ���ʸ����κǸ�� ## �ϻ��ѤǤ��ʤ��פȥ��顼�ˤʤäƤ��ޤ����ˤɤ���� Warp �� D ����� InputRange �Ȥ������Ū�ʹ�¤�Υƥ�ץ졼�Ȥ����Τ����Ҥ���Ƥ���Τǡ����ϥ��ȥ꡼��� 1 ʸ�����ɤߤ������InputRange �˲�ǽ������ empty/front/popFront() �Τߡˤʤ��ᡢ�ȥ�å����ʥ����ɤˤʤäƤ���Τ�����Х��θ����˻פ��ޤ���

GCC 4.9.0 �Ǥϡ�������Τ��̤�ޤ����ʤ��Τ��� wtype.h �إå�������̵�����ѤǤ���ˡ��ºݤ˼��̻Ҥ���Ѥ���ȥ��顼�ˤʤ�ޤ���
$ cat gen_cpp_comment.c
#define _VARIANT_BOOL /##/

_VARIANT_BOOL

$ gcc -E gen_cpp_comment.c
# 1 "gen_cpp_comment.c"
# 1 ""
# 1 ""
# 1 "gen_cpp_comment.c"


gen_cpp_comment.c:1:23: error: pasting "/" and "/" does not give a valid preprocessing token
 #define _VARIANT_BOOL /##/
                       ^
gen_cpp_comment.c:3:1: note: in expansion of macro '_VARIANT_BOOL'
 _VARIANT_BOOL
 ^
/ /
VC++ �Ǥ��̤�ޤ���
>cl /E gen_cpp_comment.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

gen_cpp_comment.c
#line 1 "gen_cpp_comment.c"
������ˤ����򤱤�٤����������ʤΤǤ��������Τ褦�ʥ����Ȥ������� valid �ʤΤ��ɤ����ϡ�����ä����ΤˤϤ狼��ޤ���Ǥ�����
N1256��C99 final draft�ˤ� 6.4.9 Comments �ˤϡ�����Ϥ���äȤ狼��ʤ��ä��ΤǤ�����
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
#define glue(x,y) x##y
glue(/,/) k(); // syntax error, not comment
�Ȥ����ᤤ�㤬���ꡢ�ޤ���6.10.3.3 The ## operator ��
If the result is not a valid preprocessing token, the behavior is undefined.
�Ȥ���ޤ�����// ���ץ�ץ����å��Υȡ�����Ȥ��� valid �ʤΤ��ɤ������褯�狼��ޤ���Ǥ�����
�⤷�ܤ������������ޤ����顢����������������й����Ǥ���

��Ϣ�������� URL: stackoverflow: Does the C preprocessor strip comments or expand macros first?

�ȥ�å��Хå�URL

�����Ȥ���

̾��
 
  ³¨Ê¸»ú
 
 
��������
�ǿ�����
���̥���������
�ǿ�������
<%==comments[n].author%>
<% } %>
�������������󥿡�
  • ������
  • ������
  • �߷ס�

<% for ( var i = 0; i < 7; i++ ) { %> <% } %>
<%= wdays[i] %>
<% for ( var i = 0; i < cal.length; i++ ) { %> <% for ( var j = 0; j < cal[i].length; j++) { %> <% } %> <% } %>
0) { %> id="calendar-611743-day-<%= cal[i][j]%>"<% } %>><%= cal[i][j] %>
���ƥ����̥���������
�������饦��
QR������
QR¥³¡¼¥É
���ԥޥ���������ԥ塼��

'); label.html('\ �饤�֥ɥ��֥����ǤϹ���Υѡ����ʥ饤�������¬��Τ��᥯�å���(cookie)����Ѥ��Ƥ��ޤ���
\ ���ΥХʡ����Ĥ��뤫�������³���뤳�Ȥǥ��å����λ��Ѥ�ǧ������������ΤȤ����Ƥ��������ޤ���
\ �ޤ��������ͤ����ҥѡ��ȥʡ���Ȥˤ��������μ�³���ˤ�ꡢ���å����λ��Ѥ�������뤳�Ȥ�Ǥ��ޤ���
\ �ܺ٤��饤�֥ɥ����ѵ���򤴳�ǧ����������\ '); banner.append(label); var closeButton = $('